Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop

This commit is contained in:
shilixia 2022-02-25 15:31:27 +08:00
commit 8a83e868b7
11 changed files with 176 additions and 57 deletions

View File

@ -130,9 +130,15 @@
let imgData = {base64:img};
faceLogin(imgData).then((res) => {
if (res.code >= 200) {
let item= {name:res.data.username,token:res.data.access};
that.$emit('func',item);
that.$message.success("身份认证成功!");
if(res.data.access){
let item= {name:res.data.username,token:res.data.access};
that.$emit('func',item);
that.$message.success("身份认证成功!");
this.closeCamera();
}else{
that.uploadLock = false;
that.$message.error("身份认证失败,请重新进行人脸识别!");
}
}else{
// 打开锁
that.uploadLock = false;
@ -141,21 +147,40 @@
}).catch(()=>{
// 打开锁
that.uploadLock = false;
// this.$message.error('面部识别失败请重新验证');
});
},
closeCamera () {
debugger;
let video = document.getElementById('video');
let stream = video.srcObject;
console.log(stream);
let tracks = stream.getTracks();
tracks.forEach(track => {
track.stop()
});
video.srcObject = null;
this.video.srcObject.getTracks()[0].stop();
},
},
beforeDestroy() {
let video = document.getElementById('video');
let stream = video.srcObject;
console.log(stream);
let tracks = stream.getTracks();
tracks.forEach(track => {
track.stop()
});
video.srcObject = null;
this.video.srcObject.getTracks()[0].stop();
}
}
</script>
<style scoped>
.faceLoginWrap{
padding: 50px;
width: 600px;
height: 600px;
background: #000000;
/*padding: 50px;*/
/*width: 600px;*/
/*height: 600px;*/
/*background: #000000;*/
margin:50px auto 0 auto;
box-sizing: border-box;
}
@ -169,7 +194,7 @@
position: relative;
width: 500px;
height: 500px;
background: #000000;
/*background: #000000;*/
text-align: center;
}

View File

@ -144,12 +144,12 @@
</script>
<style scoped>
.faceLoginWrap{
padding: 50px;
width: 600px;
height: 600px;
background: #000000;
/*padding: 50px;*/
/*width: 600px;*/
/*height: 600px;*/
/*background: #000000;*/
margin:50px auto 0 auto;
box-sizing: border-box;
/*box-sizing: border-box;*/
}
#screenshotCanvas {
@ -157,6 +157,8 @@
}
.video-box {
width: 500px;
height: 500px;
margin: auto;
position: relative;
}

View File

@ -2,11 +2,11 @@
<div class="sidebar-logo-container" :class="{'collapse':collapse}">
<transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo">
<h1 v-else class="sidebar-title">{{ title }} </h1>
<!--<img v-if="logo" :src="logo" class="sidebar-logo">-->
<h1 class="sidebar-title">{{ title }} </h1>
</router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo">
<!--<img v-if="logo" :src="logo" class="sidebar-logo">-->
<h1 class="sidebar-title">{{ title }} </h1>
</router-link>
</transition>

View File

@ -9,14 +9,14 @@
</div>
<app-main />
<div class="floatDiv" @click="gotoTicketPage" v-if="count.total_count>0">
<!--<div class="floatDiv" @click="gotoTicketPage" v-if="count.total_count>0">
<el-badge :value="count.total_count" class="item ">
<el-icon class="el-icon-s-management" style="font-size: 30px;color: #409EFF;padding-top: 12px;"></el-icon>
</el-badge>
<div class="typeWrap">
<div class="detailItem" v-for="item in count.details" :key="item.workflow">{{item.workflow__name}}{{item.count}}</div>
</div>
</div>
</div>-->
</div>
</div>
</template>

View File

