diff --git a/hb_client/package.json b/hb_client/package.json index 4f3c7a1..3deb725 100644 --- a/hb_client/package.json +++ b/hb_client/package.json @@ -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": { diff --git a/hb_client/src/router/index.js b/hb_client/src/router/index.js index d612662..8310390 100644 --- a/hb_client/src/router/index.js +++ b/hb_client/src/router/index.js @@ -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', diff --git a/hb_client/src/views/mtm/material.vue b/hb_client/src/views/mtm/material.vue index 8179d8a..950ff75 100644 --- a/hb_client/src/views/mtm/material.vue +++ b/hb_client/src/views/mtm/material.vue @@ -4,7 +4,7 @@
@@ -45,17 +47,20 @@ - - + + - - + + + @@ -109,6 +114,10 @@ + + + + { diff --git a/hb_client/src/views/sam/customer.vue b/hb_client/src/views/sam/customer.vue index 54312db..bb6bea7 100644 --- a/hb_client/src/views/sam/customer.vue +++ b/hb_client/src/views/sam/customer.vue @@ -101,19 +101,19 @@ :rules="rule1" > - + - + - + - + - + @@ -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" }], }, }; }, diff --git a/hb_server/apps/inm/migrations/0002_fifo_inventory.py b/hb_server/apps/inm/migrations/0002_fifo_inventory.py new file mode 100644 index 0000000..20fb89c --- /dev/null +++ b/hb_server/apps/inm/migrations/0002_fifo_inventory.py @@ -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, + }, + ), + ] diff --git a/hb_server/apps/mtm/migrations/0012_auto_20210913_1412.py b/hb_server/apps/mtm/migrations/0012_auto_20210913_1412.py new file mode 100644 index 0000000..853adac --- /dev/null +++ b/hb_server/apps/mtm/migrations/0012_auto_20210913_1412.py @@ -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='物料类型'), + ), + ] diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 06f1672..6ff1701 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -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) diff --git a/hb_server/apps/sam/migrations/0002_auto_20210913_0954.py b/hb_server/apps/sam/migrations/0002_auto_20210913_0954.py new file mode 100644 index 0000000..30d2680 --- /dev/null +++ b/hb_server/apps/sam/migrations/0002_auto_20210913_0954.py @@ -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='所属合同'), + ), + ]