This commit is contained in:
shilixia 2021-09-13 09:48:18 +08:00
commit 1b6c7c5e07
10 changed files with 175 additions and 21 deletions

View File

@ -18,6 +18,7 @@
"dependencies": {
"@riophae/vue-treeselect": "^0.4.0",
"axios": "^0.21.1",
"compression-webpack-plugin": "^5.0.1",
"element-ui": "^2.15.5",
"file-saver": "^2.0.2",
"js-cookie": "^3.0.0",

View File

@ -130,6 +130,10 @@
label="操作"
>
<template slot-scope="scope">
<el-link
v-if="checkPermission(['material_update'])"
@click="handleLook(scope)"
>查看</el-link>
<el-link
v-if="checkPermission(['material_update'])"
@click="handleEdit(scope)"
@ -175,6 +179,71 @@
<el-button type="primary" @click="recordformconfirm('Forms')">确认</el-button>
</div>
</el-dialog>
<el-dialog
:model="tableForm"
:visible.sync="dialogVisibleForm"
:title="tableForm.name">
<el-form
label-width="80px"
label-position="right"
>
<el-row v-for="(item,$index) in fieldList.results" :key="$index">
<el-form-item v-if="item.field_type==='string'" :label="item.field_name" >
<el-input placeholder="请输入" v-model="item.sort"/>
</el-form-item>
<el-form-item v-else-if="item.field_type==='int'" :label="item.field_name">
<el-input type="number" placeholder="请输入" v-model="item.sort"/>
</el-form-item>
<el-form-item v-else-if="item.field_type==='float'" :label="item.field_name">
<el-input type="number" placeholder="请输入" v-model="item.sort"/>
</el-form-item>
<el-form-item v-else-if="item.field_type==='date'" :label="item.field_name">
<el-date-picker
v-model="item.create_time"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
style="width:100%"
>
</el-date-picker>
</el-form-item>
<el-form-item v-else-if="item.field_type==='datetime'" :label="item.field_name">
<el-date-picker
v-model="item.create_time"
type="datetime"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
style="width:100%"
>
</el-date-picker>
</el-form-item>
<el-form-item v-else-if="item.field_type==='select'" :label="item.field_name">
<el-select style="width: 100%" v-model="item.sort" placeholder="请选择">
<el-option
v-for="item1 in item.field_choice"
:key="item1"
:label="item1"
:value="item1">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-else-if="item.field_type==='selects'" :label="item.field_name">
<el-select style="width: 100%" v-model="optio" multiple placeholder="请选择">
<el-option
v-for="item1 in item.field_choice"
:key="item1"
:label="item1"
:value="item1">
</el-option>
</el-select>
</el-form-item>
</el-row>
</el-form>
<!--<div style="text-align: right">-->
<!--<el-button type="danger">取消</el-button>-->
<!--<el-button type="primary">确认</el-button>-->
<!--</div>-->
</el-dialog>
</el-card>
</el-col>
<el-col :span="18" >
@ -318,6 +387,7 @@
fileList:[],
listLoading: true,
dialogVisibles: false,
dialogVisibleForm: false,
dialogTypes: "new",
field: {
field_type:'',
@ -328,6 +398,7 @@
},
field_choice:[''],
options:[],
optio:[],
rule1: {
name: [{ required: true, message: "请输入", trigger: "blur" }],
number: [{ required: true, message: "请输入", trigger: "blur" }],
@ -337,6 +408,9 @@
dialogVisible:false,
dialogType1: "new",
dialogVisible1:false,
tableForm:{
name:'',
},
listQueryrecordform: {
page: 1,
page_size: 20,
@ -353,19 +427,24 @@
},
options_: {
'string':'文本',
'number':'数字',
'int':'整数',
'float':'小数',
'date': '日期',
'datetime': '日期时间',
'radio': '单选',
'checkbox': '多选',
'select': '单选',
'selects': '多选',
},
fieldtypeoptions: [{
value: 'string',
label: '文本'
},
{
value: 'number',
label: '数字'
value: 'int',
label: '整数'
},
{
value: 'float',
label: '小数'
},
{
value: 'date',
@ -380,11 +459,11 @@
label: '日期时间'
},
{
value: 'radio',
value: 'select',
label: '单选'
},
{
value: 'checkbox',
value: 'selects',
label: '多选'
}
],
@ -403,14 +482,22 @@
},
methods: {
//添加
//添加字段选项
addDomain() {
this.field_choice.push('')
},
//删除
//删除字段选项
removeDomain(index){
this.field_choice.splice(index, 1)
},
handleLook(scope){
debugger;
console.log(scope);
this.dialogVisibleForm = true;
this.tableForm = Object.assign({}, scope.row); // copy obj
this.formID=this.tableForm.id;
this.fieldLists();
},
checkPermission,
//子工序列表
getList() {
@ -547,6 +634,8 @@
getrffieldList(this.listQueryfield).then((response) => {
if (response.data) {
this.fieldList = response.data;
debugger;
console.log(this.fieldList)
}
});
@ -560,6 +649,8 @@
});
},
handlefieldCreate() {
this.field_choice = [''];
this.field = Object.assign({}, defaultfield);
this.dialogType1 = "new";
this.dialogVisible1 = true;

View File

@ -1,6 +1,7 @@
'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')
const CompressionWebpackPlugin = require('compression-webpack-plugin');
function resolve(dir) {
return path.join(__dirname, dir)
@ -38,7 +39,7 @@ module.exports = {
},
before: require('./mock/mock-server.js')
},
configureWebpack: {
/* configureWebpack: {
// provide the app's title in webpack's name field, so that
// it can be accessed in index.html to inject the correct title.
name: name,
@ -47,6 +48,17 @@ module.exports = {
'@': resolve('src')
}
}
},*/
configureWebpack:()=>{
if(process.env.NODE_ENV==='production'){
return{
plugins:[new CompressionWebpackPlugin({
test:/\.js$|\.html$|\.css/,//匹配文件名
threshold:10240,//对超过10k的数据进行压缩
deleteOriginalAssets: false,//是否删除源文件
})]
}
}
},
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test

View File

@ -11,4 +11,5 @@ celerybeat-schedule.bak
celerybeat-schedule.dat
celerybeat-schedule.dir
db.sqlite3
temp/
temp/
nohup.out

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.6 on 2021-09-10 05:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('mtm', '0010_auto_20210907_1111'),
]
operations = [
migrations.AlterField(
model_name='recordformfield',
name='field_type',
field=models.CharField(choices=[('string', '字符串'), ('int', '整型'), ('float', '浮点'), ('boolean', '布尔'), ('date', '日期'), ('time', '时间'), ('datetime', '日期时间'), ('radio', '单选'), ('checkbox', '多选'), ('select', '单选下拉'), ('selects', '多选下拉'), ('textarea', '文本域')], max_length=50, verbose_name='类型'),
),
]

