提交代码
This commit is contained in:
parent
d022e33da9
commit
e37d0e4112
16
App.vue
16
App.vue
|
@ -34,18 +34,19 @@
|
|||
padding: 10px;
|
||||
}
|
||||
.pagepaddings{padding: 14px;}
|
||||
.page_content{padding: 0 12px 10px;}
|
||||
//内容框
|
||||
.contentboxsty{border-radius: 8px;background: #1C2755;}
|
||||
//没有底部边框
|
||||
.noborbot{border-bottom:none !important}
|
||||
|
||||
.t-icon{background-repeat: no-repeat;}
|
||||
.icon22{width: 22px;height: 22px;}
|
||||
.paddrigth5{padding-right: 5px;}
|
||||
//字体大小
|
||||
.font12{font-size: $uni-font-size-sm;}
|
||||
.font13{font-size:13px;}
|
||||
.font14{font-size: $uni-font-size-base;}
|
||||
.font15{font-size: 15px;}
|
||||
.font15{font-size: 15px!important;}
|
||||
.font20{font-size: 20px;}
|
||||
.font22{font-size: 22px;}
|
||||
.font24{font-size: 24px;}
|
||||
|
@ -53,12 +54,21 @@
|
|||
.font_bold{font-weight: bold;}
|
||||
//文字颜色
|
||||
.text_color_black{color: #000;}
|
||||
.theme_color{color: #009688 }
|
||||
//颜色
|
||||
.but_color{background: #009688 !important;}
|
||||
// .text_{color: #00B68D;}
|
||||
|
||||
//布局
|
||||
.flex_layout{display: flex;}
|
||||
.flex1{flex: 1;}
|
||||
//paddind
|
||||
.padd_rigth5{padding-right: 5px;}
|
||||
.padd_bot6{padding-bottom: 6px;}
|
||||
.padd_top12{padding-top:12px;}
|
||||
.padd_rigth12{padding-right: 12px;}
|
||||
.padd_bot12{padding-bottom: 12px;}
|
||||
.padd_left12{padding-left:12px;}
|
||||
//margin
|
||||
.mar_top12{margin-top: 12px;}
|
||||
.page_list{margin-bottom: 12px;padding:0 12px;}
|
||||
|
@ -74,7 +84,6 @@
|
|||
}
|
||||
.list_content{padding:12px;}
|
||||
}
|
||||
|
||||
//页面固定按钮
|
||||
.bottom_but{bottom: 40px;bottom: 40px;position: fixed;width: calc(100% - 28px);
|
||||
view{width: 50%;text-align: center;margin: 0 20px;border-radius: 19px;background: #DDD;line-height: 38px;}
|
||||
|
@ -84,5 +93,4 @@
|
|||
.page_add{display: flex;justify-content: center;margin: 7px 20px;border-radius: 17.5px;background: #1C2755;line-height: 35px;}
|
||||
}
|
||||
.bot_padding{padding-bottom: 100px;}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -31,8 +31,8 @@ export default {
|
|||
{
|
||||
id: 0,
|
||||
path: '/pages/index/index',
|
||||
icon: '/static/indexB.png',
|
||||
selectIcon: '/static/indexA.png',
|
||||
icon: '/static/indexA.png',
|
||||
selectIcon: '/static/indexB.png',
|
||||
text: '首页',
|
||||
centerItem: false
|
||||
},
|
||||
|
@ -48,8 +48,8 @@ export default {
|
|||
{
|
||||
id: 2,
|
||||
path: '/pages/person/person',
|
||||
icon: '/static/personA.png',
|
||||
selectIcon: '/static/personB.png',
|
||||
icon: '/static/personB.png',
|
||||
selectIcon: '/static/personA.png',
|
||||
text: '我的',
|
||||
centerItem: false
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<template>
|
||||
<view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name:"switchDefine",
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,21 @@
|
|||
// 不同的环境变量配置
|
||||
const development = {
|
||||
requestBaseUrl: 'http://development',
|
||||
appid: '',
|
||||
}
|
||||
|
||||
const test = {
|
||||
requestBaseUrl: 'https://api.dev.dwoodauto.com/api',
|
||||
appid: 'wxd5xxxxee0fce1c81',
|
||||
}
|
||||
|
||||
const production = {
|
||||
requestBaseUrl: 'http://production',
|
||||
appid: 'wx3xxxx1ce403cab3',
|
||||
}
|
||||
|
||||
export default {
|
||||
development,
|
||||
test,
|
||||
production
|
||||
}
|
6
main.js
6
main.js
|
@ -6,6 +6,7 @@ import "./static/iconfont/iconfont-weapp/iconfont-weapp-icon.css"
|
|||
import Vue from 'vue'
|
||||
import App from './App'
|
||||
import svg from './static/iconfont/svg.js'
|
||||
|
||||
Vue.use(svg);
|
||||
|
||||
Vue.config.productionTip = false;
|
||||
|
@ -20,8 +21,13 @@ app.$mount()
|
|||
// #ifdef VUE3
|
||||
import { createSSRApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import request from "./utils/api.js"
|
||||
import publicMethods from "./utils/public.js"
|
||||
|
||||
export function createApp() {
|
||||
const app = createSSRApp(App)
|
||||
app.config.globalProperties.$api = request;
|
||||
app.config.globalProperties.$wf = publicMethods;
|
||||
return {
|
||||
app
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
/* 快应用特有相关 */
|
||||
"mp-weixin" : {
|
||||
/* 小程序特有相关 */
|
||||
"appid" : "wx62bd7b72516b9017",
|
||||
"appid" : "wx38dc81b0eef130a3",
|
||||
"setting" : {
|
||||
"urlCheck" : false
|
||||
},
|
||||
|
|
34
package.json
34
package.json
|
@ -1,16 +1,22 @@
|
|||
{
|
||||
"name": "mes_mobile",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.tool.dwoodauto.com/long/mes_mobile.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
"uni-app": {
|
||||
"scripts": {
|
||||
"dev": {
|
||||
"title": "微信小程序——开发版",
|
||||
"env": {
|
||||
"ENV_TYPE": "dev",
|
||||
"UNI_PLATFORM": "mp-weixin",
|
||||
"VITE_BASE_API": "https://api.dev.dwoodauto.com"
|
||||
}
|
||||
},
|
||||
"pro": {
|
||||
"title": "微信小程序——正式版",
|
||||
"env": {
|
||||
"ENV_TYPE": "pro",
|
||||
"UNI_PLATFORM": "mp-weixin",
|
||||
"VITE_BASE_API": "http://pro.domain/"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
40
pages.json
40
pages.json
|
@ -119,6 +119,46 @@
|
|||
"navigationBarTitleText" : "设备状态",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/equipmentManage/deviceDetail",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "设备信息",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/person/faceAuthentication",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "人脸认证",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/person/myAuthority",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "我的权限",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/person/alarm",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "设备报警",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/person/safetyAccidents",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "安全事故",
|
||||
"enablePullDownRefresh" : false
|
||||
}
|
||||
}],
|
||||
"globalStyle": {
|
||||
"navigationBarTextStyle": "white",
|
||||
|
|
|
@ -1,23 +1,248 @@
|
|||
<template>
|
||||
<!-- 设备状态 -->
|
||||
<view>
|
||||
|
||||
<view class="pagepaddings">
|
||||
<view class=".padd_bot12">
|
||||
<text>硬件设备状态</text>
|
||||
</view>
|
||||
<view class="body-view contentboxsty">
|
||||
<view class="content-top">
|
||||
<view class="content-left">
|
||||
<text class="iconfont icon-gengduo more_icon"></text>
|
||||
</view>
|
||||
<view class="content-scroll">
|
||||
<view class="center-cut-menu">
|
||||
<scroll-view scroll-x="true" scroll-with-animation="true" class="scroll-view" :scroll-left="scrollLeft">
|
||||
<view class="scroll-item" v-for="(item, index) in list" :key="index" @click="changeMenu(index)">
|
||||
<text class="item-text" :class="curIndex == index? 'active' : ''">{{item.name}}</text>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="content-right">
|
||||
<text class="iconfont icon-gengduo"></text>
|
||||
</view>
|
||||
</view>
|
||||
<swiper class="swiper-box-list" circular="true" :current="curIndex" @change="swiperChange">
|
||||
<swiper-item class="swiper-topic-list" v-for="item in swiperDateList" :key="item.id">
|
||||
<view class="swiper-item" v-if="item.id==1">
|
||||
<view class="" style="width: 100%;">
|
||||
<image style="width: 100%;" src="http://dm-auto.oss-cn-shanghai.aliyuncs.com/mes_wechat/background.png" mode=""></image>
|
||||
</view>
|
||||
<view class="font14">
|
||||
<view class="device_row">
|
||||
<text class="name font_bold">设备名称</text>
|
||||
<text>双头立锯</text>
|
||||
</view>
|
||||
<view class="device_row">
|
||||
<text class="name font_bold">开机时间</text>
|
||||
<text>2024-02-11 08:00:45</text>
|
||||
</view>
|
||||
<view class="device_row">
|
||||
<text class="name font_bold">保养到期日</text>
|
||||
<text>2024-02-11 08:00:45</text>
|
||||
</view>
|
||||
<view class="device_row">
|
||||
<text class="name font_bold">今日停机</text>
|
||||
<text>5次</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list: [{
|
||||
id: 1,
|
||||
name: '多片锯'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: '立式带锯'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: '视觉'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: '卧锯'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
name: '多片锯'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
name: '卧锯测试A'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
name: '卧锯B'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
name: '卧锯测试3'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
name: '卧锯4'
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
name: '卧锯5'
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
name: '卧锯6'
|
||||
},
|
||||
],
|
||||
// Tab切换内容
|
||||
swiperDateList: [
|
||||
{
|
||||
id: 1,
|
||||
content: '1'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
content: '2'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
content: '3'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
content: '4'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
content: '5'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
content: '6'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
content: '7'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
content: '8'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
content: '9'
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
content: '10'
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
content: '11'
|
||||
},
|
||||
],
|
||||
contentScrollW: 0, // 导航区宽度
|
||||
curIndex: 0, // 当前选中
|
||||
scrollLeft: 0, // 横向滚动条位置
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// 获取标题区域宽度,和每个子元素节点的宽度
|
||||
this.getScrollW()
|
||||
},
|
||||
methods: {
|
||||
// 获取标题区域宽度,和每个子元素节点的宽度以及元素距离左边栏的距离
|
||||
getScrollW() {
|
||||
let query = uni.createSelectorQuery().in(this);
|
||||
query.select('.scroll-view').boundingClientRect(data => {
|
||||
// 拿到 scroll-view 组件宽度
|
||||
this.contentScrollW = data.width
|
||||
}).exec();
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
query.selectAll('.scroll-item').boundingClientRect(data => {
|
||||
let dataLen = data.length;
|
||||
for (let i = 0; i < dataLen; i++) {
|
||||
// scroll-view 子元素组件距离左边栏的距离
|
||||
this.list[i].left = data[i].left;
|
||||
// scroll-view 子元素组件宽度
|
||||
this.list[i].width = data[i].width
|
||||
}
|
||||
}).exec()
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
// 选择标题
|
||||
changeMenu(index) {
|
||||
this.curIndex = index;
|
||||
// console.log(index,111)
|
||||
// 效果一(当前点击子元素靠左展示) 局限性:子元素宽度相同
|
||||
// this.scrollLeft = index * this.list[index].width
|
||||
|
||||
// 效果一(当前点击子元素靠左展示) 子元素宽度不相同也可实现
|
||||
// this.scrollLeft = 0;
|
||||
// for (let i = 0; i < index; i++) {
|
||||
// this.scrollLeft += this.list[i].width
|
||||
// };
|
||||
|
||||
|
||||
// 效果二(当前点击子元素靠左留一展示) 局限性:子元素宽度相同
|
||||
// this.scrollLeft = (index - 1) * this.list[index].width
|
||||
|
||||
// 效果二(当前点击子元素靠左留一展示) 子元素宽度不相同也可实现
|
||||
this.scrollLeft = 0;
|
||||
for (let i = 0; i < index - 1; i++) {
|
||||
this.scrollLeft += this.list[i].width
|
||||
};
|
||||
|
||||
|
||||
// 效果三(当前点击子元素居中展示) 不受子元素宽度影响
|
||||
// this.scrollLeft = this.list[index].left - this.contentScrollW / 2 + this.list[index].width / 2;
|
||||
},
|
||||
//
|
||||
swiperChange(e) {
|
||||
// console.log(22,e)
|
||||
let index = e.detail.current
|
||||
this.changeMenu(index)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
<style lang="scss">
|
||||
|
||||
.body-view{
|
||||
height: 450px;
|
||||
.content-top{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.content-left{flex-basis: 30px;text-align: center;
|
||||
.more_icon{display: inline-block;transform: scaleX(-1);}
|
||||
}
|
||||
.content-scroll{flex: 1;overflow: auto;}
|
||||
.center-cut-menu {width: 100%;height: 100rpx;box-sizing: border-box;
|
||||
.scroll-view {height: 100rpx;white-space: nowrap;
|
||||
.scroll-item {height: 100rpx;padding: 0 20rpx;display: inline-block;text-align: center;
|
||||
.item-text {font-size: 14px;line-height: 100rpx;
|
||||
&.active {
|
||||
// color: #1468FF;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.content-right{flex-basis: 30px;text-align: center;}
|
||||
}
|
||||
.swiper-box-list{height: 400px;padding:0 12px;
|
||||
.device_row{padding: 6px 0;display: flex;
|
||||
.name{width: 82px;}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
<template>
|
||||
<view class="pagepaddings">
|
||||
<view class="contentboxsty page_content ">
|
||||
|
||||
<view class="content_row">
|
||||
<view class="name">设备</view>
|
||||
<view class="data">{{form.name}}</view>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<view class="name">设备名称</view>
|
||||
<view class="data">双头立锯</view>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<view class="name">设备功率</view>
|
||||
<view class="data">双头立锯</view>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<view class="name">设备IP</view>
|
||||
<view class="data">双头立锯</view>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<view class="name">端口</view>
|
||||
<view class="data">双头立锯</view>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<view class="name">状态</view>
|
||||
<view class="data">{{form.active_status==true?'启用':'禁用'}}</view>
|
||||
</view>
|
||||
<view class="textarea_row">
|
||||
<view class="name font13">设置备注</view>
|
||||
<view class="">
|
||||
{{form.remark}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form:{}
|
||||
}
|
||||
},
|
||||
onLoad(options){
|
||||
this.getDetail(options.id);
|
||||
},
|
||||
methods: {
|
||||
getDetail(id){
|
||||
this.$api.postFuncLoading('/device.info',{id:id}).then(res=>{
|
||||
console.log(res)
|
||||
this.form = res.data
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.content_row{display: flex;height: 44px;align-items: center;
|
||||
.name{width: 30%;font-size: 13px;}
|
||||
.data{font-size: 14px;}
|
||||
}
|
||||
.textarea_row{
|
||||
.name{padding: 12px 0;}
|
||||
// textarea{border-radius: 4px;background: rgba(255, 255, 255, 0.50);width: 100%;}
|
||||
}
|
||||
</style>
|
|
@ -3,9 +3,9 @@
|
|||
<navigation-bar title="添加设备" color="white"></navigation-bar>
|
||||
</page-meta>
|
||||
<view class="pagepaddings">
|
||||
<view class="page_name font14">
|
||||
<!-- <view class="page_name font14">
|
||||
添加/编辑设备
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="page_content contentboxsty font13">
|
||||
<view class="content_row">
|
||||
<view class="name">选择设备</view>
|
||||
|
@ -47,22 +47,29 @@
|
|||
<view class="content_row">
|
||||
<view class="name">状态</view>
|
||||
<view class="flex_layout">
|
||||
<!-- <image src="/static/enable.png" mode=""></image><text class="text">启用</text>
|
||||
<image src="/static/disable.png" mode=""></image><text class="text">禁用</text> -->
|
||||
<view class="t-icon t-icon-qiyong1 contenticon"></view><text class="text">启用</text>
|
||||
<view class="t-icon t-icon-jinyong2 contenticon"></view><text class="text">禁用</text>
|
||||
<!-- <label class="radio"><radio value="r1" checked="true" />启用</label>
|
||||
<label class="radio"><radio value="r2" />禁用</label> -->
|
||||
<view class="switch" @click="switchSta(1)">
|
||||
<view v-if="selectSta==1" class="t-icon t-icon-qiyong1 contenticon"></view>
|
||||
<view v-else class="t-icon t-icon-jinyong2 contenticon"></view>
|
||||
<text class="text">启用</text>
|
||||
</view>
|
||||
<view class="switch" @click="switchSta(2)">
|
||||
<view v-if="selectSta==2" class="t-icon t-icon-qiyong1 contenticon"></view>
|
||||
<view v-else class="t-icon t-icon-jinyong2 contenticon"></view>
|
||||
<text class="text">禁用</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="textarea_row">
|
||||
<view class="name">设置备注</view>
|
||||
<view class="textarea">
|
||||
|
||||
<textarea />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom_but flex_layout">
|
||||
<view class="font13">保存</view>
|
||||
<view class="font13 but_color">保存</view>
|
||||
<view class="font13">取消</view>
|
||||
</view>
|
||||
</view>
|
||||
|
@ -73,10 +80,14 @@
|
|||
data() {
|
||||
return {
|
||||
array: ['中国', '美国', '巴西', '日本'],
|
||||
selectSta:1,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
switchSta(type){
|
||||
console.log(type)
|
||||
this.selectSta = type;
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -86,13 +97,15 @@
|
|||
.page_content{padding: 0 12px 10px;}
|
||||
.content_row{display: flex;border-bottom: 1px solid #2D3A6F;height: 44px;align-items: center;
|
||||
.name{width: 30%;}
|
||||
.flex_layout{
|
||||
.switch{display: flex;align-items: center;
|
||||
.contenticon{width: 20px;height: 20px;}
|
||||
.text{padding: 0 20px 0 5px;}
|
||||
}
|
||||
}
|
||||
.textarea_row{
|
||||
.name{padding: 12px 0;}
|
||||
textarea{border-radius: 4px;background: rgba(255, 255, 255, 0.50);width: 100%;}
|
||||
.textarea{border-radius: 4px;background: rgba(255, 255, 255, 0.50);padding:5px 10px;
|
||||
textarea{width: 100%;}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<!-- 设备管理 -->
|
||||
<view class="pagepaddings bot_padding">
|
||||
<view class="" v-for="(item,index) in list" :key="index" >
|
||||
<view class="page_list contentboxsty font13">
|
||||
<view class="page_list contentboxsty font13" @click="toDeviceDetail(item.id)">
|
||||
<view class="list_row">
|
||||
<view class="row_name">
|
||||
设备名称
|
||||
|
@ -10,7 +10,7 @@
|
|||
<view class="row_data">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<view class="iconfont icon-bianji font20"></view>
|
||||
<view class="iconfont icon-bianji font20" @click="toAddDevice()"></view>
|
||||
</view>
|
||||
<view class="list_row">
|
||||
设备IP/端口
|
||||
|
@ -43,19 +43,26 @@
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
list:[{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
{name:"双头立锯"},
|
||||
]
|
||||
list:[]
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList(){
|
||||
// this.$api.postFuncLoading('/equipment.mag',{}).then(res=>{
|
||||
// console.log(res)
|
||||
// this.list = res.data.rows;
|
||||
// })
|
||||
},
|
||||
//详情
|
||||
toDeviceDetail(id){
|
||||
console.log(id)
|
||||
uni.navigateTo({
|
||||
url:'/pages/equipmentManage/deviceDetail?id='+id
|
||||
})
|
||||
},
|
||||
toAddDevice(){
|
||||
uni.navigateTo({
|
||||
url:'/pages/equipmentManage/editDevice'
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
<view class="container home">
|
||||
<view class="home_head">
|
||||
<view class="iconfont icon-chaojiguanliyuan accounticon"></view>
|
||||
<view class="name" @click="toLogin()">未登录</view>
|
||||
<!-- <view class="name">Ykxiao 超级管理员</view> -->
|
||||
<view class="name" v-if="userName==''" @click="toLogin()">未登录</view>
|
||||
<view class="name" v-else>{{userName}} </view>
|
||||
<view class="iconfont icon-xiaoxitongzhi notifyicon" @click="toMessage()"></view>
|
||||
<view class="iconfont icon-shezhi setupicon"></view>
|
||||
</view>
|
||||
|
@ -199,7 +199,7 @@
|
|||
<view class="content_data">
|
||||
<view class="content_module" @click="toEquipmentManage()">
|
||||
<view class="t-icon t-icon-shebeiguanli contenticon"></view>
|
||||
<view class="contentname">设备设置</view>
|
||||
<view class="contentname">设备管理</view>
|
||||
</view>
|
||||
<view class="content_module" @click="toDeviceStatus()">
|
||||
<view class="t-icon t-icon-shebeizhuangtai contenticon"></view>
|
||||
|
@ -225,9 +225,21 @@
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
userName: '',
|
||||
}
|
||||
},
|
||||
// onLoad() {
|
||||
// this.userName = uni.getStorageSync('demu_mes_user_name')
|
||||
// },
|
||||
onShow(){
|
||||
this.userName = uni.getStorageSync('demu_mes_user_name')
|
||||
},
|
||||
// created() {
|
||||
// },
|
||||
mounted() {
|
||||
this.userName = uni.getStorageSync('demu_mes_user_name')
|
||||
|
||||
},
|
||||
methods: {
|
||||
//
|
||||
toLogin(){
|
||||
|
@ -283,7 +295,7 @@
|
|||
|
||||
<style lang="scss">
|
||||
|
||||
.home {height: 100vh;padding: 0 10px;font-size: 14px;
|
||||
.home {padding: 0 10px;font-size: 14px;
|
||||
.home_head{height: 40px;display: flex;position: relative;align-items: center;padding-bottom: 5px;
|
||||
.name{flex:1;}
|
||||
.accounticon{
|
||||
|
@ -323,6 +335,7 @@
|
|||
.energy_number{color: #FA3758;}
|
||||
}
|
||||
.content_data{
|
||||
// view{display: inline-block;width: 25%;}
|
||||
padding: 10px 0;display: flex;position: relative;align-items: center;text-align: center;height: 98px;
|
||||
.content_module{
|
||||
width: 25%;margin: 10px 1%;height: 98px;display: flex;align-items: center;justify-content: center;flex-direction: column;background-color: #009688;border-radius: 8px;
|
||||
|
|
|
@ -7,35 +7,44 @@
|
|||
工单号:{{item.name}}
|
||||
</view>
|
||||
<view class="top_right">
|
||||
工单详情
|
||||
工单详情 <text class="iconfont icon-gengduo"></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list_content">
|
||||
<view class="list_content font13">
|
||||
<view class="list_centre">
|
||||
<view class="centre_left">
|
||||
加工规格:{{item.specs}}
|
||||
<view class="list_row">
|
||||
<view class="centre_left">
|
||||
<text>加工规格</text>
|
||||
<text>{{item.specs}}</text>
|
||||
</view>
|
||||
<view class="centre_right">
|
||||
生产中
|
||||
</view>
|
||||
</view>
|
||||
<view class="centre_right">
|
||||
生产中
|
||||
<view class="list_row">
|
||||
<view class="centre_left">
|
||||
<text>算法出材率</text>
|
||||
<text>{{item.algorithm}}%</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list_below">
|
||||
<view class="below_left">
|
||||
<view class="">
|
||||
算法出材率
|
||||
出材率
|
||||
</view>
|
||||
<view class="percentage font24">
|
||||
{{item.algorithm}}%
|
||||
</view>
|
||||
</view>
|
||||
<view class="below_left">
|
||||
<!-- <view class="below_left">
|
||||
<view class="">
|
||||
算法出材率
|
||||
</view>
|
||||
<view class="percentage font24">
|
||||
{{item.reality}}%
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
@ -96,8 +105,13 @@
|
|||
// .list_top{display: flex;padding: 12px 0;border-bottom: 1px solid #2D3A6F;margin-bottom: 8px;
|
||||
// .top_left{flex: 1;}
|
||||
// }
|
||||
.list_centre{display: flex;
|
||||
.centre_left{flex: 1;}
|
||||
.list_centre{
|
||||
.list_row{display: flex;padding-bottom: 12px;
|
||||
.centre_left{flex: 1;display: flex;
|
||||
text:first-child{width:80px;}
|
||||
}
|
||||
.centre_right{background: rgba(230,162,60,0.2);border-radius: 4px 4px 4px 4px;height: 20px;padding: 0 6px;color: #E6A23C;}
|
||||
}
|
||||
}
|
||||
.list_below{display: flex;text-align: center;padding: 20px 0;
|
||||
view{flex: 1;}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
</view>
|
||||
<view class="con_but">
|
||||
<view class="but_rat"><view class="t-icon t-icon-shenpizhida icon22"></view>审批</view>
|
||||
<view class="but_del"><view class="t-icon t-icon-shezhi icon22 paddrigth5"></view>删除</view>
|
||||
<view class="but_del"><view class="t-icon t-icon-shezhi icon22 padd_rigth5"></view>删除</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<!-- 工单进度管理 -->
|
||||
<view class="pagepaddings">
|
||||
<view class="detail_list contentboxsty">
|
||||
<view class="detail_list contentboxsty font13">
|
||||
<view class="list_top">
|
||||
<view class="top_left">
|
||||
工单号:
|
||||
|
@ -14,7 +14,7 @@
|
|||
<view class="list_row">
|
||||
<view class="row_left">
|
||||
<view class="">开始时间:</view>
|
||||
<view class=""></view>
|
||||
<view class="">24-01-12 08:00</view>
|
||||
</view>
|
||||
<view class="row_right">
|
||||
生产中
|
||||
|
@ -22,13 +22,13 @@
|
|||
</view>
|
||||
<view class="list_row padd_top12">
|
||||
<view class="">计划完成:</view>
|
||||
<view class=""></view>
|
||||
<view class="">24-01-12 08:00</view>
|
||||
</view>
|
||||
<view class="padd_top12">
|
||||
<progressBar :total="100" :val="20" title="" />
|
||||
</view>
|
||||
</view>
|
||||
<annularProgressBar :progress_txt="20" :width="84" :height="69" title="出材率"/>
|
||||
<!-- <annularProgressBar :progress_txt="20" :width="84" :height="69" title="出材率"/> -->
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
@ -55,7 +55,9 @@
|
|||
<style lang="scss">
|
||||
.detail_list{
|
||||
.list_content{
|
||||
.list_row{display: flex;}
|
||||
.list_row{display: flex;
|
||||
.row_left{display: flex;}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<template>
|
||||
<view class="login_page ">
|
||||
<view class="iconfont icon-shouye" @click="toIndex()" style="height: 25px;position: absolute;top: 60px;width: 30px;"></view>
|
||||
<view class="login_top">
|
||||
<view class="login_logo">
|
||||
<image src="https://dm-auto.oss-cn-shanghai.aliyuncs.com/mes_wechat/meslogo.png" class="logopng"></image>
|
||||
|
@ -20,10 +21,10 @@
|
|||
</view>
|
||||
<view class="font12 text_color_black" v-if="tab==1">
|
||||
<view class="login_input">
|
||||
<input placeholder="请输入账号" />
|
||||
<input placeholder="请输入账号" v-model="accountValue"/>
|
||||
</view>
|
||||
<view class="login_input">
|
||||
<input password type="text" placeholder="请输入密码" />
|
||||
<input password type="text" v-model="passValue" placeholder="请输入密码" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="font12 text_color_black" v-if="tab==2">
|
||||
|
@ -38,12 +39,19 @@
|
|||
<view class="" v-if="tab==1" style="color: #C4C4C4;font-size: 11px; padding-top: 14px;">
|
||||
记住密码
|
||||
</view>
|
||||
<view class="loginbut">
|
||||
<view class="loginbut" @click="login()">
|
||||
登录
|
||||
</view>
|
||||
<view class="" style="color: #009688;text-align: center;font-size: 13px;">
|
||||
手机号一键登录
|
||||
</view>
|
||||
<button class="persontc " type="default" open-type="getPhoneNumber" @getphonenumber="getPhone">
|
||||
<view class="" style="color: #009688;text-align: center;font-size: 13px;">
|
||||
手机号快捷登录
|
||||
</view>
|
||||
</button>
|
||||
<!-- <button class="persontc" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
|
||||
<view class="" style="color: #009688;text-align: center;font-size: 13px;">
|
||||
手机号快捷登录
|
||||
</view>
|
||||
</button> -->
|
||||
</view>
|
||||
<view class="login_below">
|
||||
<view class="">
|
||||
|
@ -62,6 +70,8 @@
|
|||
return {
|
||||
codename:'获取验证码',
|
||||
tab:1,
|
||||
accountValue:'long',
|
||||
passValue:'123456',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
@ -69,6 +79,24 @@
|
|||
changeTab(tab){
|
||||
this.$set(this,"tab",tab);
|
||||
},
|
||||
toIndex(){
|
||||
uni.navigateBack({
|
||||
delta: 2
|
||||
});
|
||||
},
|
||||
login(){
|
||||
this.$api.postFuncLoading('/user.login',{login_name:this.accountValue,password:this.passValue}).then(res=>{
|
||||
console.log(res)
|
||||
let obj = new Object();
|
||||
obj.mes_user_name=res.data.user.name;
|
||||
obj.mes_token=res.data.token;
|
||||
this.$wf.setLoginData(obj)
|
||||
|
||||
uni.switchTab({
|
||||
url:'/pages/index/index'
|
||||
})
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -87,10 +115,43 @@
|
|||
.demupng{width: 60px;height: 36px;}
|
||||
.login_centre{border-radius: 16px;background: #FFF;padding: 20px 24px 40px;}
|
||||
.login_switch{display: flex;}
|
||||
.login_name{flex: 1;text-align: center;}
|
||||
.login_name{flex: 1;text-align: center;
|
||||
padding-bottom: 5px;
|
||||
/* border-bottom: 1px solid #000; */
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.login_name:focus {
|
||||
outline: none; /* 去除默认的外边框效果 */
|
||||
border-width: 3px; /* 当元素被点击或者获得焦点时,将边框宽度修改为3像素 */
|
||||
}
|
||||
.font_bold{
|
||||
position: relative;
|
||||
}
|
||||
.font_bold::after{
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: calc(50% - 15px);
|
||||
bottom: -4px;
|
||||
z-index: 10;
|
||||
width: 30px;
|
||||
border-bottom: 3px solid #009688 ;
|
||||
}
|
||||
.login_input{border-radius: 21.5px;background: #F3F5F9;margin-top: 12px;padding: 5px 15px;}
|
||||
.getCaptcha{border-radius: 21.5px;background: #009688;height: auto;color: white;display: flex;align-items: center;width: 40%;justify-content: center;}
|
||||
.flex_layout{display: flex;margin-top: 12px;}
|
||||
.login_code{margin-top: unset;width:60%;margin-right: 12px;}
|
||||
.loginbut{background: #009688;text-align: center;margin-top: 60px;margin-bottom: 18px;padding: 9px;border-radius: 66rpx;}
|
||||
.persontc{
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
outline: none;
|
||||
border-radius: 0;
|
||||
background: none!important;
|
||||
line-height: normal;
|
||||
}
|
||||
.persontc::after {
|
||||
border: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -35,7 +35,9 @@
|
|||
<view class="person_dataC contentboxsty">
|
||||
<view class="content_box">
|
||||
<view class="data_name">设备故障通知</view>
|
||||
<view class=""></view>
|
||||
<view class="">
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="content_box">
|
||||
<view class="data_name">出材率预警通知</view>
|
||||
|
@ -75,9 +77,9 @@
|
|||
},
|
||||
//跳转更改手机号页面
|
||||
toChangPhone(){
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/person/changePhone'
|
||||
// })
|
||||
uni.navigateTo({
|
||||
url: '/pages/person/changePhone'
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -101,4 +103,6 @@
|
|||
}
|
||||
.data_name{flex: 1;}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
<template>
|
||||
<!-- 设备报警 -->
|
||||
<view class="pagepaddings">
|
||||
<view class="content_layout" @click="cancelLongpress">
|
||||
<view class="item_layout" v-for="(item, index) in list" :key="index">
|
||||
<view :class="islongpress?'longpress_style':''" @longpress="longpress" @click="deleteAlarm">
|
||||
<image :src="item.url" class="img_style" mode=""></image>
|
||||
</view>
|
||||
<view class="font13 flex_layout">
|
||||
<text class="flex1">{{item.name}}</text>
|
||||
<text>{{item.time}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
islongpress:false,
|
||||
list:[
|
||||
{name:'周边侵入警报',time:'2023-09-01',url:'../../static/logo.png'},
|
||||
{name:'周边侵入警报',time:'2023-09-01',url:'../../static/logo.png'},
|
||||
{name:'周边侵入警报',time:'2023-09-01',url:'../../static/logo.png'},
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
longpress(){
|
||||
console.log('长按事件')
|
||||
this.islongpress = true
|
||||
},
|
||||
//取消
|
||||
cancelLongpress(){
|
||||
this.islongpress = false
|
||||
},
|
||||
//删除警告
|
||||
deleteAlarm(){
|
||||
if(this.islongpress){
|
||||
console.log('删除')
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* .content_layout{display: flex;flex-flow: wrap;}
|
||||
.item_layout{width: 50%;} */
|
||||
.content_layout{
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;/* 每一列占一行的一半 */
|
||||
grid-gap: 10px; /* 可选的间距 */
|
||||
}
|
||||
.img_style{height: 110px;width: 100%;}
|
||||
.longpress_style{background-color: #000;
|
||||
opacity: 0.2;}
|
||||
</style>
|
|
@ -1,6 +1,14 @@
|
|||
<template>
|
||||
<view>
|
||||
|
||||
<view class="pagepaddings font13">
|
||||
<view class="phone_page contentboxsty">
|
||||
<view class="content_row">
|
||||
<input placeholder="请输入要更换的手机号码" />
|
||||
</view>
|
||||
<view class="content_row noborbot">
|
||||
<input placeholder="请输入短信验证码" />
|
||||
<view class="theme_color">获取验证码</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
@ -18,5 +26,7 @@
|
|||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
.phone_page{padding: 0 12px;}
|
||||
.content_row{display: flex;height: 49px;align-items: center;border-bottom: 1px solid #2D3A6F;}
|
||||
.content_row input{flex: 1;}
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,464 @@
|
|||
<template>
|
||||
<view v-if="step==1">
|
||||
<view class="scan_box">
|
||||
<image class="avatar_frame" src="http://dm-auto.oss-cn-shanghai.aliyuncs.com/mes_wechat/morentouxiang.png" mode=""></image>
|
||||
<image class="scan_img" src="http://dm-auto.oss-cn-shanghai.aliyuncs.com/mes_wechat/saomiao.png"></image>
|
||||
|
||||
</view>
|
||||
<view class="start_view" @click="startAttestation(2)">
|
||||
<view class="start_but">
|
||||
开始认证
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="page-content" v-else-if="step==2">
|
||||
<view class="containerV">
|
||||
<view class="headerV">
|
||||
<view class="top-tips1 font15">
|
||||
<view>请把脸移入圈内保持不动</view>
|
||||
</view>
|
||||
<!-- <view class="top-tips2">
|
||||
为了便于识别认证,请拍摄本人头像
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="contentV">
|
||||
<view class="mark"></view>
|
||||
<image v-if="tempImg" mode="widthFix" :src="tempImg" />
|
||||
<camera v-if='isAuthCamera' :device-position="devicePosition ?'front': 'back'" class="camera"
|
||||
flash="off" resolution='high' />
|
||||
<view v-show="!tempImg && tipsText" class="tipV">{{ tipsText }}</view>
|
||||
</view>
|
||||
<view class="footerV">
|
||||
<view style="width: 100%;">
|
||||
<view v-if="!tempImg" style="width: 100%;">
|
||||
<!-- <view class="privacyV">
|
||||
<view class="icon"></view>
|
||||
<view class="text">
|
||||
照片隐私<text @click="handleJumpSecurityClick">安全保障</text>中…
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-tips-2">该照片仅作为你认证的凭证</view> -->
|
||||
<view class="take-photo-bgV">
|
||||
<!-- 图片上传 -->
|
||||
<!-- <view v-show="true" class="btn-change-upload" @click="handleChooseImage" ></view> -->
|
||||
<!--拍照-->
|
||||
<view class="btn-take-photo" @click="handleTakePhotoClick" ></view>
|
||||
<!-- 切换镜头 -->
|
||||
<view class="btn-change-camera" @click="handleChangeCameraClick" ></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="confirmV" v-else>
|
||||
<view class="btn-cancel" @click="handleCancelClick">
|
||||
取消
|
||||
</view>
|
||||
<view class="btn-ok" @click="handleOkClick">
|
||||
确定
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'index',
|
||||
components: {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
step:1,
|
||||
tipsText: '', // 错误文案提示
|
||||
tempImg: '', // 本地图片路径
|
||||
// BASE_API,
|
||||
cameraEngine: null, // 相机引擎
|
||||
devicePosition: false, // 摄像头朝向
|
||||
isAuthCamera: true, // 是否拥有相机权限
|
||||
}
|
||||
},
|
||||
|
||||
onLoad(options) {
|
||||
this.initData()
|
||||
},
|
||||
mounted(){
|
||||
},
|
||||
methods: {
|
||||
//
|
||||
startAttestation(type){
|
||||
this.step=type;
|
||||
},
|
||||
// 初始化相机引擎
|
||||
initData() {
|
||||
this.handleChangeCameraClick();
|
||||
// console.log(1111)
|
||||
// const session = wx.createVKSession({
|
||||
// track: {
|
||||
// face: { mode: 1 } // mode: 1 - 使用摄像头;2 - 手动传入图像
|
||||
// },
|
||||
// })
|
||||
// console.log(222)
|
||||
// // 摄像头实时检测模式下,监测到人脸时,updateAnchors 事件会连续触发 (每帧触发一次)
|
||||
// session.on('updateAnchors', anchors => {
|
||||
// anchors.forEach(anchor => {
|
||||
// console.log('anchor.points', anchor.points)
|
||||
// console.log('anchor.origin', anchor.origin)
|
||||
// console.log('anchor.size', anchor.size)
|
||||
// console.log('anchor.angle', anchor.angle)
|
||||
// })
|
||||
// })
|
||||
// console.log(333)
|
||||
// // 当人脸从相机中离开时,会触发 removeAnchors 事件
|
||||
// session.on('removeAnchors', () => {
|
||||
// console.log('removeAnchors')
|
||||
// })
|
||||
|
||||
// // 需要调用一次 start 以启动
|
||||
// session.start(errno => {
|
||||
// if (errno) {
|
||||
// // 如果失败,将返回 errno
|
||||
// } else {
|
||||
// // 否则,返回null,表示成功
|
||||
// }
|
||||
// })
|
||||
// console.log(444)
|
||||
|
||||
|
||||
this.cameraEngine = wx.createCameraContext()
|
||||
const listener = this.cameraEngine.onCameraFrame((frame) => {
|
||||
if (this.tempImg) {
|
||||
return;
|
||||
}
|
||||
wx.createVKSession({
|
||||
track: {
|
||||
plane: {mode: 3},
|
||||
},
|
||||
version: 'v2',
|
||||
// gl, // WebGLRenderingContext
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
// // #ifdef MP-WEIXIN
|
||||
// // 1、初始化人脸识别
|
||||
// wx.initFaceDetect()
|
||||
// // 2、创建 camera 上下文 CameraContext 对象
|
||||
// this.cameraEngine = wx.createCameraContext()
|
||||
// // 3、获取 Camera 实时帧数据
|
||||
// const listener = this.cameraEngine.onCameraFrame((frame) => {
|
||||
// if (this.tempImg) {
|
||||
// return;
|
||||
// }
|
||||
// // 4、人脸识别,使用前需要通过 wx.initFaceDetect 进行一次初始化,推荐使用相机接口返回的帧数据
|
||||
// wx.faceDetect({
|
||||
// frameBuffer: frame.data,
|
||||
// width: frame.width,
|
||||
// height: frame.height,
|
||||
// enablePoint: true,
|
||||
// enableConf: true,
|
||||
// enableAngle: true,
|
||||
// enableMultiFace: true,
|
||||
// success: (faceData) => {
|
||||
// let face = faceData.faceInfo[0]
|
||||
// if (faceData.x == -1 || faceData.y == -1) {
|
||||
// this.tipsText = '检测不到人'
|
||||
// }
|
||||
// if (faceData.faceInfo.length > 1) {
|
||||
// this.tipsText = '请保证只有一个人'
|
||||
// } else {
|
||||
// const {
|
||||
// pitch,
|
||||
// roll,
|
||||
// yaw
|
||||
// } = face.angleArray;
|
||||
// const standard = 0.5
|
||||
// if (Math.abs(pitch) >= standard || Math.abs(roll) >= standard ||
|
||||
// Math.abs(yaw) >= standard) {
|
||||
// this.tipsText = '请平视摄像头'
|
||||
// } else if (face.confArray.global <= 0.8 || face.confArray.leftEye <=
|
||||
// 0.8 || face.confArray.mouth <= 0.8 || face.confArray.nose <= 0.8 ||
|
||||
// face.confArray.rightEye <= 0.8) {
|
||||
// this.tipsText = '请勿遮挡五官'
|
||||
// } else {
|
||||
// this.tipsText = '请拍照'
|
||||
// // 这里可以写自己的逻辑了
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// fail: (err) => {
|
||||
// if (err.x == -1 || err.y == -1) {
|
||||
// this.tipsText = '检测不到人'
|
||||
// } else {
|
||||
// this.tipsText = err.errMsg || '网络错误,请退出页面重试'
|
||||
// }
|
||||
// },
|
||||
// })
|
||||
// })
|
||||
// 5、开始监听帧数据
|
||||
// listener.start()
|
||||
// #endif
|
||||
},
|
||||
// 切换设备镜头
|
||||
handleChangeCameraClick() {
|
||||
this.devicePosition = !this.devicePosition;
|
||||
},
|
||||
// 图片上传
|
||||
handleChooseImage() {
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sizeType: ['original', 'compressed'],
|
||||
sourceType: ['album','camera'],
|
||||
success: (res) => {
|
||||
console.log(res,'打印res,哈哈哈哈哈')
|
||||
if (res.errMsg === 'chooseImage:ok') {
|
||||
uni.showLoading({
|
||||
title: '照片上传中...'
|
||||
})
|
||||
const tempFilePaths = res.tempFilePaths[0]
|
||||
this.upLoad(res.tempFilePaths);
|
||||
}
|
||||
},
|
||||
fail: (res) => {
|
||||
},
|
||||
});
|
||||
},
|
||||
// 拍照点击
|
||||
handleTakePhotoClick() {
|
||||
if (this.tipsText != "" && this.tipsText != "请拍照") {
|
||||
return;
|
||||
}
|
||||
uni.getSetting({
|
||||
success: (res) => {
|
||||
if (!res.authSetting['scope.camera']) {
|
||||
this.isAuthCamera = false
|
||||
uni.openSetting({
|
||||
success: (res) => {
|
||||
if (res.authSetting['scope.camera']) {
|
||||
this.isAuthCamera = true;
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
this.cameraEngine.takePhoto({
|
||||
quality: "high",
|
||||
success: ({
|
||||
tempImagePath
|
||||
}) => {
|
||||
this.tempImg = tempImagePath
|
||||
}
|
||||
})
|
||||
console.log(this.tempImg,2121)
|
||||
},
|
||||
// 点击确定上传
|
||||
handleOkClick() {
|
||||
// 这里的 this.tempImg 是经过人脸检测后 拍照拿到的路径
|
||||
this.upLoadOne(this.tempImg)
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
},
|
||||
upLoad(tempFilePaths) {
|
||||
// # 注意 这里上传图片拿到的tempFilePaths是一个数组啊
|
||||
// 图片上传
|
||||
uni.showLoading({
|
||||
title: "上传中,请稍后...",
|
||||
});
|
||||
let proAll = [];
|
||||
tempFilePaths.forEach((item) => {
|
||||
console.log(item,'打印item')
|
||||
proAll.push(this.upLoadOne(item));
|
||||
});
|
||||
Promise.all(proAll).then((res) => {
|
||||
// 上传完成
|
||||
uni.hideLoading();
|
||||
});
|
||||
},
|
||||
upLoadOne(imgPath) {
|
||||
// 然后这里imgPath 传过来的是 要上传的临时本地图片的路径
|
||||
// 具体上传方法根据自己的请求方式 请求自己的接口
|
||||
},
|
||||
// 点击 - 取消上传
|
||||
handleCancelClick() {
|
||||
this.tempImg = ''
|
||||
},
|
||||
// 点击 - 人脸安全保障按钮
|
||||
handleJumpSecurityClick() {
|
||||
uni.showToast({
|
||||
icon: "none",
|
||||
title: "假装跳转人脸安全保障",
|
||||
duration: 2000,
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.scan_box{width: 200px;height: 200px;margin: 70px auto;border: 3px solid #009688;border-radius: 50%;background-color: #EEEEEE;
|
||||
display: flex;justify-content: center;
|
||||
}
|
||||
.avatar_frame{width: 100%;height: 100%;}
|
||||
.scan_img{height: 98px;padding-top: 14px; position: absolute;width: 200px;}
|
||||
.start_view{display: flex;justify-content: center;padding-top: 20px;}
|
||||
.start_but{width: 116px;height: 34px;border-radius: 29px;background: #009688;align-items: center;justify-content: center;display: flex;}
|
||||
|
||||
.page-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.containerV {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.headerV {
|
||||
.top-tips1 {
|
||||
margin-top: 60rpx;
|
||||
color: #FFFFFF;
|
||||
font-size: 36rpx;
|
||||
text-align: center;
|
||||
}
|
||||
.top-tips2 {
|
||||
margin-top: 20rpx;
|
||||
color: #00AAFF;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.contentV {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 400rpx;
|
||||
margin-top: 30rpx;
|
||||
.tipV {
|
||||
bottom: 30rpx;
|
||||
position: absolute;
|
||||
line-height: 90rpx;
|
||||
padding-left: 24rpx;
|
||||
padding-right: 24rpx;
|
||||
max-width: calc(100vw - 50rpx * 2);
|
||||
text-align: center;
|
||||
font-size: 30rpx;
|
||||
background: #000000;
|
||||
opacity: 0.75;
|
||||
color: #FFFFFF;
|
||||
border-radius: 16rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
z-index: 5;
|
||||
}
|
||||
.camera {
|
||||
width: 400upx;
|
||||
height: 400upx;
|
||||
border-radius: 50%;
|
||||
border: 3px solid #009688;
|
||||
}
|
||||
.mark {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: 2;
|
||||
width: 750rpx;
|
||||
height: 100%;
|
||||
// background:deeppink;
|
||||
background-size: 750rpx 661rpx;
|
||||
}
|
||||
image {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 3;
|
||||
}
|
||||
}
|
||||
|
||||
.footerV {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.privacyV {
|
||||
padding-top: 30rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.text {
|
||||
font-size: 30rpx;
|
||||
color: #1C1C1C;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
margin-left: 15rpx;
|
||||
text {
|
||||
font-size: 30rpx;
|
||||
color: #00AAFF;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
}
|
||||
}
|
||||
.icon {
|
||||
width: 40rpx;
|
||||
height: 47rpx;
|
||||
background:green;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
}
|
||||
|
||||
.bottom-tips-2 {
|
||||
margin-top: 20rpx;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.take-photo-bgV {
|
||||
width: 100%;
|
||||
margin-top: 300rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.btn-take-photo {
|
||||
margin: 0rpx 80rpx 0rpx 80rpx;
|
||||
width: 196rpx;
|
||||
height: 196rpx;
|
||||
background: yellow;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
.btn-change-upload {
|
||||
left: 130rpx;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
background: blue;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
.btn-change-camera {
|
||||
right: 130rpx;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
background:red;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
}
|
||||
.confirmV {
|
||||
margin: 200rpx 100rpx 0rpx 100rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.btn-cancel {
|
||||
font-size: 32rpx;
|
||||
color: #1C1C1C;
|
||||
}
|
||||
.btn-ok {
|
||||
font-size: 32rpx;
|
||||
color: #00AAFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,158 @@
|
|||
<template>
|
||||
<view class="pagepaddings">
|
||||
<!-- <checkbox-group @change="checkboxChange">
|
||||
<label class="uni-list-cell uni-list-cell-pd" v-for="item in items" :key="item.value">
|
||||
<view>
|
||||
<checkbox :value="item.value" :checked="item.checked" />
|
||||
</view>
|
||||
<view>{{item.name}}</view>
|
||||
</label>
|
||||
</checkbox-group> -->
|
||||
<view class="contentboxsty" v-for="(item, index) in list" :key="index.id">
|
||||
<view class="list_name">
|
||||
<checkbox-group @change="changeCheckbox">
|
||||
<checkbox value="cb" class="checkbox-backgroun-yellow" :value="item.id" :checked="item.checked" style="transform:scale(0.7)" />
|
||||
</checkbox-group>
|
||||
<!-- <checkbox-group @change="selectPath(e,item)">
|
||||
<checkbox value="cb" class="checkbox-backgroun-yellow" :value="item.id" :checked="item.checked" style="transform:scale(0.7)" />
|
||||
</checkbox-group> -->
|
||||
<!-- <text class="t-icon t-icon-xuanzhong padd_rigth12" @click="selectPath($event.target,item)"></text> -->
|
||||
{{item.name}}{{item.checked}}
|
||||
</view>
|
||||
<view class="list_content" v-for="(i, ind) in item.child" :key="ind">
|
||||
<view class="content_name">
|
||||
<checkbox-group @change="selectPath(e,i)">
|
||||
<checkbox value="cb" class="checkbox-backgroun-yellow" :value="i.id" :checked="i.checked" style="transform:scale(0.7)" />
|
||||
</checkbox-group>
|
||||
<!-- <text class="t-icon t-icon-xuanzhong padd_rigth5"></text> -->
|
||||
<text class="">{{i.name}}</text>
|
||||
</view>
|
||||
<view class="content_item">
|
||||
<view class="content_data" v-for="(btn, inx) in i.child" :key="inx">
|
||||
<checkbox-group @change="selectPath(e,i)">
|
||||
<checkbox value="cb" class="checkbox-backgroun-yellow" :value="btn.id" :checked="btn.checked" style="transform:scale(0.7)" />
|
||||
</checkbox-group>
|
||||
<!-- <text class="t-icon t-icon-xuanzhong padd_rigth5"></text> -->
|
||||
<text class="">{{btn.name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
items: [{
|
||||
value: 'USA',
|
||||
name: '美国'
|
||||
},
|
||||
{
|
||||
value: 'CHN',
|
||||
name: '中国',
|
||||
checked: 'true'
|
||||
},
|
||||
{
|
||||
value: 'BRA',
|
||||
name: '巴西'
|
||||
},
|
||||
{
|
||||
value: 'JPN',
|
||||
name: '日本'
|
||||
},
|
||||
{
|
||||
value: 'ENG',
|
||||
name: '英国'
|
||||
},
|
||||
{
|
||||
value: 'FRA',
|
||||
name: '法国'
|
||||
}
|
||||
],
|
||||
list:[
|
||||
{name:'首页',checked:true,id:1,child:[{
|
||||
id: 2,
|
||||
name:'控制台',
|
||||
checked:true,
|
||||
child:[
|
||||
{id:121,name:'设备信息',},
|
||||
{id:122,name:'生产加工信息',},
|
||||
{id:123,name:'生产加工信息',},
|
||||
{id:124,name:'账号信息',},
|
||||
{id:125,name:'通知设置',},
|
||||
{id:126,name:'升级角色'},],
|
||||
},
|
||||
],
|
||||
},
|
||||
// {name:'生产工单',id:11,child:[{
|
||||
// id: 3,
|
||||
// name:'待生产工单',
|
||||
// child:[{name:'添加工单'},
|
||||
// {name:'审核工单'},
|
||||
// {name:'删除工单'},
|
||||
// ],
|
||||
// },
|
||||
// {name:'已排产工单',
|
||||
// child:[],
|
||||
// },
|
||||
// ],
|
||||
// }
|
||||
],
|
||||
arr:[]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
checkboxChange: function (e) {
|
||||
var items = this.items,
|
||||
values = e.detail.value;
|
||||
for (var i = 0, lenI = items.length; i < lenI; ++i) {
|
||||
const item = items[i]
|
||||
if(values.includes(item.value)){
|
||||
this.$set(item,'checked',true)
|
||||
}else{
|
||||
this.$set(item,'checked',false)
|
||||
}
|
||||
}
|
||||
console.log(items)
|
||||
},
|
||||
changeCheckbox(e){
|
||||
console.log(e)
|
||||
// var items = this.list,
|
||||
// values = e.detail.value;
|
||||
// for (var i = 0, lenI = items.length; i < lenI; ++i) {
|
||||
// const item = items[i]
|
||||
// if(values.includes(item.value)){
|
||||
// this.$set(item,'checked',true)
|
||||
// }else{
|
||||
// this.$set(item,'checked',false)
|
||||
// }
|
||||
// }
|
||||
// console.log(items)
|
||||
},
|
||||
selectPath(e,item){
|
||||
console.log(e,item,222)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.contentboxsty{padding: 14px 12px;margin-bottom: 12px;}
|
||||
.list_name{display: flex;align-items: center;padding-bottom: 7px;border-bottom: 1px solid #2D3A6F;}
|
||||
.content_name{padding:8px 0 ;display: flex;align-items: center;}
|
||||
.content_item{display: flex;align-items: center;flex-wrap: wrap;}
|
||||
.content_data{padding: 4px 15px 4px 0;display: flex;align-items: center;}
|
||||
|
||||
/* 复选框-背景颜色 */
|
||||
checkbox.checkbox-backgroun-yellow[checked] .wx-checkbox-input,
|
||||
checkbox.checkbox-backgroun-yellow.checked .uni-checkbox-input{
|
||||
background-color: #009688 !important;
|
||||
border-color: #009688 !important;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
<view class="t-icon t-icon-shengchangongdan backlogicon"></view>
|
||||
<view class="backlogname">流程审批</view>
|
||||
</view>
|
||||
<view class="backlog_module">
|
||||
<view class="backlog_module" @click="toAlarm">
|
||||
<view class="t-icon t-icon-shengchangongdan backlogicon"></view>
|
||||
<view class="backlogname">设备报警</view>
|
||||
</view>
|
||||
|
@ -40,7 +40,7 @@
|
|||
<view class="t-icon t-icon-shengchangongdan backlogicon"></view>
|
||||
<view class="backlogname">权限审批</view>
|
||||
</view>
|
||||
<view class="backlog_module">
|
||||
<view class="backlog_module" @click="toSafetyAccidents()">
|
||||
<view class="t-icon t-icon-shengchangongdan backlogicon"></view>
|
||||
<view class="backlogname">安全事故</view>
|
||||
</view>
|
||||
|
@ -51,7 +51,7 @@
|
|||
<view class="font14">账户中心</view>
|
||||
</view>
|
||||
<view class="con_data">
|
||||
<view class="con_module">
|
||||
<view class="con_module" @click="toMessage">
|
||||
<view class="t-icon t-icon-xiaoxitongzhi-gerenzhongxin personicon"></view>
|
||||
<view class="font13">消息管理</view>
|
||||
<view class=""></view>
|
||||
|
@ -61,11 +61,16 @@
|
|||
<view class="font13">审批直达</view>
|
||||
<view class=""></view>
|
||||
</view> -->
|
||||
<view class="con_module noborbot">
|
||||
<view class="con_module" @click="toMyAuthority()">
|
||||
<view class="t-icon t-icon-wodequanxian personicon"></view>
|
||||
<view class="font13">我的权限</view>
|
||||
<view class=""></view>
|
||||
</view>
|
||||
<view class="con_module noborbot" @click="toFaceAuthentication()">
|
||||
<view class="t-icon t-icon-renlianrenzheng personicon"></view>
|
||||
<view class="font13">人脸认证</view>
|
||||
<view class=""></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="con_set">
|
||||
<view class="t-icon t-icon-xitongshezhi-gerenzhongxin personicon"></view>
|
||||
|
@ -90,12 +95,40 @@
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
//跳转设备报警
|
||||
toAlarm(){
|
||||
uni.navigateTo({
|
||||
url:'/pages/person/alarm'
|
||||
})
|
||||
},
|
||||
toSafetyAccidents(){
|
||||
uni.navigateTo({
|
||||
url:'/pages/person/safetyAccidents'
|
||||
})
|
||||
},
|
||||
//跳转账户中心页
|
||||
toAccountCenter(){
|
||||
uni.navigateTo({
|
||||
url: '/pages/person/accountCenter'
|
||||
})
|
||||
},
|
||||
//跳转人脸认证页
|
||||
toFaceAuthentication(){
|
||||
uni.navigateTo({
|
||||
url:'/pages/person/faceAuthentication'
|
||||
})
|
||||
},
|
||||
toMyAuthority(){
|
||||
uni.navigateTo({
|
||||
url:'/pages/person/myAuthority'
|
||||
})
|
||||
},
|
||||
//跳转消息页
|
||||
toMessage(){
|
||||
uni.navigateTo({
|
||||
url: '/pages/index/message'
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<template>
|
||||
<!-- 安全事故 -->
|
||||
<view class="pagepaddings">
|
||||
<view class="contentboxsty font13" v-for="(item, index) in list" :key="index">
|
||||
<view class="name font_bold font14">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<view class="img_style">
|
||||
<image :src="item.url"></image>
|
||||
</view>
|
||||
<view class="flex_layout padd_bot6">
|
||||
<view class="flex1">员工安全行为</view>
|
||||
<view class="">2023-09-01</view>
|
||||
</view>
|
||||
<view class="">
|
||||
事件描述事件描述事件描述事件描述事件描述事件描述
|
||||
事件描述事件描述事件描述事件描述事件描述事件描述
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
list:[
|
||||
{name:'设备一',url:'../../static/logo.png'},
|
||||
{name:'设备一',url:'../../static/logo.png'},
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.contentboxsty{padding: 14px 12px;margin-bottom: 12px;}
|
||||
.img_style{padding: 12px 0 14px 0;}
|
||||
|
||||
</style>
|
|
@ -1,6 +1,58 @@
|
|||
<template>
|
||||
<view>
|
||||
<view class="pagepaddings">
|
||||
<view class="detail_list contentboxsty ">
|
||||
<view class="list_top">
|
||||
<view class="top_left">
|
||||
工单号 <text class="padd_left12">{{form.order_sn}}</text>
|
||||
</view>
|
||||
<view class="top_right font13">
|
||||
{{form.review_status_label}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="list_content">
|
||||
<view class="content_left font13">
|
||||
<view class="content_row">
|
||||
<text class="name">生产开始时间</text>
|
||||
<text class="data">{{form.created_at}}</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">生产结束时间</text>
|
||||
<text class="data">{{form.updated_at}}</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">工单耗时</text>
|
||||
<text class="data">10h</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">加工规格</text>
|
||||
<text class="data">{{form.order_spec}}</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">规格料</text>
|
||||
<text class="data">13.01m³</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">生产负责</text>
|
||||
<text class="data">张三</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">加工等级</text>
|
||||
<text class="data">全齐边</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">辅料</text>
|
||||
<text class="data">0.61m³</text>
|
||||
</view>
|
||||
<view class="content_row">
|
||||
<text class="name">电话</text>
|
||||
<text class="data">13712279001</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="content_right">
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
@ -8,15 +60,34 @@
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
form:{}
|
||||
}
|
||||
},
|
||||
onLoad(option){
|
||||
console.log(option)
|
||||
this.detailData(option.id)
|
||||
},
|
||||
onShow(){
|
||||
// this.detailData()
|
||||
},
|
||||
methods: {
|
||||
|
||||
detailData(id){
|
||||
this.$api.postFuncLoading('/order.info',{id:id}).then(res=>{
|
||||
console.log(res.data)
|
||||
this.form = res.data
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
<style lang="scss">
|
||||
.list_top{
|
||||
.top_right{background: #243168;border-radius: 4px 4px 4px 4px;width: 46px;height: 20px;text-align: center;}
|
||||
}
|
||||
.list_content{
|
||||
.content_row{display: flex;padding:6px 0;
|
||||
.name{width: 90px;}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,60 +1,61 @@
|
|||
<template>
|
||||
<!-- 生产工单 -->
|
||||
<view class="pagepaddings">
|
||||
<view v-for="(item,index) in list" :key="index" class="page_list contentboxsty font13">
|
||||
<view @click="toDetail()">
|
||||
<view v-for="(item,index) in list" :key="index" class="detail_list contentboxsty font13">
|
||||
<view @click="toDetail(item.id)">
|
||||
<view class="list_top">
|
||||
<view class="top_left">
|
||||
工单号:{{item.name}}
|
||||
工单号:{{item.order_sn}}
|
||||
</view>
|
||||
<view class="top_right">
|
||||
工单详情
|
||||
</view>
|
||||
<view class="iconfont icon-gengduo-1"></view>
|
||||
</view>
|
||||
<view class="list_centre">
|
||||
<view class="centre_left">
|
||||
<view class="">
|
||||
算法出材率
|
||||
</view>
|
||||
<view class="percentage font24">
|
||||
{{item.algorithm}}%
|
||||
</view>
|
||||
</view>
|
||||
<view class="centre_left">
|
||||
<view class="">
|
||||
算法出材率
|
||||
</view>
|
||||
<view class="percentage font24">
|
||||
{{item.reality}}%
|
||||
</view>
|
||||
工单详情 <text class="iconfont icon-gengduo"></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list_below">
|
||||
<view class="row">
|
||||
<view class="row_left">
|
||||
<text>状态:</text>
|
||||
<text>{{item.state}}</text>
|
||||
<view class="list_content font13">
|
||||
<view class="list_centre">
|
||||
<view class="centre_left">
|
||||
<view class="">
|
||||
算法出材率
|
||||
</view>
|
||||
<view class="percentage font24">
|
||||
{{item.algorithm}}%
|
||||
</view>
|
||||
</view>
|
||||
<view class="row_right">
|
||||
<text>加工规格:</text>
|
||||
<text>{{item.specs}}</text>
|
||||
<view class="centre_left">
|
||||
<view class="">
|
||||
实际出材率
|
||||
</view>
|
||||
<view class="percentage font24">
|
||||
{{item.reality}}%
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="row_left">
|
||||
<text>生产开始:</text>
|
||||
<text>{{item.time}}</text>
|
||||
<view class="list_below">
|
||||
<view class="row">
|
||||
<view class="row_left">
|
||||
<text>状态:</text>
|
||||
<text>{{item.review_status_label}}</text>
|
||||
</view>
|
||||
<view class="row_right">
|
||||
<text>加工规格:</text>
|
||||
<text>{{item.order_spec}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row_right">
|
||||
<text>工单耗时:</text>
|
||||
<text>{{item.timeConsuming}}</text>
|
||||
<view class="row">
|
||||
<view class="row_left">
|
||||
<text>生产开始:</text>
|
||||
<text>{{item.plan_date}}</text>
|
||||
</view>
|
||||
<view class="row_right">
|
||||
<text>工单耗时:</text>
|
||||
<text>{{item.timeConsuming}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="row_left">
|
||||
<text>工单数量:</text>
|
||||
<text>{{item.number}}</text>
|
||||
<view class="row">
|
||||
<view class="row_left">
|
||||
<text>工单数量:</text>
|
||||
<text>{{item.order_number}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
@ -67,50 +68,25 @@
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
list:[{
|
||||
name:'SO202401111004',
|
||||
algorithm:'81.5',
|
||||
reality:'81.4',
|
||||
state:'生产中',
|
||||
specs:'4*9*3.66',
|
||||
time:'jan-11 10:05',
|
||||
timeConsuming:'3.5H',
|
||||
number:'12.66m³'
|
||||
},{
|
||||
name:'SO202401111004',
|
||||
algorithm:'81.5',
|
||||
reality:'81.4',
|
||||
state:'生产中',
|
||||
specs:'4*9*3.66',
|
||||
time:'jan-11 10:05',
|
||||
timeConsuming:'3.5H',
|
||||
number:'12.66m³'
|
||||
},{
|
||||
name:'SO202401111004',
|
||||
algorithm:'81.5',
|
||||
reality:'81.4',
|
||||
state:'生产中',
|
||||
specs:'4*9*3.66',
|
||||
time:'jan-11 10:05',
|
||||
timeConsuming:'3.5H',
|
||||
number:'12.66m³'
|
||||
},{
|
||||
name:'SO202401111004',
|
||||
algorithm:'81.5',
|
||||
reality:'81.4',
|
||||
state:'生产中',
|
||||
specs:'4*9*3.66',
|
||||
time:'jan-11 10:05',
|
||||
timeConsuming:'3.5H',
|
||||
number:'12.66m³'
|
||||
}]
|
||||
list:[]
|
||||
}
|
||||
},
|
||||
onShow(){
|
||||
this.listData();
|
||||
},
|
||||
methods: {
|
||||
listData(){
|
||||
this.$api.postFuncLoading('/order.list',{page: 1,pageSize: 15}).then(res=>{
|
||||
this.list = res.data.rows
|
||||
|
||||
|
||||
})
|
||||
},
|
||||
//跳转工单详情
|
||||
toDetail(){
|
||||
toDetail(id){
|
||||
console.log(id)
|
||||
uni.navigateTo({
|
||||
url:'/pages/production/productionDetail'
|
||||
url:'/pages/production/productionDetail?id='+id
|
||||
})
|
||||
},
|
||||
}
|
||||
|
@ -118,10 +94,7 @@
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.page_list{
|
||||
.list_top{display: flex;padding: 12px 0;border-bottom: 1px solid #2D3A6F;margin-bottom: 8px;
|
||||
.top_left{flex: 1;}
|
||||
}
|
||||
.detail_list{
|
||||
.list_centre{display: flex;text-align: center;padding-bottom: 10px;
|
||||
view{flex: 1;}
|
||||
.percentage{color: #00B68D;}
|
||||
|
@ -131,5 +104,6 @@
|
|||
view{flex: 1;}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,8 +1,8 @@
|
|||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 4403683 */
|
||||
src: url('//at.alicdn.com/t/c/font_4403683_gbygrrqjx2.woff2?t=1706861428966') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_4403683_gbygrrqjx2.woff?t=1706861428966') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_4403683_gbygrrqjx2.ttf?t=1706861428966') format('truetype');
|
||||
src: url('//at.alicdn.com/t/c/font_4403683_5b5i159cydc.woff2?t=1709604278213') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_4403683_5b5i159cydc.woff?t=1709604278213') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_4403683_5b5i159cydc.ttf?t=1709604278213') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
|
@ -13,6 +13,38 @@
|
|||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-paizhao:before {
|
||||
content: "\e633";
|
||||
}
|
||||
|
||||
.icon-qiehuanjingtou:before {
|
||||
content: "\e634";
|
||||
}
|
||||
|
||||
.icon-renlianrenzheng:before {
|
||||
content: "\e632";
|
||||
}
|
||||
|
||||
.icon-xuanzhong:before {
|
||||
content: "\e631";
|
||||
}
|
||||
|
||||
.icon-renzhengshibai:before {
|
||||
content: "\e62f";
|
||||
}
|
||||
|
||||
.icon-renzhengchenggong:before {
|
||||
content: "\e630";
|
||||
}
|
||||
|
||||
.icon-shenpi:before {
|
||||
content: "\e62d";
|
||||
}
|
||||
|
||||
.icon-a-shanchu21:before {
|
||||
content: "\e62e";
|
||||
}
|
||||
|
||||
.icon-weixiubaoyangpinshuai:before {
|
||||
content: "\e62a";
|
||||
}
|
||||
|
|
|
@ -0,0 +1,128 @@
|
|||
import config from './envConfig.js';
|
||||
import wf from './public.js'
|
||||
|
||||
const request = (url = '', data = {}, header = { //这里这样封装是为了后续具体组件中使用时可以直接传参,需按此顺序传参;而不需要写url:xxx等键值对传参
|
||||
//具体的header和后端商同后再编写,这里以常见的token为例
|
||||
'Authorization': 'Bearer '+uni.getStorageSync('mes_token') ? 'Bearer '+uni.getStorageSync('mes_token') : '',
|
||||
}) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
// console.log(config,800)
|
||||
uni.request({
|
||||
url: config.dev.VITE_BASE_API + url, //接口地址:前缀+方法中传入的地址
|
||||
method: "POST", //请求方法
|
||||
dataType: "json",
|
||||
data: data, //传递参数
|
||||
header: header, //自定义头部,和后端商同后编写
|
||||
success: (res) => {
|
||||
// console.log('request.js文件的通用接口请求封装返回的结果数据',res);
|
||||
//注:因为这里对请求成功的没有统一设置抛错提示,所以后续具体组件中使用接口请求的res除200(实际以后端同事定好的为准)成功外的其他code需要额外写抛错提示
|
||||
if (res.data.code == 'xxx') { //自定请求失败的情况,这里以常见的token失效或过期为例
|
||||
uni.removeStorageSync('token');
|
||||
uni.showModal({
|
||||
showCancel: false,
|
||||
title: '温馨提示',
|
||||
content: res.data.msg,
|
||||
// header: {
|
||||
// "Token": 'Bearer ' + uni.getStorageSync("mes_token")
|
||||
// },
|
||||
success: function(result) {
|
||||
if (result.confirm) {
|
||||
// uni.reLaunch({
|
||||
// url: '/pages/login/index' //这里需用绝对路径才可
|
||||
// });
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if(res.header.Authorization){
|
||||
uni.removeStorageSync('mes_token');
|
||||
let obj = new Object();
|
||||
let str =String(res.header.Authorization)
|
||||
let newStr = str.slice(0, 0) + str.slice(7)
|
||||
obj.mes_token=newStr;
|
||||
uni.setStorageSync("mes_token",obj.mes_token);
|
||||
}
|
||||
|
||||
resolve(res.data) //成功
|
||||
},
|
||||
// 这里的接口请求,如果出现问题就输出接口请求失败的msg;
|
||||
//注:因为这里对于请求失败的设置统一抛错提示了,所以后续具体组件中使用接口请求的catch中不需要再写抛错提示
|
||||
fail: (err) => {
|
||||
uni.showToast({
|
||||
title: "" + err.msg,
|
||||
icon: 'none'
|
||||
});
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
const postFuncLoading = (url = '', data = {}, header = { //这里这样封装是为了后续具体组件中使用时可以直接传参,需按此顺序传参;而不需要写url:xxx等键值对传参
|
||||
//具体的header和后端商同后再编写,这里以常见的token为例
|
||||
'Authorization': 'Bearer '+uni.getStorageSync('mes_token') ? 'Bearer '+uni.getStorageSync('mes_token') : '',
|
||||
}) => {
|
||||
uni.showLoading({
|
||||
title: '加载中',
|
||||
mask: true
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
// console.log(config,800)
|
||||
uni.request({
|
||||
url: config.dev.VITE_BASE_API + url, //接口地址:前缀+方法中传入的地址
|
||||
method: "POST", //请求方法
|
||||
dataType: "json",
|
||||
data: data, //传递参数
|
||||
header: header, //自定义头部,和后端商同后编写
|
||||
success: (res) => {
|
||||
setTimeout(function () {
|
||||
uni.hideLoading();
|
||||
}, 200);
|
||||
// console.log('request.js文件的通用接口请求封装返回的结果数据',res);
|
||||
//注:因为这里对请求成功的没有统一设置抛错提示,所以后续具体组件中使用接口请求的res除200(实际以后端同事定好的为准)成功外的其他code需要额外写抛错提示
|
||||
if (res.data.code == 'xxx') { //自定请求失败的情况,这里以常见的token失效或过期为例
|
||||
uni.removeStorageSync('token');
|
||||
uni.showModal({
|
||||
showCancel: false,
|
||||
title: '温馨提示',
|
||||
content: res.data.msg,
|
||||
// header: {
|
||||
// "Token": 'Bearer ' + uni.getStorageSync("mes_token")
|
||||
// },
|
||||
success: function(result) {
|
||||
if (result.confirm) {
|
||||
// uni.reLaunch({
|
||||
// url: '/pages/login/index' //这里需用绝对路径才可
|
||||
// });
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if(res.header.Authorization){
|
||||
uni.removeStorageSync('mes_token');
|
||||
let obj = new Object();
|
||||
let str =String(res.header.Authorization)
|
||||
let newStr = str.slice(0, 0) + str.slice(7)
|
||||
obj.mes_token=newStr;
|
||||
uni.setStorageSync("mes_token",obj.mes_token);
|
||||
}
|
||||
|
||||
resolve(res.data) //成功
|
||||
},
|
||||
// 这里的接口请求,如果出现问题就输出接口请求失败的msg;
|
||||
//注:因为这里对于请求失败的设置统一抛错提示了,所以后续具体组件中使用接口请求的catch中不需要再写抛错提示
|
||||
fail: (err) => {
|
||||
uni.showToast({
|
||||
title: "" + err.msg,
|
||||
icon: 'none'
|
||||
});
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
export default {
|
||||
request,
|
||||
postFuncLoading
|
||||
|
||||
};
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// 导出的环境请求地址
|
||||
//本地环境
|
||||
const dev = {
|
||||
ENV: "dev",
|
||||
VITE_BASE_API: "https://api.dev.dwoodauto.com/mobile/v1",
|
||||
};
|
||||
//正式环境
|
||||
const pro = {
|
||||
ENV: "pro",
|
||||
VITE_BASE_API: "https://api.dev.dwoodauto.com",
|
||||
};
|
||||
// //测试环境
|
||||
// const test = {
|
||||
// ENV: "test",
|
||||
// VITE_BASE_API: "https://api.dev.dwoodauto.com",
|
||||
// };
|
||||
export default {
|
||||
dev,
|
||||
// test,
|
||||
pro,
|
||||
};
|
|
@ -0,0 +1,9 @@
|
|||
//登录存储信息
|
||||
const setLoginData=function(obj){
|
||||
uni.setStorageSync("demu_mes_user_name",obj.mes_user_name);
|
||||
uni.setStorageSync("mes_token",obj.mes_token);
|
||||
}
|
||||
|
||||
export default {
|
||||
setLoginData
|
||||
};
|
|
@ -0,0 +1,21 @@
|
|||
import { defineConfig } from "vite";
|
||||
import uni from "@dcloudio/vite-plugin-uni";
|
||||
import ENV_CONFIG from "./utils/envConfig.js";
|
||||
import { resolve } from "path"; // 导入 path 模块,帮助我们解析路径
|
||||
export default defineConfig(() => {
|
||||
return {
|
||||
server: {
|
||||
port: "3002",
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": resolve(__dirname, "/src"),
|
||||
},
|
||||
},
|
||||
plugins: [uni()],
|
||||
define: {
|
||||
"process.env.config": ENV_CONFIG, //配置一
|
||||
'process.env': process.env, //配置二
|
||||
},
|
||||
};
|
||||
});
|
Loading…
Reference in New Issue