diff --git a/src/api/qms/item/index.ts b/src/api/qms/item/index.ts
new file mode 100644
index 000000000..4c76802b9
--- /dev/null
+++ b/src/api/qms/item/index.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+
+export interface ItemVO {
+ deleteTime: Date
+ id: number
+ status: string
+ concurrencyStamp: number
+ remark: string
+ deleter: string
+ siteId: number
+ itemCode: string
+ itemName: string
+ itemType: string
+ qmsClass: string
+ dataType: string
+ dataVerify: string
+ dataStandvalue: string
+ dataDescripe: string
+}
+
+// 查询质检项目定义列表
+export const getItemPage = async (params) => {
+ if (params.isSearch) {
+ delete params.isSearch
+ const data = {...params}
+ return await request.post({ url: '/qms/item/senior', data })
+ } else {
+ return await request.get({ url: `/qms/item/page`, params })
+ }
+}
+
+// 查询质检项目定义详情
+export const getItem = async (id: number) => {
+ return await request.get({ url: `/qms/item/get?id=` + id })
+}
+
+// 新增质检项目定义
+export const createItem = async (data: ItemVO) => {
+ return await request.post({ url: `/qms/item/create`, data })
+}
+
+// 修改质检项目定义
+export const updateItem = async (data: ItemVO) => {
+ return await request.put({ url: `/qms/item/update`, data })
+}
+
+// 删除质检项目定义
+export const deleteItem = async (id: number) => {
+ return await request.delete({ url: `/qms/item/delete?id=` + id })
+}
+
+// 导出质检项目定义 Excel
+export const exportItem = async (params) => {
+ return await request.download({ url: `/qms/item/export-excel`, params })
+}
+
+// 下载用户导入模板
+export const importTemplate = () => {
+ return request.download({ url: '/qms/item/get-import-template' })
+}
\ No newline at end of file
diff --git a/src/api/qms/qualityclass/index.ts b/src/api/qms/qualityclass/index.ts
new file mode 100644
index 000000000..e0b7b27d5
--- /dev/null
+++ b/src/api/qms/qualityclass/index.ts
@@ -0,0 +1,55 @@
+import request from '@/config/axios'
+
+export interface QualityclassVO {
+ deleteTime: Date
+ id: number
+ status: string
+ concurrencyStamp: number
+ remark: string
+ deleter: string
+ siteId: number
+ code: string
+ name: string
+ groupCode: string
+}
+
+// 查询质检类别列表
+export const getQualityclassPage = async (params) => {
+ if (params.isSearch) {
+ delete params.isSearch
+ const data = {...params}
+ return await request.post({ url: '/qms/qualityclass/senior', data })
+ } else {
+ return await request.get({ url: `/qms/qualityclass/page`, params })
+ }
+}
+
+// 查询质检类别详情
+export const getQualityclass = async (id: number) => {
+ return await request.get({ url: `/qms/qualityclass/get?id=` + id })
+}
+
+// 新增质检类别
+export const createQualityclass = async (data: QualityclassVO) => {
+ return await request.post({ url: `/qms/qualityclass/create`, data })
+}
+
+// 修改质检类别
+export const updateQualityclass = async (data: QualityclassVO) => {
+ return await request.put({ url: `/qms/qualityclass/update`, data })
+}
+
+// 删除质检类别
+export const deleteQualityclass = async (id: number) => {
+ return await request.delete({ url: `/qms/qualityclass/delete?id=` + id })
+}
+
+// 导出质检类别 Excel
+export const exportQualityclass = async (params) => {
+ return await request.download({ url: `/qms/qualityclass/export-excel`, params })
+}
+
+// 下载用户导入模板
+export const importTemplate = () => {
+ return request.download({ url: '/qms/qualityclass/get-import-template' })
+}
\ No newline at end of file
diff --git a/src/utils/dict.ts b/src/utils/dict.ts
index 1418edfc1..c08388364 100644
--- a/src/utils/dict.ts
+++ b/src/utils/dict.ts
@@ -274,4 +274,11 @@ export enum DICT_TYPE {
CONTAINER_STATUS = 'container_status', // 容器状态
PREDICT_TIME_TYPE = 'predict_time_type', // 预测时间类型
PACK_UNIT_TYPE = 'pack_unit_type', // 包装规格类型
+ TRANSFER_REASON = 'transfer_reason', // 调拨出入库原因
+ PURCHASERECEIPT_SOURCE_TYPE="purchasereceipt_source_type",//采购收货数据来源
+
+
+ // ========== 业务 - QMS ==========
+ QUALIFY_STATUS = 'qualify_status'
+
}
diff --git a/src/views/qms/item/index.vue b/src/views/qms/item/index.vue
new file mode 100644
index 000000000..3854704a3
--- /dev/null
+++ b/src/views/qms/item/index.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.code }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/qms/item/item.data.ts b/src/views/qms/item/item.data.ts
new file mode 100644
index 000000000..ee96434f2
--- /dev/null
+++ b/src/views/qms/item/item.data.ts
@@ -0,0 +1,176 @@
+import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
+import { dateFormatter } from '@/utils/formatTime'
+
+// 表单校验
+export const ItemRules = reactive({
+ concurrencyStamp: [required],
+})
+
+export const Item = useCrudSchemas(reactive([
+ {
+ label: '删除时间',
+ field: 'deleteTime',
+ sort: 'custom',
+ formatter: dateFormatter,
+ isSearch: false,
+ isTable: false,
+ isForm:false,
+ isDetail:false,
+ search: {
+ component: 'DatePicker',
+ componentProps: {
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ type: 'daterange',
+ defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+ }
+ },
+ form: {
+ component: 'DatePicker',
+ componentProps: {
+ type: 'datetime',
+ valueFormat: 'x'
+ }
+ },
+ },
+ {
+ label: '主键',
+ field: 'id',
+ sort: 'custom',
+ isForm: false,
+ isTable: false,
+ isDetail:false
+ },
+
+ {
+ label: '并发乐观锁',
+ field: 'concurrencyStamp',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false,
+ isForm:false,
+ isDetail:false,
+ form: {
+ component: 'InputNumber',
+ value: 0
+ },
+ },
+ {
+ label: '创建时间',
+ field: 'createTime',
+ sort: 'custom',
+ formatter: dateFormatter,
+ isSearch: false,
+ isTable: false,
+ isDetail:false,
+ search: {
+ component: 'DatePicker',
+ componentProps: {
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ type: 'daterange',
+ defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+ }
+ },
+ isForm: false,
+ },
+ {
+ label: '删除用户名',
+ field: 'deleter',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false,
+ isForm: false,
+ isDetail:false
+ },
+ {
+ label: '位置ID',
+ field: 'siteId',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false,
+ isForm: false,
+ isDetail:false,
+ form: {
+ component: 'InputNumber',
+ value: 0
+ },
+ },
+ {
+ label: '项目编码',
+ field: 'itemCode',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '项目名称',
+ field: 'itemName',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '类别编码',
+ field: 'itemType',
+ sort: 'custom',
+ isSearch: true,
+ form: {
+ component: 'SelectV2'
+ },
+ },
+ {
+ label: '质检科目编码',
+ field: 'qmsClass',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '数据类型',
+ field: 'dataType',
+ sort: 'custom',
+ isSearch: true,
+ form: {
+ component: 'SelectV2'
+ },
+ },
+ {
+ label: '校验方式',
+ field: 'dataVerify',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '数据参考值',
+ field: 'dataStandvalue',
+ sort: 'custom',
+ isSearch: false,
+ },
+ {
+ label: '数据录入说明',
+ field: 'dataDescripe',
+ sort: 'custom',
+ isSearch: false,
+ },
+ {
+ label: '操作',
+ field: 'action',
+ isForm: false,
+ table: {
+ width: 150,
+ fixed: 'right'
+ }
+ },
+ {
+ label: '状态',
+ field: 'status',
+ sort: 'custom',
+ isSearch: true,
+ form: {
+ component: 'Radio'
+ },
+ },
+ {
+ label: '备注',
+ field: 'remark',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false
+ }
+]))
diff --git a/src/views/qms/qualityclass/index.vue b/src/views/qms/qualityclass/index.vue
new file mode 100644
index 000000000..683f9dff9
--- /dev/null
+++ b/src/views/qms/qualityclass/index.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.code }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/qms/qualityclass/qualityclass.data.ts b/src/views/qms/qualityclass/qualityclass.data.ts
new file mode 100644
index 000000000..5e72c29b8
--- /dev/null
+++ b/src/views/qms/qualityclass/qualityclass.data.ts
@@ -0,0 +1,152 @@
+import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
+import { dateFormatter } from '@/utils/formatTime'
+
+// 表单校验
+export const QualityclassRules = reactive({
+ concurrencyStamp: [required],
+ code: [{ required: true, message: '请输入代码', trigger: 'blur' }],
+ name: [required],
+})
+
+export const Qualityclass = useCrudSchemas(reactive([
+ {
+ label: '删除时间',
+ field: 'deleteTime',
+ sort: 'custom',
+ formatter: dateFormatter,
+ isSearch: false,
+ isTable: false,
+ isForm:false,
+ isDetail:false,
+ search: {
+ component: 'DatePicker',
+ componentProps: {
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ type: 'daterange',
+ defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+ }
+ },
+ form: {
+ component: 'DatePicker',
+ componentProps: {
+ type: 'datetime',
+ valueFormat: 'x'
+ }
+ },
+ },
+ {
+ label: '主键',
+ field: 'id',
+ sort: 'custom',
+ isForm: false,
+ isTable: false,
+ isDetail:false
+ },
+ {
+ label: '并发乐观锁',
+ field: 'concurrencyStamp',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false,
+ isForm:false,
+ isDetail:false,
+ form: {
+ component: 'InputNumber',
+ value: 0
+ },
+ },
+ {
+ label: '创建时间',
+ field: 'createTime',
+ sort: 'custom',
+ formatter: dateFormatter,
+ isSearch: false,
+ isTable: false,
+ isDetail:false,
+ search: {
+ component: 'DatePicker',
+ componentProps: {
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ type: 'daterange',
+ defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+ }
+ },
+ isForm: false,
+ },
+ {
+ label: '删除用户名',
+ field: 'deleter',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false,
+ isForm: false,
+ isDetail:false
+ },
+ {
+ label: '位置ID',
+ field: 'siteId',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false,
+ isForm: false,
+ isDetail:false,
+ form: {
+ component: 'InputNumber',
+ value: 0
+ },
+ },
+ {
+ label: '编码',
+ field: 'code',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '编码名称',
+ field: 'name',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '分组类别',
+ field: 'groupCode',
+ sort: 'custom',
+ isSearch: true,
+ },
+ {
+ label: '状态',
+ field: 'status',
+ sort: 'custom',
+ dictType: DICT_TYPE.QUALIFY_STATUS,
+ dictClass: 'string',
+ isForm: true,
+ isSearch: true,
+ isTable: true,
+ form: {
+ component: 'Switch',
+ value: 'ENABLE',
+ componentProps: {
+ inactiveValue: 'DISABLE',
+ activeValue: 'ENABLE'
+ }
+ },
+ },
+ {
+ label: '操作',
+ field: 'action',
+ isForm: false,
+ isDetail:false,
+ table: {
+ width: 150,
+ fixed: 'right'
+ }
+ },
+ {
+ label: '备注',
+ field: 'remark',
+ sort: 'custom',
+ isSearch: false,
+ isTable: false
+ }
+]))
+