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": { "dependencies": {
"@riophae/vue-treeselect": "^0.4.0", "@riophae/vue-treeselect": "^0.4.0",
"axios": "^0.21.1", "axios": "^0.21.1",
"compression-webpack-plugin": "^5.0.1",
"element-ui": "^2.15.5", "element-ui": "^2.15.5",
"file-saver": "^2.0.2", "file-saver": "^2.0.2",
"js-cookie": "^3.0.0", "js-cookie": "^3.0.0",

View File

@ -130,6 +130,10 @@
label="操作" label="操作"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-link
v-if="checkPermission(['material_update'])"
@click="handleLook(scope)"
>查看</el-link>
<el-link <el-link
v-if="checkPermission(['material_update'])" v-if="checkPermission(['material_update'])"
@click="handleEdit(scope)" @click="handleEdit(scope)"
@ -175,6 +179,71 @@
<el-button type="primary" @click="recordformconfirm('Forms')">确认</el-button> <el-button type="primary" @click="recordformconfirm('Forms')">确认</el-button>
</div> </div>
</el-dialog> </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-card>
</el-col> </el-col>
<el-col :span="18" > <el-col :span="18" >
@ -318,6 +387,7 @@
fileList:[], fileList:[],
listLoading: true, listLoading: true,
dialogVisibles: false, dialogVisibles: false,
dialogVisibleForm: false,
dialogTypes: "new", dialogTypes: "new",
field: { field: {
field_type:'', field_type:'',
@ -328,6 +398,7 @@
}, },
field_choice:[''], field_choice:[''],
options:[], options:[],
optio:[],
rule1: { rule1: {
name: [{ required: true, message: "请输入", trigger: "blur" }], name: [{ required: true, message: "请输入", trigger: "blur" }],
number: [{ required: true, message: "请输入", trigger: "blur" }], number: [{ required: true, message: "请输入", trigger: "blur" }],
@ -337,6 +408,9 @@
dialogVisible:false, dialogVisible:false,
dialogType1: "new", dialogType1: "new",
dialogVisible1:false, dialogVisible1:false,
tableForm:{
name:'',
},
listQueryrecordform: { listQueryrecordform: {
page: 1, page: 1,
page_size: 20, page_size: 20,
@ -353,19 +427,24 @@
}, },
options_: { options_: {
'string':'文本', 'string':'文本',
'number':'数字', 'int':'整数',
'float':'小数',
'date': '日期', 'date': '日期',
'datetime': '日期时间', 'datetime': '日期时间',
'radio': '单选', 'select': '单选',
'checkbox': '多选', 'selects': '多选',
}, },
fieldtypeoptions: [{ fieldtypeoptions: [{
value: 'string', value: 'string',
label: '文本' label: '文本'
}, },
{ {
value: 'number', value: 'int',
label: '数字' label: '整数'
},
{
value: 'float',
label: '小数'
}, },
{ {
value: 'date', value: 'date',
@ -380,11 +459,11 @@
label: '日期时间' label: '日期时间'
}, },
{ {
value: 'radio', value: 'select',
label: '单选' label: '单选'
}, },
{ {
value: 'checkbox', value: 'selects',
label: '多选' label: '多选'
} }
], ],
@ -403,14 +482,22 @@
}, },
methods: { methods: {
//添加 //添加字段选项
addDomain() { addDomain() {
this.field_choice.push('') this.field_choice.push('')
}, },
//删除 //删除字段选项
removeDomain(index){ removeDomain(index){
this.field_choice.splice(index, 1) 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, checkPermission,
//子工序列表 //子工序列表
getList() { getList() {
@ -547,6 +634,8 @@
getrffieldList(this.listQueryfield).then((response) => { getrffieldList(this.listQueryfield).then((response) => {
if (response.data) { if (response.data) {
this.fieldList = response.data; this.fieldList = response.data;
debugger;
console.log(this.fieldList)
} }
}); });
@ -560,6 +649,8 @@
}); });
}, },
handlefieldCreate() { handlefieldCreate() {
this.field_choice = [''];
this.field = Object.assign({}, defaultfield); this.field = Object.assign({}, defaultfield);
this.dialogType1 = "new"; this.dialogType1 = "new";
this.dialogVisible1 = true; this.dialogVisible1 = true;

View File

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

View File

@ -12,3 +12,4 @@ celerybeat-schedule.dat
celerybeat-schedule.dir celerybeat-schedule.dir
db.sqlite3 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', '浮点'), ('float', '浮点'),
('boolean', '布尔'), ('boolean', '布尔'),
('date', '日期'), ('date', '日期'),
('time', '时间'),
('datetime', '日期时间'), ('datetime', '日期时间'),
('radio', '单选'), ('radio', '单选'),
('checkbox', '多选'), ('checkbox', '多选'),

View File

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

View File

@ -1,7 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Contract, Customer from .models import Contract, Customer, Order
class CustomerSerializer(serializers.ModelSerializer): class CustomerSerializer(serializers.ModelSerializer):
class Meta: class Meta:
@ -23,7 +22,25 @@ class ContractSerializer(serializers.ModelSerializer):
model = Contract model = Contract
fields = '__all__' fields = '__all__'
class ContractSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Contract
fields = ['id', 'name', 'number']
class ContractCreateUpdateSerializer(serializers.ModelSerializer): class ContractCreateUpdateSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Contract 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.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer
from apps.sam.models import Contract, Customer from apps.sam.models import Contract, Customer, Order
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from apps.system.mixins import CreateUpdateCustomMixin from apps.system.mixins import CreateUpdateCustomMixin
from django.shortcuts import render from django.shortcuts import render
@ -39,3 +39,20 @@ class ContractViewSet(CreateUpdateCustomMixin, ModelViewSet):
if self.action in ['create', 'update']: if self.action in ['create', 'update']:
return ContractCreateUpdateSerializer 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' filepath = settings.BASE_DIR +'/temp/' + filename +'.png'
with open(filepath, 'wb') as f: with open(filepath, 'wb') as f:
data = tran64(request.data.get('base64').replace(' ', '+')) data = tran64(request.data.get('base64').replace(' ', '+'))
# data = request.data.get('base64')
f.write(base64.urlsafe_b64decode(data)) f.write(base64.urlsafe_b64decode(data))
# picture_of_me = face_recognition.load_image_file(settings.BASE_DIR +'/temp/me.png') # 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] # my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]