@ -49,7 +49,7 @@
</el-table-column>
<el-table-column label="完工时间" prop="end_date">
</el-table-column>
<el-table-column label="检验状态">
<el-table-column label="首件确认状态">
<template slot-scope="scope">
<span v-if="scope.row.leader_1!==null&&scope.row.leader_2!==null&&scope.row.leader_3!==null">已完成</span>
<span v-else>未完成</span>
@ -189,6 +189,13 @@
<img style="width: 45%;vertical-align: text-top;" :src="'http://47.95.0.242:2222'+item.field_value"/>
</div>
</el-col>
<el-col :span="12" v-if="achieve">
<div class="items">
<span class="itemLabel">检验结果</span>
<span v-if="is_testok">检验合格</span>
<span v-else>检验不合格</span>
</div>
</el-col>
</el-row>
<el-row class="reviewWrap" v-if="!achieve">
<div class="reviewBlock">
@ -228,6 +235,7 @@
export default {
name: "firstCheck",
inject:['reload'],
components: {Pagination,faceLogin,customForm},
data() {
return {
@ -263,6 +271,7 @@
reviewVisible:false,
recordVisible:false,
is_midtesting:false,
is_testok:false,
formName:'首件确认检查表',
update_time:'',
first_sign_time:'',
@ -332,6 +341,7 @@
that.first_sign_time = scope.row.first_sign_time?scope.row.first_sign_time:'';
getTestRecordItem(scope.row.first_test).then((res) => {
that.formName = res.data.form_.name;
that.is_testok = res.data.is_testok;
that.update_time = res.data.update_time;
let fieldList = res.data.record_data;
that.fieldList = [...fieldList];
@ -394,6 +404,29 @@
/*关闭相机*/
closeCamera () {
this.$refs.faceTracking.closeCamera();
let video = document.getElementById('video');
let stream = video.srcObject;
console.log(stream);
let tracks = stream.getTracks();
tracks.forEach(track => {
track.stop()
});
video.srcObject = null;
/*let firstTestIndex = sessionStorage.getItem('firstTestIndex');
let firstTestProcess = sessionStorage.getItem('firstTestProcess');
if(firstTestIndex){
sessionStorage.removeItem('firstTestIndex');
sessionStorage.setItem('firstTestIndex',this.activeIndex);
}else{
sessionStorage.setItem('firstTestIndex',this.activeIndex);
}
if(firstTestProcess){
sessionStorage.removeItem('firstTestProcess');
sessionStorage.setItem('firstTestProcess',this.listQuery.process);
}else{
sessionStorage.setItem('firstTestProcess',this.listQuery.process);
}
this.reload();*/
// this.thisVideo.srcObject.getTracks()[0].stop();
},
//保存首件检查
@ -482,28 +515,63 @@
//获取人脸数据
getMsgFormSon(data){
let that =this;
if(that.leader==='leader_1'){
that.leader_1=data.name;
}else if(that.leader==='leader_2'){
that.leader_2=data.name;
}else if(that.leader==='leader_3'){
that.leader_3=data.name;
}
firstAudit(that.planId,{leader:that.leader ,token : data.token}).then(res=>{
if(res.code===200){
this.limitedPhoto = false;
if(that.leader_1!==null&&that.leader_2!==null&&that.leader_3!==null){
this.reviewVisible = false;
}
that.getTableData();
if(data.token!==''&&data.token!==null&&data.token!==undefined){
if(that.leader==='leader_1'){
that.leader_1=data.name;
}else if(that.leader==='leader_2'){
that.leader_2=data.name;
}else if(that.leader==='leader_3'){
that.leader_3=data.name;
}
})
firstAudit(that.planId,{leader:that.leader ,token : data.token}).then(res=>{
this.limitedPhoto = false;
if(res.code===200){
this.limitedPhoto = false;
if(that.leader_1!==null&&that.leader_2!==null&&that.leader_3!==null){
this.reviewVisible = false;
}
/* let firstTestIndex = sessionStorage.getItem('firstTestIndex');
let firstTestProcess = sessionStorage.getItem('firstTestProcess');
if(firstTestIndex){
sessionStorage.removeItem('firstTestIndex');
sessionStorage.setItem('firstTestIndex',this.activeIndex);
}else{
sessionStorage.setItem('firstTestIndex',this.activeIndex);
}
if(firstTestProcess){
sessionStorage.removeItem('firstTestProcess');
sessionStorage.setItem('firstTestProcess',this.listQuery.process);
}else{
sessionStorage.setItem('firstTestProcess',this.listQuery.process);
}*/
that.getTableData();
// that.reload();
}
})
}
},
},
mounted() {
debugger;
this.getProcessList();
}
/*let that = this;
let activeIndex = sessionStorage.getItem('firstTestIndex');
let firstTestProcess = sessionStorage.getItem('firstTestProcess');
if(activeIndex&&firstTestProcess){
this.activeIndex = parseInt(activeIndex);
this.listQuery.process = parseInt(firstTestProcess);
sessionStorage.removeItem('firstTestIndex');
sessionStorage.removeItem('firstTestProcess');
this.getTableData();
getProcessList({page: 0}).then((response) => {
if (response.data) {
that.processOption = response.data;
}
});
}else{
this.getProcessList();
}*/
},
}
</script>

View File

@ -0,0 +1,25 @@
from __future__ import absolute_import, unicode_literals
from rest_framework.response import Response
from celery import shared_task
@shared_task
def backup_database():
"""
备份数据库
"""
import os
ret = os.popen('sudo pg_dump -U postgres -d hberp -f /home/lighthouse/hberp_backup.sql')
return Response()
@shared_task
def reload_server():
import os # 更新后端
os.chdir('/home/lighthouse/hberp')
ret = os.popen('sudo git pull && sudo service supervisor reload')
return Response(ret.read())

View File

@ -2,7 +2,7 @@ from django.db.models import base
from rest_framework import urlpatterns
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.develop.views import CleanDataView, UpdateCuttingView, UpdateEquipState, UpdateFIFOItem, UpdateFIFONumber, UpdateLastTestResult, UpdateNeedToOrder, UpdateSpg
from apps.develop.views import BackupDatabase, CleanDataView, ReloadServer, UpdateCuttingView, UpdateEquipState, UpdateFIFOItem, UpdateFIFONumber, UpdateLastTestResult, UpdateNeedToOrder, UpdateSpg
urlpatterns = [
path('cleandata/', CleanDataView.as_view()),
@ -13,6 +13,8 @@ urlpatterns = [
path('update_spg/', UpdateSpg.as_view()),
path('update_equip_state/', UpdateEquipState.as_view()),
path('update_need_to_order/', UpdateNeedToOrder.as_view()),
path('update_fifo_number/', UpdateFIFONumber.as_view())
path('update_fifo_number/', UpdateFIFONumber.as_view()),
path('reload_server/', ReloadServer.as_view()),
path('backup_database/', BackupDatabase.as_view())
]

View File

@ -4,6 +4,7 @@ from rest_framework.decorators import permission_classes
from rest_framework.views import APIView
from rest_framework.permissions import IsAdminUser
from rest_framework.response import Response
from apps.develop.tasks import backup_database, reload_server
from apps.inm.models import FIFO, FIFOItem, Inventory, MaterialBatch
from apps.mtm.models import Material
from apps.pm.models import ProductionPlan, SubProductionPlan
@ -117,4 +118,15 @@ class UpdateFIFONumber(APIView):
else:
i.number = 'CK' + ranstr(7)
i.save()
return Response()
return Response()
class ReloadServer(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
reload_server()
class BackupDatabase(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
backup_database()

View File

@ -3,7 +3,7 @@ import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings_dev')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings_pro')
app = Celery('server')

View File

@ -1,15 +0,0 @@
from .settings import *
DEBUG = False
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'db',
'USER': 'postgres',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}
# celery配置
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

View File

@ -11,6 +11,6 @@ import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings_dev')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings_pro')
application = get_wsgi_application()