hetong,xiugai
This commit is contained in:
parent
1b6c7c5e07
commit
368b9f9c12
|
@ -29,6 +29,7 @@
|
|||
"vue-json-editor": "^1.4.3",
|
||||
"vue-router": "^3.5.2",
|
||||
"vuex": "^3.6.2",
|
||||
"webpack-dev-server": "^4.2.0",
|
||||
"xlsx": "^0.17.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
@ -80,6 +80,49 @@ export const constantRoutes = [
|
|||
* the routes that need to be dynamically loaded based on user perms
|
||||
*/
|
||||
export const asyncRoutes = [
|
||||
|
||||
{
|
||||
path: '/mtm',
|
||||
component: Layout,
|
||||
redirect: '/mtm/material/',
|
||||
name: 'mtm',
|
||||
meta: { title: '制造管理', icon: 'example', perms: ['procurement_set'] },
|
||||
children: [
|
||||
{
|
||||
path: 'material',
|
||||
name: 'material',
|
||||
component: () => import('@/views/mtm/material'),
|
||||
meta: { title: '物料清单', icon: 'example', perms: ['vendor_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'process',
|
||||
name: 'process',
|
||||
component: () => import('@/views/mtm/process'),
|
||||
meta: { title: '工序管理', icon: 'example', perms: ['vendor_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'step/:id',
|
||||
name: 'Step',
|
||||
component: () => import('@/views/mtm/step.vue'),
|
||||
meta: { title: '子工序', perms: ['vendor_manage'] },
|
||||
hidden: true
|
||||
}
|
||||
,
|
||||
{
|
||||
path: 'stepdo/:id',
|
||||
name: 'StepDo',
|
||||
component: () => import('@/views/mtm/stepdo.vue'),
|
||||
meta: { title: '子工序查看', perms: ['vendor_manage'] },
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: '/mtm/productprocess/',
|
||||
name: 'productprocess',
|
||||
component: () => import('@/views/mtm/productprocess'),
|
||||
meta: { title: '产品管理', icon: 'example', perms: ['vendor_manage'] }
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/equipment',
|
||||
component: Layout,
|
||||
|
@ -91,13 +134,13 @@ export const asyncRoutes = [
|
|||
path: 'index',
|
||||
name: 'index',
|
||||
component: () => import('@/views/equipment/index'),
|
||||
meta: { title: '设备台账', icon: 'example', perms: ['index_manage'] }
|
||||
meta: { title: '生产设备', icon: 'example', perms: ['index_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'index',
|
||||
name: 'index',
|
||||
component: () => import('@/views/equipment/index'),
|
||||
meta: { title: '运维记录', icon: 'example', perms: ['index_manage'] }
|
||||
meta: { title: '监视和测量设备', icon: 'example', perms: ['index_manage'] }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -144,48 +187,6 @@ export const asyncRoutes = [
|
|||
]
|
||||
},
|
||||
|
||||
{
|
||||
path: '/mtm',
|
||||
component: Layout,
|
||||
redirect: '/mtm/material/',
|
||||
name: 'mtm',
|
||||
meta: { title: '制造管理', icon: 'example', perms: ['procurement_set'] },
|
||||
children: [
|
||||
{
|
||||
path: 'material',
|
||||
name: 'material',
|
||||
component: () => import('@/views/mtm/material'),
|
||||
meta: { title: '物料', icon: 'example', perms: ['vendor_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'process',
|
||||
name: 'process',
|
||||
component: () => import('@/views/mtm/process'),
|
||||
meta: { title: '工序', icon: 'example', perms: ['vendor_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'step/:id',
|
||||
name: 'Step',
|
||||
component: () => import('@/views/mtm/step.vue'),
|
||||
meta: { title: '子工序', perms: ['vendor_manage'] },
|
||||
hidden: true
|
||||
}
|
||||
,
|
||||
{
|
||||
path: 'stepdo/:id',
|
||||
name: 'StepDo',
|
||||
component: () => import('@/views/mtm/stepdo.vue'),
|
||||
meta: { title: '子工序查看', perms: ['vendor_manage'] },
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: '/mtm/productprocess/',
|
||||
name: 'productprocess',
|
||||
component: () => import('@/views/mtm/productprocess'),
|
||||
meta: { title: '产品工艺', icon: 'example', perms: ['vendor_manage'] }
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
path: '/procurement',
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div>
|
||||
<el-input
|
||||
v-model="listQuery.search"
|
||||
placeholder="原料名称/原料编号"
|
||||
placeholder="物料名称/物料编号"
|
||||
style="width: 300px"
|
||||
class="filter-item"
|
||||
@keyup.enter.native="handleFilter"
|
||||
|
@ -37,7 +37,9 @@
|
|||
border
|
||||
fit
|
||||
stripe
|
||||
highlight-current-row
|
||||
highlight-current-row
|
||||
max-height="600"
|
||||
height="100"
|
||||
v-el-height-adaptive-table="{bottomOffset: 50}"
|
||||
>
|
||||
<el-table-column type="index" width="50" />
|
||||
|
@ -45,17 +47,20 @@
|
|||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="物料类别">
|
||||
<template slot-scope="scope"> {{ options_[scope.row.type] }}</template>
|
||||
<el-table-column label="物料类别" :filters="[{ text: '成品', value: 1 }, { text: '半成品', value: 2 },{ text: '主要原料', value: 3 }, { text: '辅助原料', value: 4 }]"
|
||||
:filter-method="filterTag"
|
||||
filter-placement="bottom-end">
|
||||
<template slot-scope="scope"> {{options_[scope.row.type]}}</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="物料名称">
|
||||
<template slot-scope="scope">{{ scope.row.name }}</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="物料编号">
|
||||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
||||
<el-table-column label="规格型号">
|
||||
<template slot-scope="scope">{{ scope.row.specification }}</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="计量单位">
|
||||
<template slot-scope="scope">{{ scope.row.unit }}</template>
|
||||
</el-table-column>
|
||||
|
@ -109,6 +114,10 @@
|
|||
<el-form-item label="物料编号" prop="number">
|
||||
<el-input v-model="material.number" placeholder="物料编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格型号" prop="specification">
|
||||
<el-input v-model="material.specification" placeholder="规格型号" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="计量单位" prop="unit">
|
||||
<el-select style="width: 100%" v-model="material.unit" placeholder="请选择">
|
||||
<el-option
|
||||
|
@ -175,7 +184,8 @@ export default {
|
|||
|
||||
"1":'成品',
|
||||
"2":'半成品',
|
||||
"3":'原料',
|
||||
"3":'主要原料',
|
||||
"4":'辅助原料',
|
||||
|
||||
},
|
||||
options: [{
|
||||
|
@ -186,7 +196,10 @@ export default {
|
|||
label: '半成品'
|
||||
}, {
|
||||
value: 3,
|
||||
label: '原料'
|
||||
label: '主要原料'
|
||||
}, {
|
||||
value: 4,
|
||||
label: '辅助原料'
|
||||
}],
|
||||
unitoptions:[
|
||||
{
|
||||
|
@ -231,7 +244,10 @@ export default {
|
|||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
|
||||
filterTag(value, row) {
|
||||
return row.type === value;
|
||||
|
||||
},
|
||||
//工序清单
|
||||
getProcessList() {
|
||||
getProcessList().then((res) => {
|
||||
|
|
|
@ -101,19 +101,19 @@
|
|||
:rules="rule1"
|
||||
>
|
||||
<el-form-item label="客户名称" prop="name">
|
||||
<el-input v-model="customer.name" placeholder="仓库名称" />
|
||||
<el-input v-model="customer.name" placeholder="客户名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="客户地址" prop="address">
|
||||
<el-input v-model="customer.address" placeholder="仓库编号" />
|
||||
<el-input v-model="customer.address" placeholder="客户地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人" prop="contact">
|
||||
<el-input v-model="customer.contact" placeholder="具体地点" />
|
||||
<el-input v-model="customer.contact" placeholder="联系人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" prop="contact_phone">
|
||||
<el-input v-model="customer.contact_phone" placeholder="仓库编号" />
|
||||
<el-input v-model="customer.contact_phone" placeholder="联系电话" />
|
||||
</el-form-item>
|
||||
<el-form-item label="描述" prop="description">
|
||||
<el-input v-model="customer.description" placeholder="具体地点" />
|
||||
<el-input v-model="customer.description" placeholder="描述" />
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
@ -141,29 +141,12 @@ export default {
|
|||
customerList: {
|
||||
count: 0,
|
||||
},
|
||||
options: [{
|
||||
value: 0,
|
||||
label: '运转正常'
|
||||
}, {
|
||||
value: 1,
|
||||
label: '停用'
|
||||
}, {
|
||||
value: 2,
|
||||
label: '报废'
|
||||
}],
|
||||
listQuery: {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
},
|
||||
keeperOptions:[],
|
||||
depOptions:[],
|
||||
|
||||
listLoading: true,
|
||||
dialogVisible: false,
|
||||
dialogType: "new",
|
||||
rule1: {
|
||||
name: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
number: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
place: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
},
|
||||
};
|
||||
},
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
# Generated by Django 3.2.6 on 2021-09-13 01:54
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mtm', '0011_alter_recordformfield_field_type'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('inm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Inventory',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('count', models.IntegerField(default=0, verbose_name='数量')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inventory_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='物料信息')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inventory_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
('warehouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inm.warehouse', verbose_name='所在仓库')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '库存表',
|
||||
'verbose_name_plural': '库存表',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FIFO',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.IntegerField(default=1, verbose_name='出入库类型')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='fifo_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='fifo_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 3.2.6 on 2021-09-13 06:12
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mtm', '0011_alter_recordformfield_field_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='material',
|
||||
name='specification',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='规格型号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='material',
|
||||
name='type',
|
||||
field=models.CharField(choices=[(1, '成品'), (2, '半成品'), (3, '主要原料'), (4, '辅助原料')], default=1, max_length=20, verbose_name='物料类型'),
|
||||
),
|
||||
]
|
|
@ -15,7 +15,8 @@ class Material(CommonAModel):
|
|||
type_choices=(
|
||||
(1, '成品'),
|
||||
(2, '半成品'),
|
||||
(3, '原材料')
|
||||
(3, '主要原料'),
|
||||
(4,'辅助原料')
|
||||
)
|
||||
unit_choices =(
|
||||
('块', '块'),
|
||||
|
@ -23,6 +24,7 @@ class Material(CommonAModel):
|
|||
)
|
||||
name = models.CharField('物料名称', max_length=100, unique=True)
|
||||
number = models.CharField('编号', max_length=100, unique=True)
|
||||
specification = models.CharField('规格型号', max_length=100, null=True, blank=True)
|
||||
type = models.CharField('物料类型', choices= type_choices, max_length=20, default=1)
|
||||
sort_str = models.CharField('排序字符', max_length=100, null=True, blank=True)
|
||||
processes = models.JSONField('工艺流程', default=list, blank=True)
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
# Generated by Django 3.2.6 on 2021-09-13 01:54
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('sam', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Contract',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=100, verbose_name='合同名称')),
|
||||
('number', models.CharField(max_length=100, unique=True, verbose_name='合同编号')),
|
||||
('amount', models.IntegerField(default=0, verbose_name='合同金额')),
|
||||
('sign_date', models.DateField(verbose_name='签订日期')),
|
||||
('description', models.CharField(blank=True, max_length=200, null=True, verbose_name='描述')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contract_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '合同信息',
|
||||
'verbose_name_plural': '合同信息',
|
||||
},
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='customer',
|
||||
name='country',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='customer',
|
||||
name='phone',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='order',
|
||||
name='contact',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customer',
|
||||
name='contact_phone',
|
||||
field=models.CharField(max_length=11, null=True, unique=True, verbose_name='联系电话'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='customer',
|
||||
name='contact',
|
||||
field=models.CharField(default=1, max_length=20, verbose_name='联系人'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Contact',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contract',
|
||||
name='customer',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contact_customer', to='sam.customer', verbose_name='关联客户'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contract',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contract_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='order',
|
||||
name='contract',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='sam.contract', verbose_name='所属合同'),
|
||||
),
|
||||
]
|
Loading…
Reference in New Issue