View File

@ -98,6 +98,7 @@ class RecordFormField(CommonAModel):
('float', '浮点'),
('boolean', '布尔'),
('date', '日期'),
('time', '时间'),
('datetime', '日期时间'),
('radio', '单选'),
('checkbox', '多选'),

View File

@ -1,4 +1,3 @@
from apps.system.models import CommonAModel
from django.db import models
from django.contrib.auth.models import AbstractUser
@ -7,7 +6,6 @@ import django.utils.timezone as timezone
from django.db.models.query import QuerySet
from utils.model import SoftModel, BaseModel
from simple_history.models import HistoricalRecords
from apps.mtm.models import Material
@ -37,7 +35,6 @@ class Contract(CommonAModel):
number = models.CharField('合同编号', max_length=100, unique=True)
amount = models.IntegerField('合同金额', default=0)
customer = models.ForeignKey(Customer, verbose_name='关联客户', on_delete=models.CASCADE, related_name='contact_customer')
# contactuser = models.CharField('合同签订人', max_length=100, unique=True, blank=True, null=True)
sign_date = models.DateField('签订日期')
description = models.CharField('描述', max_length=200, blank=True, null=True)

View File

@ -1,7 +1,6 @@
from rest_framework import serializers
from .models import Contract, Customer
from .models import Contract, Customer, Order
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
@ -23,7 +22,25 @@ class ContractSerializer(serializers.ModelSerializer):
model = Contract
fields = '__all__'
class ContractSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Contract
fields = ['id', 'name', 'number']
class ContractCreateUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Contract
fields = ['name', 'number', 'amount', 'customer', 'sign_date', 'description']
fields = ['name', 'number', 'amount', 'customer', 'sign_date', 'description']
class OrderCreateUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ['number', 'customer', 'contract', 'product', 'count', 'delivery_date']
class OrderSerializer(serializers.ModelSerializer):
contract_ = ContractSimpleSerializer(source='contract', read_only=True)
customer_ = CustomerSimpleSerializer(source='customer', read_only=True)
class Meta:
model = Order
fields = '__all__'

View File

@ -1,5 +1,5 @@
from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer
from apps.sam.models import Contract, Customer
from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer
from apps.sam.models import Contract, Customer, Order
from rest_framework.viewsets import ModelViewSet
from apps.system.mixins import CreateUpdateCustomMixin
from django.shortcuts import render
@ -38,4 +38,21 @@ class ContractViewSet(CreateUpdateCustomMixin, ModelViewSet):
def get_serializer_class(self):
if self.action in ['create', 'update']:
return ContractCreateUpdateSerializer
return ContractSerializer
return ContractSerializer
class OrderViewSet(CreateUpdateCustomMixin, ModelViewSet):
"""
订单-增删改查
"""
perms_map = {'*': '*'}
queryset = Order.objects.select_related('contract', 'customer').all()
serializer_class = OrderSerializer
search_fields = ['number', 'product']
filterset_fields = []
ordering_fields = ['create_time']
ordering = ['-create_time']
def get_serializer_class(self):
if self.action in ['create', 'update']:
return OrderCreateUpdateSerializer
return OrderSerializer

View File

@ -380,7 +380,6 @@ class FaceLogin(CreateAPIView):
filepath = settings.BASE_DIR +'/temp/' + filename +'.png'
with open(filepath, 'wb') as f:
data = tran64(request.data.get('base64').replace(' ', '+'))
# data = request.data.get('base64')
f.write(base64.urlsafe_b64decode(data))
# picture_of_me = face_recognition.load_image_file(settings.BASE_DIR +'/temp/me.png')
# my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]