main
kkk-ops 2 months ago
parent 01fa3536d2
commit 09cb2e267e

@ -4,7 +4,7 @@ NODE_ENV=development
VITE_DEV=true
# 请求路径
VITE_BASE_URL='http://localhost:48080'
VITE_BASE_URL='http://localhost:48081'
# 文件上传类型server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server

@ -4,12 +4,12 @@ NODE_ENV=production
VITE_DEV=false
# 请求路径
VITE_BASE_URL='http://47.106.185.127:48080'
VITE_BASE_URL='http://192.168.5.119:48081'
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://47.106.185.127:48080/admin-api/infra/file/upload'
VITE_UPLOAD_URL='http://192.168.5.119:48081/admin-api/infra/file/upload'
# 接口地址
VITE_API_URL=/admin-api

@ -7,6 +7,7 @@
"scripts": {
"i": "pnpm install",
"dev": "vite --mode env.local",
"pro": "vite --mode env.prod",
"dev-server": "vite --mode dev",
"ts:check": "vue-tsc --noEmit",
"build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build",

@ -6,6 +6,8 @@ export interface ProductVO {
name: string // 产品名称
barCode: string // 产品条码
categoryId: number // 产品类型编号
subCategoryId: number // 产品类型子类编号
subCategoryName: string // 产品类型子类名称
unitId: number // 单位编号
unitName?: string // 单位名字
status: number // 产品状态

@ -4,6 +4,9 @@ import request from '@/config/axios'
export interface ProductUnitVO {
id: number // 单位编号
name: string // 单位名字
primaryFlag: string // 是否主单位
primaryId: number // 关联主单位id
changeRate: number // 换算比例
status: number // 单位状态
}
@ -42,5 +45,10 @@ export const ProductUnitApi = {
// 导出产品单位 Excel
exportProductUnit: async (params) => {
return await request.download({ url: `/erp/product-unit/export-excel`, params })
}
},
// 获得产品单位列表
getProductUnitList: async () => {
return await request.get({ url: `/erp/product-unit/list`})
},
}

@ -15,6 +15,12 @@ export interface DeviceVO {
lastOnlineTime: Date // 最后上线时间
remark: string // 备注
isEnable: boolean // 是否启用
deviceModelId: number // 关联设备模型
protocol: string // 通讯协议
sampleCycle: number // 采集周期
url: string // 端点url
username: string // 用户名
password: string // 密码
}
// 物联设备 API

@ -0,0 +1,47 @@
import request from '@/config/axios'
// 采集点分类 VO
export interface DeviceAttributeTypeVO {
id: number // ID
code: string // 分类编码
name: string // 分类名称
remark: string // 备注
}
// 采集点分类 API
export const DeviceAttributeTypeApi = {
// 查询采集点分类分页
getDeviceAttributeTypePage: async (params: any) => {
return await request.get({ url: `/iot/device-attribute-type/page`, params })
},
// 查询采集点分类详情
getDeviceAttributeType: async (id: number) => {
return await request.get({ url: `/iot/device-attribute-type/get?id=` + id })
},
// 新增采集点分类
createDeviceAttributeType: async (data: DeviceAttributeTypeVO) => {
return await request.post({ url: `/iot/device-attribute-type/create`, data })
},
// 修改采集点分类
updateDeviceAttributeType: async (data: DeviceAttributeTypeVO) => {
return await request.put({ url: `/iot/device-attribute-type/update`, data })
},
// 删除采集点分类
deleteDeviceAttributeType: async (id: number) => {
return await request.delete({ url: `/iot/device-attribute-type/delete?id=` + id })
},
// 导出采集点分类 Excel
exportDeviceAttributeType: async (params) => {
return await request.download({ url: `/iot/device-attribute-type/export-excel`, params })
},
// 获得采集点分类列表
getDeviceAttributeTypeList: async () => {
return await request.get({ url: `/iot/device-attribute-type/list`})
},
}

@ -0,0 +1,48 @@
import request from '@/config/axios'
// 采集设备模型 VO
export interface DeviceModelVO {
id: number // ID
code: string // 分类编码
name: string // 分类名称
protocol: string // 通讯协议
remark: string // 备注
}
// 采集设备模型 API
export const DeviceModelApi = {
// 查询采集设备模型分页
getDeviceModelPage: async (params: any) => {
return await request.get({ url: `/iot/device-model/page`, params })
},
// 查询采集设备模型详情
getDeviceModel: async (id: number) => {
return await request.get({ url: `/iot/device-model/get?id=` + id })
},
// 新增采集设备模型
createDeviceModel: async (data: DeviceModelVO) => {
return await request.post({ url: `/iot/device-model/create`, data })
},
// 修改采集设备模型
updateDeviceModel: async (data: DeviceModelVO) => {
return await request.put({ url: `/iot/device-model/update`, data })
},
// 删除采集设备模型
deleteDeviceModel: async (id: number) => {
return await request.delete({ url: `/iot/device-model/delete?id=` + id })
},
// 导出采集设备模型 Excel
exportDeviceModel: async (params) => {
return await request.download({ url: `/iot/device-model/export-excel`, params })
},
// 获得采集设备模型列表
getDeviceModelList: async () => {
return await request.get({ url: `/iot/device-model/list`})
},
}

@ -0,0 +1,48 @@
import request from '@/config/axios'
// 采集设备模型-点位管理 VO
export interface DeviceModelAttributeVO {
id: number // ID
attributeCode: string // 点位编码
attributeName: string // 点位名称
attributeType: string // 点位类型
dataType: string // 数据类型
address: string // 寄存器地址
dataUnit: string // 单位
ratio: number // 倍率
remark: string // 备注
deviceModelId: number // 采集设备模型id
}
// 采集设备模型-点位管理 API
export const DeviceModelAttributeApi = {
// 查询采集设备模型-点位管理分页
getDeviceModelAttributePage: async (params: any) => {
return await request.get({ url: `/iot/device-model-attribute/page`, params })
},
// 查询采集设备模型-点位管理详情
getDeviceModelAttribute: async (id: number) => {
return await request.get({ url: `/iot/device-model-attribute/get?id=` + id })
},
// 新增采集设备模型-点位管理
createDeviceModelAttribute: async (data) => {
return await request.post({ url: `/iot/device-model-attribute/create`, data })
},
// 修改采集设备模型-点位管理
updateDeviceModelAttribute: async (data) => {
return await request.put({ url: `/iot/device-model-attribute/update`, data })
},
// 删除采集设备模型-点位管理
deleteDeviceModelAttribute: async (id: number) => {
return await request.delete({ url: `/iot/device-model-attribute/delete?id=` + id })
},
// 导出采集设备模型-点位管理 Excel
exportDeviceModelAttribute: async (params) => {
return await request.download({ url: `/iot/device-model-attribute/export-excel`, params })
},
}

@ -5,13 +5,17 @@ export interface EnergyDeviceVO {
id: number // ID
name: string // 名称
code: string // 编码
deviceType: string // 设备类型
deviceTypeId: number // 设备类型id
deviceTypeName: string // 设备类型名称
info: string // 信息资料
checkCron: string // 抄表周期cron
lastCheckTime: Date // 最后抄表时间
lastCheckValue: number // 最后抄表值
unitName: string // 单位
isEnable: boolean // 是否启用
orgId: number // 所属区域id
orgName: string // 所属区域名称
rules: string // 计算规则
}
// 能源设备 API

@ -0,0 +1,49 @@
import request from '@/config/axios'
// 能耗类型 VO
export interface EnergyTypeVO {
id: number // ID
code: string // 能耗类型编码
name: string // 能耗类型名称
unit: string // 单位
isEnable: boolean // 是否启用
remark: string // 备注
}
// 能耗类型 API
export const EnergyTypeApi = {
// 查询能耗类型分页
getEnergyTypePage: async (params: any) => {
return await request.get({ url: `/mes/energy-type/page`, params })
},
// 查询能耗类型详情
getEnergyType: async (id: number) => {
return await request.get({ url: `/mes/energy-type/get?id=` + id })
},
// 新增能耗类型
createEnergyType: async (data: EnergyTypeVO) => {
return await request.post({ url: `/mes/energy-type/create`, data })
},
// 修改能耗类型
updateEnergyType: async (data: EnergyTypeVO) => {
return await request.put({ url: `/mes/energy-type/update`, data })
},
// 删除能耗类型
deleteEnergyType: async (id: number) => {
return await request.delete({ url: `/mes/energy-type/delete?id=` + id })
},
// 导出能耗类型 Excel
exportEnergyType: async (params) => {
return await request.download({ url: `/mes/energy-type/export-excel`, params })
},
// 获得能耗类型列表
getEnergyTypeList: async () => {
return await request.get({ url: `/mes/energy-type/list`})
},
}

@ -0,0 +1,49 @@
import request from '@/config/axios'
// 模具管理-领模申请 VO
export interface MoldGetVO {
id: number // ID
orderId: number // 领模单号
code: string // 模具编码
name: string // 模具名称
state: string // 状态
person: string // 领模人
deviceId: number // 设备id
deviceName: string // 设备名称
getTime: Date // 领取时间
principal: string // 库管员
remark: string // 备注
}
// 模具管理-领模申请 API
export const MoldGetApi = {
// 查询模具管理-领模申请分页
getMoldGetPage: async (params: any) => {
return await request.get({ url: `/mes/mold-get/page`, params })
},
// 查询模具管理-领模申请详情
getMoldGet: async (id: number) => {
return await request.get({ url: `/mes/mold-get/get?id=` + id })
},
// 新增模具管理-领模申请
createMoldGet: async (data: MoldGetVO) => {
return await request.post({ url: `/mes/mold-get/create`, data })
},
// 修改模具管理-领模申请
updateMoldGet: async (data: MoldGetVO) => {
return await request.put({ url: `/mes/mold-get/update`, data })
},
// 删除模具管理-领模申请
deleteMoldGet: async (id: number) => {
return await request.delete({ url: `/mes/mold-get/delete?id=` + id })
},
// 导出模具管理-领模申请 Excel
exportMoldGet: async (params) => {
return await request.download({ url: `/mes/mold-get/export-excel`, params })
},
}

@ -0,0 +1,43 @@
import request from '@/config/axios'
// 维保方案 VO
export interface MoldRecordItemVO {
id: number // ID
name: string // 名称
type: string // 类型
subjectId: string // 关联项目id
remark: string // 备注
}
// 维保方案 API
export const MoldRecordItemApi = {
// 查询维保方案分页
getMoldRecordItemPage: async (params: any) => {
return await request.get({ url: `/mes/mold-record-item/page`, params })
},
// 查询维保方案详情
getMoldRecordItem: async (id: number) => {
return await request.get({ url: `/mes/mold-record-item/get?id=` + id })
},
// 新增维保方案
createMoldRecordItem: async (data: MoldRecordItemVO) => {
return await request.post({ url: `/mes/mold-record-item/create`, data })
},
// 修改维保方案
updateMoldRecordItem: async (data: MoldRecordItemVO) => {
return await request.put({ url: `/mes/mold-record-item/update`, data })
},
// 删除维保方案
deleteMoldRecordItem: async (id: number) => {
return await request.delete({ url: `/mes/mold-record-item/delete?id=` + id })
},
// 导出维保方案 Excel
exportMoldRecordItem: async (params) => {
return await request.download({ url: `/mes/mold-record-item/export-excel`, params })
},
}

@ -0,0 +1,47 @@
import request from '@/config/axios'
// 模具管理-模具入库 VO
export interface MoldReturnVO {
id: number // ID
orderId: number // 领模单号
code: string // 模具编码
name: string // 模具名称
state: string // 状态
person: string // 归还人
returnTime: Date // 入库时间
principal: string // 库管员
remark: string // 备注
}
// 模具管理-模具入库 API
export const MoldReturnApi = {
// 查询模具管理-模具入库分页
getMoldReturnPage: async (params: any) => {
return await request.get({ url: `/mes/mold-return/page`, params })
},
// 查询模具管理-模具入库详情
getMoldReturn: async (id: number) => {
return await request.get({ url: `/mes/mold-return/get?id=` + id })
},
// 新增模具管理-模具入库
createMoldReturn: async (data: MoldReturnVO) => {
return await request.post({ url: `/mes/mold-return/create`, data })
},
// 修改模具管理-模具入库
updateMoldReturn: async (data: MoldReturnVO) => {
return await request.put({ url: `/mes/mold-return/update`, data })
},
// 删除模具管理-模具入库
deleteMoldReturn: async (id: number) => {
return await request.delete({ url: `/mes/mold-return/delete?id=` + id })
},
// 导出模具管理-模具入库 Excel
exportMoldReturn: async (params) => {
return await request.download({ url: `/mes/mold-return/export-excel`, params })
},
}

@ -0,0 +1,47 @@
import request from '@/config/axios'
// 质量管理-检验项目 VO
export interface ZjItemVO {
id: number // ID
zjType: number // 检验类型
name: string // 名称
remark: string // 备注
tool: string // 作业方式
standardVal: number // 标准值
unit: string // 单位
upperVal: number // 上限值
lowerVal: number // 下限值
}
// 质量管理-检验项目 API
export const ZjItemApi = {
// 查询质量管理-检验项目分页
getZjItemPage: async (params: any) => {
return await request.get({ url: `/mes/zj-item/page`, params })
},
// 查询质量管理-检验项目详情
getZjItem: async (id: number) => {
return await request.get({ url: `/mes/zj-item/get?id=` + id })
},
// 新增质量管理-检验项目
createZjItem: async (data: ZjItemVO) => {
return await request.post({ url: `/mes/zj-item/create`, data })
},
// 修改质量管理-检验项目
updateZjItem: async (data: ZjItemVO) => {
return await request.put({ url: `/mes/zj-item/update`, data })
},
// 删除质量管理-检验项目
deleteZjItem: async (id: number) => {
return await request.delete({ url: `/mes/zj-item/delete?id=` + id })
},
// 导出质量管理-检验项目 Excel
exportZjItem: async (params) => {
return await request.download({ url: `/mes/zj-item/export-excel`, params })
},
}

@ -0,0 +1,44 @@
import request from '@/config/axios'
// 检验方案 VO
export interface ZjSchemaVO {
type: string // 类型
name: string // 名称
remark: string // 备注
sampleMethod: string // 抽检方式
val: number // 值
item: string // 关联项目
}
// 检验方案 API
export const ZjSchemaApi = {
// 查询检验方案分页
getZjSchemaPage: async (params: any) => {
return await request.get({ url: `/mes/zj-schema/page`, params })
},
// 查询检验方案详情
getZjSchema: async (id: number) => {
return await request.get({ url: `/mes/zj-schema/get?id=` + id })
},
// 新增检验方案
createZjSchema: async (data: ZjSchemaVO) => {
return await request.post({ url: `/mes/zj-schema/create`, data })
},
// 修改检验方案
updateZjSchema: async (data: ZjSchemaVO) => {
return await request.put({ url: `/mes/zj-schema/update`, data })
},
// 删除检验方案
deleteZjSchema: async (id: number) => {
return await request.delete({ url: `/mes/zj-schema/delete?id=` + id })
},
// 导出检验方案 Excel
exportZjSchema: async (params) => {
return await request.download({ url: `/mes/zj-schema/export-excel`, params })
},
}

@ -0,0 +1,47 @@
import request from '@/config/axios'
// 质量管理-检验类型 VO
export interface ZjTypeVO {
id: number // ID
code: string // 编码
name: string // 名称
remark: string // 备注
}
// 质量管理-检验类型 API
export const ZjTypeApi = {
// 查询质量管理-检验类型分页
getZjTypePage: async (params: any) => {
return await request.get({ url: `/mes/zj-type/page`, params })
},
// 查询质量管理-检验类型详情
getZjType: async (id: number) => {
return await request.get({ url: `/mes/zj-type/get?id=` + id })
},
// 新增质量管理-检验类型
createZjType: async (data: ZjTypeVO) => {
return await request.post({ url: `/mes/zj-type/create`, data })
},
// 修改质量管理-检验类型
updateZjType: async (data: ZjTypeVO) => {
return await request.put({ url: `/mes/zj-type/update`, data })
},
// 删除质量管理-检验类型
deleteZjType: async (id: number) => {
return await request.delete({ url: `/mes/zj-type/delete?id=` + id })
},
// 导出质量管理-检验类型 Excel
exportZjType: async (params) => {
return await request.download({ url: `/mes/zj-type/export-excel`, params })
},
// 获得检验类型列表
getZjTypeList: async () => {
return await request.get({ url: `/mes/zj-type/list`})
},
}

@ -224,6 +224,7 @@ export enum DICT_TYPE {
ERP_AUTOCODE_CYCLEMETHOD = "erp_autocode_cyclemethod",
ERP_AUTOCODE_PARTTYPE = "erp_autocode_parttype",
// ========== MES - 生产管理模块 ==========
MES_ORG_TYPE = "mes_org_type",
MES_ORG_CLASS = "mes_org_class",
@ -272,4 +273,8 @@ export enum DICT_TYPE {
IOT_ATTRIBUTE_IO_TYPE = "iot_attribute_io_type",
IOT_ALERT_TYPE = "iot_alert_type",
IOT_ALERT_LEVEL = "iot_alert_level",
IOT_PROTOCOL = "iot_protocol",
IOT_DEVICE_ATTRIBUTE_UNIT = "iot_device_attribute_unit",
PRIMARY_FLAG = "primary_flag"
}

@ -120,7 +120,7 @@
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="180">
<el-table-column label="操作" align="center" fixed="right" width="200">
<template #default="scope">
<el-button
link

@ -127,7 +127,7 @@
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
width="200px"
/>
<el-table-column label="操作" align="center">
<template #default="scope">

@ -16,7 +16,15 @@
<el-form-item label="规格" prop="moldType">
<el-input v-model="formData.moldType" placeholder="请输入规格" />
</el-form-item>
<el-form-item label="工序" prop="orgType">
<el-form-item prop="orgType">
<template #label>
<span>
工序
<el-tooltip content="来源:数据字典-工序" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
</template>
<el-select v-model="formData.orgType" placeholder="请选择工序">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)"
@ -39,7 +47,7 @@
placeholder="输入预期寿命(小时)"
/>
</el-form-item>
<el-form-item label="维保模式" prop="maintainType">
<!-- <el-form-item label="维保模式" prop="maintainType">
<el-select v-model="formData.maintainType" placeholder="请选择维保模式">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.ERP_MAINTAIN_TYPE)"
@ -57,7 +65,7 @@
class="!w-1/1"
placeholder="输入维保周期"
/>
</el-form-item>
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />

@ -23,7 +23,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="预期寿命" prop="useTime">
<!-- <el-form-item label="预期寿命" prop="useTime">
<el-input-number
v-model="formData.useTime"
:min="0"
@ -31,7 +31,7 @@
class="!w-1/1"
placeholder="输入预期寿命(小时)"
/>
</el-form-item>
</el-form-item> -->
<el-form-item label="入库时间" prop="inTime">
<el-date-picker
v-model="formData.inTime"
@ -41,6 +41,14 @@
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<template #label>
<span>
状态
<el-tooltip content="来源:数据字典-模具状态" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
</template>
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.ERP_MOLD_STATUS)"

@ -10,24 +10,23 @@
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="模具编码" align="center" prop="code" width="150px"/>
<el-table-column label="模具编码" align="center" prop="code"/>
<el-table-column label="模具名称" align="left" prop="name" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="机台" align="center" prop="machineId" />
<el-table-column label="使用时间/小时" align="center" prop="useTime" />
<!-- <el-table-column label="机台" align="center" prop="machineId" /> -->
<el-table-column label="已使用次数" align="center" prop="useTime" />
<el-table-column
label="入库时间"
align="center"
prop="inTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_MOLD_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="模具图片" align="center" prop="images" />
<!-- <el-table-column label="模具图片" align="center" prop="images" /> -->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="是否启用" align="center" prop="isEnable" >
<template #default="scope">
@ -44,14 +43,14 @@
/>
<el-table-column label="操作" align="center" fixed="right" width="150px">
<template #default="scope">
<el-button
<!-- <el-button
link
type="success"
@click="openRecordForm('create', scope.row.id, scope.row.brandId)"
v-hasPermi="['mes:mold-record:update']"
>
维保
</el-button>
</el-button> -->
<el-button
link
type="primary"

@ -50,9 +50,8 @@
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="维保模式" prop="maintainType">
</el-form-item>
<!-- <el-form-item label="维保模式" prop="maintainType">
<el-select
v-model="queryParams.maintainType"
placeholder="请选择维保模式"
@ -66,8 +65,7 @@
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
@ -112,21 +110,21 @@
highlight-current-row
@current-change="handleCurrentChange"
>
<el-table-column label="型号编码" align="center" prop="code" width="150px" />
<el-table-column label="型号名称" align="left" prop="name" width="130px"/>
<el-table-column label="型号编码" align="center" prop="code"/>
<el-table-column label="型号名称" align="left" prop="name"/>
<el-table-column label="规格" align="center" prop="moldType" />
<el-table-column label="工序" align="center" prop="orgType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_ORG_TYPE" :value="scope.row.orgType" />
</template>
</el-table-column>
<el-table-column label="预期寿命/h" align="center" prop="useTime" />
<el-table-column label="维保模式" align="center" prop="maintainType">
<el-table-column label="预期寿命/" align="center" prop="useTime" />
<!-- <el-table-column label="维保模式" align="center" prop="maintainType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_MAINTAIN_TYPE" :value="scope.row.maintainType" />
</template>
</el-table-column>
<el-table-column label="维保周期" align="center" prop="maintainTime" />
<el-table-column label="维保周期" align="center" prop="maintainTime" /> -->
<el-table-column label="出模数" align="center" prop="moldSize" />
<el-table-column label="备注" align="center" prop="remark" />

@ -72,8 +72,8 @@
:default-expand-all="isExpandAll"
v-if="refreshTable"
>
<el-table-column label="编码" align="center" prop="code" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="分类编码" align="center" prop="code" />
<el-table-column label="分类名称" align="center" prop="name" />
<el-table-column label="排序" align="center" prop="sort" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">

@ -10,15 +10,15 @@
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form-item label="编码" prop="barCode">
<el-input v-model="formData.barCode" placeholder="请输入编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="条码" prop="barCode">
<el-input v-model="formData.barCode" placeholder="请输入条码" />
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
</el-col>
</el-col>
<el-col :span="12">
<el-form-item label="分类" prop="categoryId">
<el-tree-select

@ -55,14 +55,12 @@
<el-tab-pane label="办公室用品" name="6" />
<el-tab-pane label="其他" name="0" />
</el-tabs>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="码" align="center" prop="barCode" />
<el-table-column label="码" align="center" prop="barCode" />
<el-table-column label="名称" align="left" prop="name" width="220px"/>
<el-table-column label="规格" align="center" prop="standard" />
<el-table-column label="分类" align="center" prop="categoryName" />
<el-table-column label="分类" align="center" prop="subCategoryName" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />

@ -7,8 +7,37 @@
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="单位名字" prop="name">
<el-input v-model="formData.name" placeholder="请输入单位名字" />
<el-form-item label="单位名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入单位名称" />
</el-form-item>
<el-form-item label="是否主单位" prop="primaryFlag">
<el-radio-group v-model="formData.primaryFlag">
<el-radio
v-for="dict in getStrDictOptions(DICT_TYPE.PRIMARY_FLAG)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="关联主单位" v-if="formData.primaryFlag === 'N'" prop="primaryId">
<el-select
v-model="formData.primaryId"
clearable
filterable
placeholder="请选择主单位"
>
<el-option
v-for="item in unitList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="换算比例" v-if="formData.primaryFlag === 'N'" prop="changeRate">
<el-input-number v-model="formData.changeRate" controls-position="right" :step="0.1" placeholder="请输入换算比例" class="!w-1000px"/>
</el-form-item>
<el-form-item label="单位状态" prop="status">
<el-radio-group v-model="formData.status">
@ -29,8 +58,8 @@
</Dialog>
</template>
<script setup lang="ts">
import { ProductUnitApi } from '@/api/erp/product/unit'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { ProductUnitApi,ProductUnitVO } from '@/api/erp/product/unit'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
import { CommonStatusEnum } from '@/utils/constants'
/** ERP 产品单位表单 */
@ -39,6 +68,7 @@ defineOptions({ name: 'ProductUnitForm' })
const { t } = useI18n() //
const message = useMessage() //
const unitList = ref<ProductUnitVO[]>([]) //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
@ -46,11 +76,15 @@ const formType = ref('') // 表单的类型create - 新增update - 修改
const formData = ref({
id: undefined,
name: undefined,
status: undefined
status: undefined,
primaryFlag: undefined,
primaryId: undefined,
changeRate: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '单位名字不能为空', trigger: 'blur' }],
status: [{ required: true, message: '单位状态不能为空', trigger: 'blur' }]
status: [{ required: true, message: '单位状态不能为空', trigger: 'blur' }],
primaryFlag: [{ required: true, message: '是否主单位不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
@ -101,8 +135,16 @@ const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
primaryFlag: undefined,
primaryId: undefined,
changeRate: undefined,
status: CommonStatusEnum.ENABLE
}
formRef.value?.resetFields()
}
/** 初始化 **/
onMounted(async () => {
unitList.value = await ProductUnitApi.getProductUnitList()
})
</script>

@ -1,6 +1,4 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
@ -10,10 +8,10 @@
:inline="true"
label-width="68px"
>
<el-form-item label="单位名" prop="name">
<el-form-item label="单位名" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入单位名"
placeholder="请输入单位名"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
@ -61,7 +59,10 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="名字" align="center" prop="name" />
<el-table-column label="单位名字" align="center" prop="name" />
<el-table-column label="是否主单位" align="center" prop="primaryFlag" />
<!-- <el-table-column label="关联主单位" align="center" prop="primaryId" /> -->
<el-table-column label="与主单位换算比例" align="center" prop="changeRate" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />

@ -13,7 +13,7 @@
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="formData.deviceName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<!-- <el-form-item label="设备类型" prop="deviceType">
<el-select v-model="formData.deviceType" placeholder="请选择设备类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_DEVICE_TYPE)"
@ -22,8 +22,8 @@
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
</el-form-item> -->
<!-- <el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_GATEWAY_STATUS)"
@ -33,8 +33,8 @@
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="读主题" prop="readTopic">
</el-form-item> -->
<!-- <el-form-item label="读主题" prop="readTopic">
<el-input v-model="formData.readTopic" placeholder="请输入读主题" />
</el-form-item>
<el-form-item label="写主题" prop="writeTopic">
@ -42,14 +42,40 @@
</el-form-item>
<el-form-item label="网关" prop="gatewayId">
<el-input v-model="formData.gatewayId" placeholder="请输入网关" />
</el-form-item>
</el-form-item> -->
<!-- <el-form-item label="设备品牌id" prop="deviceBrandId">-->
<!-- <el-input v-model="formData.deviceBrandId" placeholder="请输入设备品牌id" />-->
<!-- </el-form-item>-->
<el-form-item label="离线间隔" prop="offLineDuration">
<!-- <el-form-item label="离线间隔" prop="offLineDuration">
<el-input v-model="formData.offLineDuration" placeholder="请输入离线间隔" />
</el-form-item> -->
<el-form-item label="模型选择" prop="deviceModelId">
<el-select
v-model="formData.deviceModelId"
clearable
filterable
placeholder="请选择设备模型"
>
<el-option
v-for="item in modelList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="采集周期/s" prop="sampleCycle">
<el-input v-model="formData.sampleCycle" placeholder="请输入采集周期" />
</el-form-item>
<el-form-item label="端点URL" prop="url">
<el-input v-model="formData.url" placeholder="请输入端点URL" />
</el-form-item>
<el-form-item label="用户名" prop="username">
<el-input v-model="formData.username" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="formData.password" placeholder="请输入密码" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
@ -74,6 +100,7 @@
<script setup lang="ts">
import { getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
import { DeviceApi, DeviceVO } from '@/api/iot/device'
import {DeviceModelApi, DeviceModelVO} from "@/api/iot/devicemodel";
/** 物联设备 表单 */
defineOptions({ name: 'DeviceForm' })
@ -81,6 +108,7 @@ defineOptions({ name: 'DeviceForm' })
const { t } = useI18n() //
const message = useMessage() //
const modelList = ref<DeviceModelVO[]>([]) //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
@ -98,12 +126,17 @@ const formData = ref({
offLineDuration: undefined,
lastOnlineTime: undefined,
remark: undefined,
isEnable: undefined
isEnable: undefined,
deviceModelId: undefined,
protocol: undefined,
sampleCycle: undefined,
url: undefined,
username: undefined,
password: undefined,
})
const formRules = reactive({
deviceCode: [{ required: true, message: '设备编码不能为空', trigger: 'blur' }],
deviceName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
@ -165,8 +198,14 @@ const resetForm = () => {
offLineDuration: undefined,
lastOnlineTime: undefined,
remark: undefined,
isEnable: undefined
isEnable: true
}
formRef.value?.resetFields()
}
/** 初始化 **/
onMounted(async () => {
modelList.value = await DeviceModelApi.getDeviceModelList()
})
</script>

@ -27,7 +27,7 @@
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-form-item label="连接状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择状态"
@ -43,16 +43,6 @@
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
@ -99,22 +89,28 @@
@current-change="handleCurrentChange"
>
<el-table-column label="设备编号" align="left" prop="deviceCode" width="150px"/>
<el-table-column label="设备名称" align="left" prop="deviceName" width="150px"/>
<el-table-column label="设备类型" align="left" prop="deviceType" width="150px">
<template #default="scope">
<el-table-column label="设备名称" align="left" prop="deviceName" width="200px"/>
<!-- <el-table-column label="设备类型" align="left" prop="deviceType" width="150px"> -->
<!-- <template #default="scope">
<dict-tag :type="DICT_TYPE.IOT_DEVICE_TYPE" :value="scope.row.deviceType" />
</template>
</el-table-column> -->
<el-table-column label="通讯协议" align="left" prop="protocol" width="200px">
<template #default="scope">
<dict-tag :type="DICT_TYPE.IOT_PROTOCOL" :value="scope.row.procotol" />
</template>
</el-table-column>
<el-table-column label="采集周期" align="left" prop="sampleCycle" width="150px"/>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.IOT_GATEWAY_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="读主题" align="center" prop="readTopic" />
<!-- <el-table-column label="读主题" align="center" prop="readTopic" />
<el-table-column label="写主题" align="center" prop="writeTopic" />
<el-table-column label="网关id" align="center" prop="gatewayId" />
<el-table-column label="网关id" align="center" prop="gatewayId" /> -->
<!-- <el-table-column label="设备品牌id" align="center" prop="deviceBrandId" />-->
<el-table-column label="离线间隔" align="center" prop="offLineDuration" />
<!-- <el-table-column label="离线间隔" align="center" prop="offLineDuration" /> -->
<el-table-column
label="最后上线时间"
align="center"
@ -123,13 +119,13 @@
width="180px"
/>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
<!-- <el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="170px"
/>
/> -->
<el-table-column label="是否启用" align="center" prop="isEnable" fixed="right">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.isEnable" />

@ -0,0 +1,103 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="分类编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入分类编码" />
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入分类名称" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { DeviceAttributeTypeApi, DeviceAttributeTypeVO } from '@/api/iot/deviceattributetype'
/** 采集点分类 表单 */
defineOptions({ name: 'DeviceAttributeTypeForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
name: undefined,
remark: undefined,
})
const formRules = reactive({
code: [{ required: true, message: '分类编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await DeviceAttributeTypeApi.getDeviceAttributeType(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as DeviceAttributeTypeVO
if (formType.value === 'create') {
await DeviceAttributeTypeApi.createDeviceAttributeType(data)
message.success(t('common.createSuccess'))
} else {
await DeviceAttributeTypeApi.updateDeviceAttributeType(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
name: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,208 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="分类编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入分类编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入分类名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['iot:device-attribute-type:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['iot:device-attribute-type:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="分类编码" align="center" prop="code" />
<el-table-column label="分类名称" align="center" prop="name" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['iot:device-attribute-type:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['iot:device-attribute-type:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<DeviceAttributeTypeForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { DeviceAttributeTypeApi, DeviceAttributeTypeVO } from '@/api/iot/deviceattributetype'
import DeviceAttributeTypeForm from './DeviceAttributeTypeForm.vue'
/** 采集点分类 列表 */
defineOptions({ name: 'DeviceAttributeType' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<DeviceAttributeTypeVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await DeviceAttributeTypeApi.getDeviceAttributeTypePage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await DeviceAttributeTypeApi.deleteDeviceAttributeType(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await DeviceAttributeTypeApi.exportDeviceAttributeType(queryParams)
download.excel(data, '采集点分类.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -0,0 +1,117 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="模型编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入模型编码" />
</el-form-item>
<el-form-item label="模型名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模型名称" />
</el-form-item>
<el-form-item label="通讯协议" prop="protocol">
<el-select v-model="formData.protocol" placeholder="请选择通讯协议">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_PROTOCOL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { DeviceModelApi, DeviceModelVO } from '@/api/iot/devicemodel'
/** 采集设备模型 表单 */
defineOptions({ name: 'DeviceModelForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
name: undefined,
protocol: undefined,
remark: undefined,
})
const formRules = reactive({
code: [{ required: true, message: '分类编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
protocol: [{ required: true, message: '通讯协议不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await DeviceModelApi.getDeviceModel(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as DeviceModelVO
if (formType.value === 'create') {
await DeviceModelApi.createDeviceModel(data)
message.success(t('common.createSuccess'))
} else {
await DeviceModelApi.updateDeviceModel(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
name: undefined,
protocol: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,162 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="点位编码" prop="attributeCode">
<el-input v-model="formData.attributeCode" placeholder="请输入点位编码" />
</el-form-item>
<el-form-item label="点位名称" prop="attributeName">
<el-input v-model="formData.attributeName" placeholder="请输入点位名称" />
<el-form-item label="点位类型" prop="attributeType">
<el-select
v-model="formData.attributeType"
clearable
filterable
placeholder="请选择点位类型"
class="!w-180px"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item label="数据类型" prop="dataType">
<el-select v-model="formData.dataType" placeholder="请选择数据类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_DEVICE_DATA_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="寄存器地址" prop="address">
<el-input v-model="formData.address" placeholder="请输入寄存器地址" />
</el-form-item>
<el-form-item label="单位" prop="dataUnit">
<el-select v-model="formData.dataUnit" placeholder="请选择单位">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_DEVICE_ATTRIBUTE_UNIT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="倍率" prop="ratio">
<el-input v-model="formData.ratio" placeholder="请输入倍率" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { DeviceModelAttributeApi, DeviceModelAttributeVO } from '@/api/iot/devicemodelattribute'
/** 采集设备模型-点位管理 表单 */
defineOptions({ name: 'DeviceModelAttributeForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
attributeCode: undefined,
attributeName: undefined,
attributeType: undefined,
dataType: undefined,
address: undefined,
dataUnit: undefined,
ratio: undefined,
remark: undefined,
deviceModelId: undefined,
})
const formRules = reactive({
attributeCode: [{ required: true, message: '点位编码不能为空', trigger: 'blur' }],
attributeName: [{ required: true, message: '点位名称不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id: number,modelId:number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
formData.value.deviceModelId = modelId
console.log('formData.value.deviceModelId',formData.value.deviceModelId)
//
if (id) {
formLoading.value = true
try {
formData.value = await DeviceModelAttributeApi.getDeviceModelAttribute(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value
if (formType.value === 'create') {
await DeviceModelAttributeApi.createDeviceModelAttribute(data)
message.success(t('common.createSuccess'))
} else {
await DeviceModelAttributeApi.updateDeviceModelAttribute(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
attributeCode: undefined,
attributeName: undefined,
attributeType: undefined,
dataType: undefined,
address: undefined,
dataUnit: undefined,
ratio: undefined,
remark: undefined,
deviceModelId: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,269 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="100px"
>
<el-form-item label="点位编码" prop="attributeCode">
<el-input
v-model="queryParams.attributeCode"
placeholder="请输入点位编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="点位名称" prop="attributeName">
<el-input
v-model="queryParams.attributeName"
placeholder="请输入点位名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="点位类型" prop="attributeType">
<el-select
v-model="queryParams.attributeType"
clearable
filterable
placeholder="请选择"
class="!w-240px"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="寄存器地址" prop="address">
<el-input
v-model="queryParams.address"
placeholder="请输入寄存器地址"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['iot:device-model:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['iot:device-model-attribute:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="点位编码" align="center" prop="attributeCode" />
<el-table-column label="点位名称" align="center" prop="attributeName" />
<el-table-column label="点位类型" align="center" prop="attributeType" />
<el-table-column label="数据类型" align="center" prop="dataType" />
<el-table-column label="寄存器地址" align="center" prop="address" />
<el-table-column label="单位" align="center" prop="dataUnit" />
<el-table-column label="倍率" align="center" prop="ratio" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="采集设备模型id" align="center" prop="deviceModelId" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['iot:device-model-attribute:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['iot:device-model-attribute:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<DeviceModelAttributeForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { DeviceModelAttributeApi, DeviceModelAttributeVO } from '@/api/iot/devicemodelattribute'
import DeviceModelAttributeForm from './DeviceModelAttributeForm.vue'
import {DeviceAttributeTypeApi, DeviceAttributeTypeVO} from "@/api/iot/deviceattributetype";
const props = defineProps<{
id?: number // id
}>()
const typeList = ref<DeviceAttributeTypeVO[]>([]) //
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(false) //
const list = ref<DeviceModelAttributeVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
id: undefined as unknown,
attributeCode: undefined,
attributeName: undefined,
attributeType: undefined,
dataType: undefined,
address: undefined,
dataUnit: undefined,
ratio: undefined,
remark: undefined,
deviceModelId: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 监听主表的关联字段的变化,加载对应的子表数据 */
watch(
() => props.id,
(val: number) => {
if (!val) {
return
}
queryParams.id = val
handleQuery()
},
{ immediate: true, deep: true }
)
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await DeviceModelAttributeApi.getDeviceModelAttributePage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
if (!props.id) {
return
}
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
if (!props.id) {
return
}
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
if (!props.id) {
message.error('请选择一个采集设备模型')
return
}
formRef.value.open(type, id,props.id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await DeviceModelAttributeApi.deleteDeviceModelAttribute(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await DeviceModelAttributeApi.exportDeviceModelAttribute(queryParams)
download.excel(data, '采集设备模型-点位管理.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(async () => {
typeList.value = await DeviceAttributeTypeApi.getDeviceAttributeTypeList()
// typeList.value = JSON.parse(JSON.stringify(await DeviceAttributeTypeApi.getDeviceAttributeTypePage(queryParams))).list
})
</script>

@ -0,0 +1,244 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="模型编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入模型编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模型名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入模型名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="通讯协议" prop="protocol">
<el-select
v-model="queryParams.protocol"
placeholder="请选择通讯协议"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_PROTOCOL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['iot:device-model:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['iot:device-model:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" highlight-current-row
@current-change="handleCurrentChange">
<el-table-column label="模型编码" align="center" prop="code" />
<el-table-column label="模型名称" align="center" prop="name" />
<el-table-column align="center" label="通讯协议" prop="protocol'" min-width="150">
<template #default="scope">
<dict-tag :type="DICT_TYPE.IOT_PROTOCOL" :value="scope.row.protocol" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['iot:device-model:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['iot:device-model:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 采集点列表 -->
<ContentWrap>
<ModelAttributeList :id="currentRow.id" />
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<DeviceModelForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { getStrDictOptions,DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { DeviceModelApi, DeviceModelVO } from '@/api/iot/devicemodel'
import DeviceModelForm from './DeviceModelForm.vue'
import ModelAttributeList from './components/ModelAttributeList.vue'
/** 采集设备模型 列表 */
defineOptions({ name: 'DeviceModel' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<DeviceModelVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
protocol: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await DeviceModelApi.getDeviceModelPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await DeviceModelApi.deleteDeviceModel(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await DeviceModelApi.exportDeviceModel(queryParams)
download.excel(data, '采集设备模型.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 选中行操作 */
const currentRow = ref({}) //
const handleCurrentChange = (row) => {
currentRow.value = row
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -1,5 +1,5 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200px">
<el-form
ref="formRef"
:model="formData"

@ -6,9 +6,9 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="80px"
>
<el-form-item label="" prop="code">
<el-form-item label="BOM编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入BOM编码"
@ -18,8 +18,8 @@
/>
</el-form-item>
<el-form-item label="" prop="productId">
<el-select v-model="queryParams.productId" @change="handleQuery" clearable filterable placeholder="请选择" class="!w-240px">
<el-form-item label="产品" prop="productId">
<el-select v-model="queryParams.productId" @change="handleQuery" clearable filterable placeholder="请选择产品" class="!w-240px">
<el-option
v-for="item in productList"
:key="item.id"
@ -29,7 +29,7 @@
</el-select>
</el-form-item>
<el-form-item label="" prop="remark">
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
@ -38,7 +38,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="" prop="isEnable">
<el-form-item label="开启状态" prop="isEnable">
<el-select
v-model="queryParams.isEnable"
placeholder="请选择是否启用"
@ -92,7 +92,7 @@
</el-tabs>
</template>
</el-table-column>
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="BOM编码" align="center" prop="code" />
<el-table-column label="BOM版本" align="center" prop="version" />
<el-table-column label="产品" align="center" prop="productName" />

@ -9,40 +9,44 @@
>
<el-row>
<el-col :span="12">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form-item label="编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="编码" prop="code">
<el-input v-model="formData.code" placeholder="" />
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="设备类型" prop="deviceType">
<el-radio-group v-model="formData.deviceType">
<el-radio
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ENERGY_DEVICE_TYPE)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="能耗类型" prop="deviceTypeId">
<el-select
v-model="formData.deviceTypeId"
@change="handleQuery"
placeholder="请选择能耗类型"
clearable
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="抄表周期cron" prop="checkCron">
<el-input v-model="formData.checkCron" placeholder="" />
<el-form-item label="单位" prop="unitName">
<el-input disabled v-model="formData.unitName" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="单位" prop="unitName">
<el-input v-model="formData.unitName" placeholder="" />
<el-form-item label="抄表周期cron" prop="checkCron">
<el-input v-model="formData.checkCron" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -59,6 +63,18 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="所属区域" prop="orgName">
<el-input v-model="formData.orgName" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计算规则" prop="rules">
<el-input v-model="formData.rules" placeholder="" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form-item label="信息资料" prop="info">
<Editor v-model="formData.info" height="250px" />
@ -72,6 +88,7 @@
<script setup lang="ts">
import {getStrDictOptions, DICT_TYPE, getBoolDictOptions} from '@/utils/dict'
import { EnergyDeviceApi, EnergyDeviceVO } from '@/api/mes/energydevice'
import {EnergyTypeApi, EnergyTypeVO} from "@/api/mes/energytype";
/** 能源设备 表单 */
defineOptions({ name: 'EnergyDeviceForm' })
@ -79,6 +96,7 @@ defineOptions({ name: 'EnergyDeviceForm' })
const { t } = useI18n() //
const message = useMessage() //
const typeList = ref<EnergyTypeVO[]>([]) //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
@ -87,17 +105,20 @@ const formData = ref({
id: undefined,
name: undefined,
code: undefined,
deviceType: undefined,
deviceTypeId: undefined,
deviceTypeName: undefined,
info: undefined,
checkCron: undefined,
lastCheckTime: undefined,
lastCheckValue: undefined,
unitName: undefined,
isEnable: undefined
isEnable: undefined,
orgName: undefined,
rules: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
code: [{ required: true, message: '设备编码不能为空', trigger: 'blur' }],
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
@ -129,6 +150,7 @@ const submitForm = async () => {
formLoading.value = true
try {
const data = formData.value as unknown as EnergyDeviceVO
data.deviceTypeName = typeList.value.find(item => item.id === data.deviceTypeId)?.name
if (formType.value === 'create') {
await EnergyDeviceApi.createEnergyDevice(data)
message.success(t('common.createSuccess'))
@ -150,7 +172,8 @@ const resetForm = () => {
id: undefined,
name: undefined,
code: undefined,
deviceType: '电表',
deviceTypeId: undefined,
deviceTypeName: undefined,
info: undefined,
checkCron: undefined,
lastCheckTime: undefined,
@ -160,4 +183,14 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
/** 初始化 **/
onMounted(async () => {
typeList.value = await EnergyTypeApi.getEnergyTypeList()
})
/** 下拉框 */
const handleQuery = () => {
formData.value.unitName = typeList.value.find(item => item.id === formData.value.deviceTypeId)?.unit
}
</script>

@ -17,8 +17,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-form-item label="能耗类型" prop="deviceType">
<el-select
v-model="queryParams.deviceType"
placeholder="请选择设备类型"
@ -26,14 +25,13 @@
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ENERGY_DEVICE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -70,12 +68,12 @@
>
<el-table-column label="编码" align="center" prop="code" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="设备类型" align="center" prop="deviceType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_ENERGY_DEVICE_TYPE" :value="scope.row.deviceType" />
</template>
</el-table-column>
<el-table-column label="能耗类型" align="center" prop="deviceTypeName" />
<el-table-column label="所属区域" align="center" prop="orgName" />
<el-table-column label="计算规则" align="center" prop="rules" />
<el-table-column label="抄表周期" align="center" prop="checkCron" />
<el-table-column label="最后抄表值" align="center" prop="lastCheckValue" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column
label="最后抄表时间"
align="center"
@ -83,15 +81,13 @@
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="最后抄表值" align="center" prop="lastCheckValue" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="设备资料" align="center" prop="info" />
<!-- <el-table-column label="设备资料" align="center" prop="info" /> -->
<el-table-column label="是否启用" align="center" prop="isEnable">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.isEnable" />
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="200px">
<el-table-column label="操作" fixed="right" align="center" width="250px">
<template #default="scope">
<el-button
link
@ -164,6 +160,7 @@ import ResetForm from './ResetForm.vue'
import EnergyDeviceCheckRecordList from './components/EnergyDeviceCheckRecordList.vue'
import EnergyDeviceCheckRecordForm
from "@/views/mes/energydevice/components/EnergyDeviceCheckRecordForm.vue";
import {EnergyTypeApi, EnergyTypeVO} from "@/api/mes/energytype";
/** 能源设备 列表 */
defineOptions({ name: 'EnergyDevice' })
@ -171,6 +168,7 @@ defineOptions({ name: 'EnergyDevice' })
const message = useMessage() //
const { t } = useI18n() //
const typeList = ref<EnergyTypeVO[]>([]) //
const loading = ref(true) //
const list = ref<EnergyDeviceVO[]>([]) //
const total = ref(0) //
@ -263,7 +261,8 @@ const handleCurrentChange = (row) => {
}
/** 初始化 **/
onMounted(() => {
onMounted(async () => {
typeList.value = await EnergyTypeApi.getEnergyTypeList()
getList()
})
@ -273,4 +272,5 @@ const newRecordForm = (id: number, deviceType: string) => {
//type: string, id?: number, deviceId: number, deviceType: string
newRecordFormRef.value.open("create", null, id, deviceType)
}
</script>

@ -1,7 +1,9 @@
<template>
<!-- 列表 -->
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="抄表明细" name="first">
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
@ -36,7 +38,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<!-- <el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
@ -44,18 +46,10 @@
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:energy-device-check-record:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@ -68,14 +62,7 @@
</el-form-item>
<el-text>本页总差值{{erpNumberFormatter(totalDiffValue,3)}}</el-text>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="抄表明细" name="first">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" style="margin-top:20px">
<el-table-column label="能源设备" align="center" prop="deviceName" sortable/>
<el-table-column label="抄表值" align="center" prop="checkValue" />
<el-table-column label="差值" align="center" prop="diffValue" />
@ -116,7 +103,96 @@
/>
</el-tab-pane>
<el-tab-pane label="能源报表" name="second" >
能源报表
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="能源设备" prop="deviceId">
<el-select
v-model="queryParams.deviceId"
@change="handleQuery"
clearable
filterable
placeholder="请选择"
class="!w-180px"
>
<el-option
v-for="item in deviceList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="抄表时间" prop="checkTime">
<el-date-picker
v-model="queryParams.checkTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<!-- <el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> -->
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:energy-device-check-record:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
<el-text>本页总差值{{erpNumberFormatter(totalDiffValue,3)}}</el-text>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" style="margin-top:20px">
<el-table-column label="编码" align="center" prop="code" />
<el-table-column label="名称" align="center" prop="name" sortable/>
<el-table-column label="能源类型" align="center" prop="deviceType" />
<el-table-column label="所属区域" align="center" prop="orgName" />
<el-table-column label="班次" align="center" prop="shift" />
<el-table-column
label="开始时间"
align="center"
prop="startTime"
:formatter="dateFormatter"
width="170px"
sortable
/>
<el-table-column
label="结束时间"
align="center"
prop="endTime"
:formatter="dateFormatter"
width="170px"
sortable
/>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-form>
</el-tab-pane>
</el-tabs>

@ -0,0 +1,124 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="能耗类型编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入能耗类型编码" />
</el-form-item>
<el-form-item label="能耗类型名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入能耗类型名称" />
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="formData.unit" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="是否启用" prop="isEnable">
<el-radio-group v-model="formData.isEnable">
<el-radio
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import {DICT_TYPE, getBoolDictOptions} from '@/utils/dict'
import { EnergyTypeApi, EnergyTypeVO } from '@/api/mes/energytype'
/** 能耗类型 表单 */
defineOptions({ name: 'EnergyTypeForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
name: undefined,
unit: undefined,
isEnable: undefined,
remark: undefined,
})
const formRules = reactive({
code: [{ required: true, message: '能耗类型编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '能耗类型名称不能为空', trigger: 'blur' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await EnergyTypeApi.getEnergyType(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as EnergyTypeVO
if (formType.value === 'create') {
await EnergyTypeApi.createEnergyType(data)
message.success(t('common.createSuccess'))
} else {
await EnergyTypeApi.updateEnergyType(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
name: undefined,
unit: undefined,
isEnable: true,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,218 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="100px"
>
<el-form-item label="能耗类型编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入能耗类型编码"
clearable
@keyup.enter="handleQuery"
class="!w-300px"
/>
</el-form-item>
<el-form-item label="能耗类型名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入能耗类型名称"
clearable
@keyup.enter="handleQuery"
class="!w-300px"
/>
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input
v-model="queryParams.unit"
placeholder="请输入单位"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:energy-type:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:energy-type:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="能耗类型编码" align="center" prop="code" />
<el-table-column label="能耗类型名称" align="center" prop="name" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="是否启用" align="center" prop="isEnable">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.isEnable" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:energy-type:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:energy-type:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<EnergyTypeForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { EnergyTypeApi, EnergyTypeVO } from '@/api/mes/energytype'
import EnergyTypeForm from './EnergyTypeForm.vue'
/** 能耗类型 列表 */
defineOptions({ name: 'EnergyType' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<EnergyTypeVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
unit: undefined,
isEnable: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await EnergyTypeApi.getEnergyTypePage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await EnergyTypeApi.deleteEnergyType(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await EnergyTypeApi.exportEnergyType(queryParams)
download.excel(data, '能耗类型.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -0,0 +1,145 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="领模单号" prop="orderId">
<el-input v-model="formData.orderId" placeholder="请输入领模单号" />
</el-form-item>
<el-form-item label="模具编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入模具编码" />
</el-form-item>
<el-form-item label="模具名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模具名称" />
</el-form-item>
<el-form-item label="状态" prop="state">
<el-input v-model="formData.state" placeholder="请输入状态" />
</el-form-item>
<el-form-item label="领模人" prop="person">
<el-input v-model="formData.person" placeholder="请输入领模人" />
</el-form-item>
<el-form-item label="设备id" prop="deviceId">
<el-input v-model="formData.deviceId" placeholder="请输入设备id" />
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="formData.deviceName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="领取时间" prop="getTime">
<el-date-picker
v-model="formData.getTime"
type="date"
value-format="x"
placeholder="选择领取时间"
/>
</el-form-item>
<el-form-item label="库管员" prop="principal">
<el-input v-model="formData.principal" placeholder="请输入库管员" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { MoldGetApi, MoldGetVO } from '@/api/mes/moldget'
/** 模具管理-领模申请 表单 */
defineOptions({ name: 'MoldGetForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
deviceId: undefined,
deviceName: undefined,
getTime: undefined,
principal: undefined,
remark: undefined,
})
const formRules = reactive({
orderId: [{ required: true, message: '领模单号不能为空', trigger: 'blur' }],
code: [{ required: true, message: '模具编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '模具名称不能为空', trigger: 'blur' }],
state: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await MoldGetApi.getMoldGet(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as MoldGetVO
if (formType.value === 'create') {
await MoldGetApi.createMoldGet(data)
message.success(t('common.createSuccess'))
} else {
await MoldGetApi.updateMoldGet(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
deviceId: undefined,
deviceName: undefined,
getTime: undefined,
principal: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,294 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="领模单号" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入领模单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入模具编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入模具名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="状态" prop="state">
<el-input
v-model="queryParams.state"
placeholder="请输入状态"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="领模人" prop="person">
<el-input
v-model="queryParams.person"
placeholder="请输入领模人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="设备id" prop="deviceId">
<el-input
v-model="queryParams.deviceId"
placeholder="请输入设备id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.deviceName"
placeholder="请输入设备名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="领取时间" prop="getTime">
<el-date-picker
v-model="queryParams.getTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item label="库管员" prop="principal">
<el-input
v-model="queryParams.principal"
placeholder="请输入库管员"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:mold-get:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:mold-get:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="领模单号" align="center" prop="orderId" />
<el-table-column label="模具编码" align="center" prop="code" />
<el-table-column label="模具名称" align="center" prop="name" />
<el-table-column label="状态" align="center" prop="state" />
<el-table-column label="领模人" align="center" prop="person" />
<el-table-column label="设备id" align="center" prop="deviceId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column
label="领取时间"
align="center"
prop="getTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="库管员" align="center" prop="principal" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:mold-get:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:mold-get:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<MoldGetForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { MoldGetApi, MoldGetVO } from '@/api/mes/moldget'
import MoldGetForm from './MoldGetForm.vue'
/** 模具管理-领模申请 列表 */
defineOptions({ name: 'MoldGet' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<MoldGetVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
deviceId: undefined,
deviceName: undefined,
getTime: [],
principal: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await MoldGetApi.getMoldGetPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await MoldGetApi.deleteMoldGet(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await MoldGetApi.exportMoldGet(queryParams)
download.excel(data, '模具管理-领模申请.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -0,0 +1,110 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="名称 " prop="name">
<el-input v-model="formData.name" placeholder="请输入名称 " />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="关联项目id" prop="subjectId">
<el-input v-model="formData.subjectId" placeholder="请输入关联项目id" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { MoldRecordItemApi, MoldRecordItemVO } from '@/api/mes/moldrecorditem'
/** 维保方案 表单 */
defineOptions({ name: 'MoldRecordItemForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
name: undefined,
type: undefined,
subjectId: undefined,
remark: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '名称 不能为空', trigger: 'blur' }],
type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await MoldRecordItemApi.getMoldRecordItem(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as MoldRecordItemVO
if (formType.value === 'create') {
await MoldRecordItemApi.createMoldRecordItem(data)
message.success(t('common.createSuccess'))
} else {
await MoldRecordItemApi.updateMoldRecordItem(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
type: undefined,
subjectId: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,221 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="名称 " prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称 "
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select
v-model="queryParams.type"
placeholder="请选择类型"
clearable
class="!w-240px"
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="关联项目id" prop="subjectId">
<el-input
v-model="queryParams.subjectId"
placeholder="请输入关联项目id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:mold-record-item:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:mold-record-item:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="名称 " align="center" prop="name" />
<el-table-column label="类型" align="center" prop="type" />
<el-table-column label="关联项目id" align="center" prop="subjectId" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:mold-record-item:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:mold-record-item:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<MoldRecordItemForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { MoldRecordItemApi, MoldRecordItemVO } from '@/api/mes/moldrecorditem'
import MoldRecordItemForm from './MoldRecordItemForm.vue'
/** 维保方案 列表 */
defineOptions({ name: 'MoldRecordItem' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<MoldRecordItemVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
name: undefined,
type: undefined,
subjectId: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await MoldRecordItemApi.getMoldRecordItemPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await MoldRecordItemApi.deleteMoldRecordItem(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await MoldRecordItemApi.exportMoldRecordItem(queryParams)
download.excel(data, '维保方案.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -0,0 +1,135 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="领模单号" prop="orderId">
<el-input v-model="formData.orderId" placeholder="请输入领模单号" />
</el-form-item>
<el-form-item label="模具编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入模具编码" />
</el-form-item>
<el-form-item label="模具名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模具名称" />
</el-form-item>
<el-form-item label="状态" prop="state">
<el-input v-model="formData.state" placeholder="请输入状态" />
</el-form-item>
<el-form-item label="归还人" prop="person">
<el-input v-model="formData.person" placeholder="请输入归还人" />
</el-form-item>
<el-form-item label="入库时间" prop="returnTime">
<el-date-picker
v-model="formData.returnTime"
type="date"
value-format="x"
placeholder="选择入库时间"
/>
</el-form-item>
<el-form-item label="库管员" prop="principal">
<el-input v-model="formData.principal" placeholder="请输入库管员" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { MoldReturnApi, MoldReturnVO } from '@/api/mes/moldreturn'
/** 模具管理-模具入库 表单 */
defineOptions({ name: 'MoldReturnForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
returnTime: undefined,
principal: undefined,
remark: undefined,
})
const formRules = reactive({
orderId: [{ required: true, message: '领模单号不能为空', trigger: 'blur' }],
code: [{ required: true, message: '模具编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '模具名称不能为空', trigger: 'blur' }],
state: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await MoldReturnApi.getMoldReturn(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as MoldReturnVO
if (formType.value === 'create') {
await MoldReturnApi.createMoldReturn(data)
message.success(t('common.createSuccess'))
} else {
await MoldReturnApi.updateMoldReturn(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
returnTime: undefined,
principal: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,272 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="领模单号" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入领模单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入模具编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入模具名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="状态" prop="state">
<el-input
v-model="queryParams.state"
placeholder="请输入状态"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="归还人" prop="person">
<el-input
v-model="queryParams.person"
placeholder="请输入归还人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="入库时间" prop="returnTime">
<el-date-picker
v-model="queryParams.returnTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item label="库管员" prop="principal">
<el-input
v-model="queryParams.principal"
placeholder="请输入库管员"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:mold-return:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:mold-return:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="领模单号" align="center" prop="orderId" />
<el-table-column label="模具编码" align="center" prop="code" />
<el-table-column label="模具名称" align="center" prop="name" />
<el-table-column label="状态" align="center" prop="state" />
<el-table-column label="归还人" align="center" prop="person" />
<el-table-column
label="入库时间"
align="center"
prop="returnTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="库管员" align="center" prop="principal" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:mold-return:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:mold-return:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<MoldReturnForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { MoldReturnApi, MoldReturnVO } from '@/api/mes/moldreturn'
import MoldReturnForm from './MoldReturnForm.vue'
/** 模具管理-模具入库 列表 */
defineOptions({ name: 'MoldReturn' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<MoldReturnVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
returnTime: [],
principal: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await MoldReturnApi.getMoldReturnPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await MoldReturnApi.deleteMoldReturn(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await MoldReturnApi.exportMoldReturn(queryParams)
download.excel(data, '模具管理-模具入库.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -45,7 +45,15 @@
</template>
<el-input v-model="formData.sort" placeholder="请输入显示顺序" />
</el-form-item>
<el-form-item v-if="formData.orgClass == 'workplace' || formData.orgClass == 'process'" label="类型" prop="orgType">
<el-form-item v-if="formData.orgClass == 'workplace' || formData.orgClass == 'process'" prop="orgType">
<template #label>
<span>
工序
<el-tooltip content="来源:数据字典-工序" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
</template>
<el-select v-model="formData.orgType" @change="handleOrgTypeChange" placeholder="请选择类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)"
@ -55,18 +63,24 @@
/>
</el-select>
</el-form-item>
<el-form-item label="关联机台" prop="machineId">
<el-tree-select
<el-form-item label="关联设备" v-if="formData.orgClass == 'workplace'" prop="machineId">
<!-- <el-tree-select
v-model="formData.machineId"
:data="machineComponentTree"
:props="defaultProps"
check-strictly
default-expand-all
placeholder="请选择机台"
/>
/> -->
<el-select v-model="formData.machineId" placeholder="请选择设备">
<el-option
v-for="item in deviceList"
:key="item.id"
:label="item.deviceName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="组织状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
@ -93,6 +107,8 @@ import { defaultProps, handleTree } from '@/utils/tree'
import * as UserApi from "@/api/system/user";
import {WorkTeamApi} from "@/api/mes/workteam";
import {MachineComponentApi} from "@/api/mes/machine";
import {DeviceApi, DeviceVO} from "@/api/iot/device";
import {ZjTypeApi, ZjTypeVO} from "@/api/mes/zjtype";
/** 产线工位 表单 */
defineOptions({ name: 'OrganizationForm' })
@ -100,6 +116,8 @@ defineOptions({ name: 'OrganizationForm' })
const { t } = useI18n() //
const message = useMessage() //
// const deviceList = ref<DeviceVO[]>([]) //
const deviceList = ref<ZjTypeVO[]>([]) //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
@ -209,4 +227,11 @@ const getMachineComponentTree = async () => {
root.children = handleTree(data, 'id', 'parentId')
machineComponentTree.value.push(root)
}
/** 初始化 **/
onMounted(async () => {
//console.log("ssss")
deviceList.value = await DeviceApi.getDeviceList()
})
</script>

@ -13,29 +13,18 @@
<el-form-item label="组织名称" prop="name">
<el-input
v-model="queryParams.name"
class="!w-150px"
class="!w-240px"
clearable
placeholder="请输入组织名称"
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="关联机台" prop="machineId">
<el-input
v-model="queryParams.machineId"
class="!w-150px"
clearable
placeholder="请输入关联机台"
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="组织状态" prop="status">
<el-select
v-model="queryParams.status"
class="!w-150px"
class="!w-240px"
clearable
placeholder="请选择组织状态"
>

@ -8,6 +8,15 @@
:inline="true"
label-width="68px"
>
<el-form-item label="组织编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入组织编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="组织名称" prop="name">
<el-input
v-model="queryParams.name"
@ -31,26 +40,6 @@
/>
</el-form-item>
<el-form-item label="负责人" prop="workerUserId">
<el-input
v-model="queryParams.workerUserId"
placeholder="请输入负责人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="关联机台" prop="machineId">
<el-input
v-model="queryParams.machineId"
placeholder="请输入关联机台"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="组织状态" prop="status">
<el-select
v-model="queryParams.status"
@ -135,7 +124,7 @@
:default-expand-all="isExpandAll"
v-if="refreshTable"
>
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="组织编码" align="center" prop="code" />
<el-table-column label="组织名称" align="center" prop="name" />
<el-table-column label="显示顺序" align="center" prop="sort" />
@ -152,7 +141,7 @@
<dict-tag :type="DICT_TYPE.MES_ORG_CLASS" :value="scope.row.orgClass" />
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="orgType">
<el-table-column label="工序" align="center" prop="orgType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_ORG_TYPE" :value="scope.row.orgType" />
</template>
@ -215,6 +204,7 @@ const { t } = useI18n() // 国际化
const loading = ref(true) //
const list = ref<OrganizationVO[]>([]) //
const queryParams = reactive({
code: undefined,
name: undefined,
parentId: undefined,
sort: undefined,

@ -268,8 +268,7 @@ import {ProductApi, ProductVO} from "@/api/erp/product/product";
import {TaskApi, TaskVO} from "@/api/mes/task";
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
import Paigong from "./components/Paigong.vue";
import ItemRequisitionDetailList
from "@/views/mes/itemrequisition/components/ItemRequisitionDetailList.vue";
import ItemRequisitionDetailList from "@/views/mes/itemrequisition/components/ItemRequisitionDetailList.vue";
const productList = ref<ProductVO[]>([]) //

@ -10,7 +10,15 @@
<el-form-item label="班组名称" prop="teamName">
<el-input v-model="formData.teamName" placeholder="请输入班组名称" />
</el-form-item>
<el-form-item label="工序类型" prop="teamType">
<el-form-item prop="teamType">
<template #label>
<span>
工序
<el-tooltip content="来源:数据字典-工序" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
</template>
<el-radio-group v-model="formData.teamType">
<el-radio
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)"

@ -17,7 +17,15 @@
/>
</el-select>
</el-form-item>
<el-form-item label="角色" prop="userRole">
<el-form-item prop="userRole">
<template #label>
<span>
角色
<el-tooltip content="来源:数据字典-班组成员角色" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
</template>
<el-radio-group v-model="formData.userRole">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.MES_WORK_TEAM_USER_ROLE)"

@ -10,7 +10,7 @@
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="成员" align="center" prop="userName" />
<el-table-column label="角色" align="center" prop="userRole">
<template #default="scope">

@ -17,10 +17,10 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="工序类型" prop="teamType">
<el-form-item label="工序" prop="teamType">
<el-select
v-model="queryParams.teamType"
placeholder="请选择工序类型"
placeholder="请选择工序"
clearable
class="!w-240px"
>
@ -82,7 +82,7 @@
highlight-current-row
@current-change="handleCurrentChange"
>
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="班组名称" align="center" prop="teamName" />
<el-table-column label="组长" align="center" prop="teamLeaderName" />
<el-table-column label="班组类型" align="center" prop="groupType">
@ -95,7 +95,7 @@
<el-text>{{getHour(scope.row.startTime)+'-'+getHour(scope.row.endTime)}}</el-text>
</template>
</el-table-column>
<el-table-column label="工序类型" align="center" prop="teamType" sortable>
<el-table-column label="工序" align="center" prop="teamType" sortable>
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_ORG_TYPE" :value="scope.row.teamType" />
</template>

@ -0,0 +1,156 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="检验类型" prop="zjType">
<el-select
v-model="formData.zjType"
clearable
filterable
placeholder="请选择检验类型"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="作业方式" prop="tool">
<el-input v-model="formData.tool" placeholder="请输入作业方式" />
</el-form-item>
<el-form-item label="标准值" prop="standardVal">
<el-input v-model="formData.standardVal" placeholder="请输入标准值" />
</el-form-item>
<el-form-item label="上限值" prop="upperVal">
<el-input v-model="formData.upperVal" placeholder="请输入上限值" />
</el-form-item>
<el-form-item label="下限值" prop="lowerVal">
<el-input v-model="formData.lowerVal" placeholder="请输入下限值" />
</el-form-item>
<el-form-item label="单位" prop="unitId">
<el-select v-model="formData.unit" clearable placeholder="请选择单位" class="w-1/1">
<el-option
v-for="unit in unitList"
:key="unit.id"
:label="unit.name"
:value="unit.id"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ZjItemApi, ZjItemVO } from '@/api/mes/zjitem'
import {ZjTypeApi, ZjTypeVO} from "@/api/mes/zjtype";
import { ProductUnitApi, ProductUnitVO } from '@/api/erp/product/unit'
/** 质量管理-检验项目 表单 */
defineOptions({ name: 'ZjItemForm' })
const { t } = useI18n() //
const message = useMessage() //
const unitList = ref<ProductUnitVO[]>([]) //
const typeList = ref<ZjTypeVO[]>([]) //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
zjType: undefined,
name: undefined,
remark: undefined,
tool: undefined,
standardVal: undefined,
unit: undefined,
upperVal: undefined,
lowerVal: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
zjType: [{ required: true, message: '检验类型不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
typeList.value = await ZjTypeApi.getZjTypeList()
//
if (id) {
formLoading.value = true
try {
formData.value = await ZjItemApi.getZjItem(id)
} finally {
formLoading.value = false
}
}
//
unitList.value = await ProductUnitApi.getProductUnitSimpleList()
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ZjItemVO
if (formType.value === 'create') {
await ZjItemApi.createZjItem(data)
message.success(t('common.createSuccess'))
} else {
await ZjItemApi.updateZjItem(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
zjType: undefined,
name: undefined,
remark: undefined,
tool: undefined,
standardVal: undefined,
unit: undefined,
upperVal: undefined,
lowerVal: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,231 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="检验类型" prop="zjType">
<el-select
v-model="queryParams.zjType"
clearable
filterable
placeholder="请选择检验类型"
class="!w-240px"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:zj-item:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:zj-item:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="检验类型" align="center" prop="zjType" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="作业方式" align="center" prop="tool" />
<el-table-column label="标准值" align="center" prop="standardVal" />
<el-table-column label="上限值" align="center" prop="upperVal" />
<el-table-column label="下限值" align="center" prop="lowerVal" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:zj-item:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:zj-item:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ZjItemForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { ZjItemApi, ZjItemVO } from '@/api/mes/zjitem'
import ZjItemForm from './ZjItemForm.vue'
import {ZjTypeApi, ZjTypeVO} from "@/api/mes/zjtype";
/** 质量管理-检验项目 列表 */
defineOptions({ name: 'ZjItem' })
const message = useMessage() //
const { t } = useI18n() //
const typeList = ref<ZjTypeVO[]>([]) //
const loading = ref(true) //
const list = ref<ZjItemVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
zjType: undefined,
name: undefined,
remark: undefined,
tool: undefined,
standardVal: undefined,
unit: undefined,
upperVal: undefined,
lowerVal: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ZjItemApi.getZjItemPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ZjItemApi.deleteZjItem(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ZjItemApi.exportZjItem(queryParams)
download.excel(data, '质量管理-检验项目.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(async () => {
typeList.value = await ZjTypeApi.getZjTypeList()
getList()
})
</script>

@ -0,0 +1,117 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="抽检方式" prop="sampleMethod">
<el-input v-model="formData.sampleMethod" placeholder="请输入抽检方式" />
</el-form-item>
<el-form-item label="值" prop="val">
<el-input v-model="formData.val" placeholder="请输入值" />
</el-form-item>
<el-form-item label="关联项目" prop="item">
<el-input v-model="formData.item" placeholder="请输入关联项目" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ZjSchemaApi, ZjSchemaVO } from '@/api/mes/zjschema'
/** 检验方案 表单 */
defineOptions({ name: 'ZjSchemaForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
type: undefined,
name: undefined,
remark: undefined,
sampleMethod: undefined,
val: undefined,
item: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await ZjSchemaApi.getZjSchema(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ZjSchemaVO
if (formType.value === 'create') {
await ZjSchemaApi.createZjSchema(data)
message.success(t('common.createSuccess'))
} else {
await ZjSchemaApi.updateZjSchema(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
type: undefined,
name: undefined,
remark: undefined,
sampleMethod: undefined,
val: undefined,
item: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,242 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="类型" prop="type">
<el-select
v-model="queryParams.type"
placeholder="请选择类型"
clearable
class="!w-240px"
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="抽检方式" prop="sampleMethod">
<el-input
v-model="queryParams.sampleMethod"
placeholder="请输入抽检方式"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="值" prop="val">
<el-input
v-model="queryParams.val"
placeholder="请输入值"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="关联项目" prop="item">
<el-input
v-model="queryParams.item"
placeholder="请输入关联项目"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:zj-schema:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:zj-schema:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="类型" align="center" prop="type" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="抽检方式" align="center" prop="sampleMethod" />
<el-table-column label="值" align="center" prop="val" />
<el-table-column label="关联项目" align="center" prop="item" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:zj-schema:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:zj-schema:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ZjSchemaForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { ZjSchemaApi, ZjSchemaVO } from '@/api/mes/zjschema'
import ZjSchemaForm from './ZjSchemaForm.vue'
/** 检验方案 列表 */
defineOptions({ name: 'ZjSchema' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<ZjSchemaVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
type: undefined,
name: undefined,
remark: undefined,
sampleMethod: undefined,
val: undefined,
item: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ZjSchemaApi.getZjSchemaPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ZjSchemaApi.deleteZjSchema(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ZjSchemaApi.exportZjSchema(queryParams)
download.excel(data, '检验方案.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -0,0 +1,103 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入编码" />
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ZjTypeApi, ZjTypeVO } from '@/api/mes/zjtype'
/** 质量管理-检验类型 表单 */
defineOptions({ name: 'ZjTypeForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
name: undefined,
remark: undefined,
})
const formRules = reactive({
code: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await ZjTypeApi.getZjType(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ZjTypeVO
if (formType.value === 'create') {
await ZjTypeApi.createZjType(data)
message.success(t('common.createSuccess'))
} else {
await ZjTypeApi.updateZjType(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
name: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,209 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:zj-type:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:zj-type:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="编码" align="center" prop="code" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:zj-type:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:zj-type:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ZjTypeForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { ZjTypeApi, ZjTypeVO } from '@/api/mes/zjtype'
import ZjTypeForm from './ZjTypeForm.vue'
/** 质量管理-检验类型 列表 */
defineOptions({ name: 'ZjType' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<ZjTypeVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ZjTypeApi.getZjTypePage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ZjTypeApi.deleteZjType(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ZjTypeApi.exportZjType(queryParams)
download.excel(data, '质量管理-检验类型.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -7,12 +7,12 @@
:rules="formRules"
label-width="80px"
>
<el-form-item label="岗位标题" prop="name">
<el-input v-model="formData.name" placeholder="请输入岗位标题" />
</el-form-item>
<el-form-item label="岗位编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入岗位编码" />
</el-form-item>
<el-form-item label="岗位名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入岗位名称" />
</el-form-item>
<el-form-item label="岗位顺序" prop="sort">
<el-input v-model="formData.sort" placeholder="请输入岗位顺序" />
</el-form-item>

@ -63,9 +63,8 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="岗位编号" align="center" prop="id" />
<el-table-column label="岗位名称" align="center" prop="name" />
<el-table-column label="岗位编码" align="center" prop="code" />
<el-table-column label="岗位名称" align="center" prop="name" />
<el-table-column label="岗位顺序" align="center" prop="sort" />
<el-table-column label="岗位备注" align="center" prop="remark" />
<el-table-column label="状态" align="center" prop="status">

@ -7,12 +7,12 @@
:rules="formRules"
label-width="80px"
>
<el-form-item label="角色编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入角色编码" />
</el-form-item>
<el-form-item label="角色名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-input v-model="formData.code" placeholder="请输入角色标识" />
</el-form-item>
<el-form-item label="显示顺序" prop="sort">
<el-input v-model="formData.sort" placeholder="请输入显示顺序" />
</el-form-item>

@ -1,7 +1,4 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
@ -11,24 +8,25 @@
class="-mb-15px"
label-width="68px"
>
<el-form-item label="角色名称" prop="name">
<el-form-item label="角色编码" prop="code">
<el-input
v-model="queryParams.name"
v-model="queryParams.code"
class="!w-240px"
clearable
placeholder="请输入角色名称"
placeholder="请输入角色编码"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-form-item label="角色名称" prop="name">
<el-input
v-model="queryParams.code"
v-model="queryParams.name"
class="!w-240px"
clearable
placeholder="请输入角色标识"
placeholder="请输入角色名称"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" class="!w-240px" clearable placeholder="请选择状态">
<el-option
@ -85,14 +83,13 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column align="center" label="角色编号" prop="id" />
<el-table-column align="center" label="角色编码" prop="code" />
<el-table-column align="center" label="角色名称" prop="name" />
<el-table-column label="角色类型" align="center" prop="type">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column align="center" label="角色标识" prop="code" />
<el-table-column align="center" label="显示顺序" prop="sort" />
<el-table-column align="center" label="备注" prop="remark" />
<el-table-column align="center" label="状态" prop="status">

@ -7,10 +7,27 @@
:rules="formRules"
label-width="80px"
>
<el-row>
<el-col :span="12">
<el-form-item v-if="formData.id === undefined" label="用户名称" prop="username">
<el-input v-model="formData.username" placeholder="请输入用户名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="formData.id === undefined" label="用户密码" prop="password">
<el-input
v-model="formData.password"
placeholder="请输入用户密码"
show-password
type="password"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickname">
<el-input v-model="formData.nickname" placeholder="请输入用户昵称" />
<el-form-item label="工号" prop="nickname">
<el-input v-model="formData.nickname" placeholder="请输入工号" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -38,23 +55,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="formData.id === undefined" label="用户名称" prop="username">
<el-input v-model="formData.username" placeholder="请输入用户名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="formData.id === undefined" label="用户密码" prop="password">
<el-input
v-model="formData.password"
placeholder="请输入用户密码"
show-password
type="password"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户性别">
@ -129,7 +129,7 @@ const formData = ref({
})
const formRules = reactive<FormRules>({
username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
nickname: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
nickname: [{ required: true, message: '工号不能为空', trigger: 'blur' }],
password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
email: [
{

@ -1,8 +1,4 @@
<template>
<el-row :gutter="20">
<!-- 左侧部门树 -->
<el-col :span="4" :xs="24">
@ -20,6 +16,15 @@
:inline="true"
label-width="68px"
>
<el-form-item label="工号" prop="nickname">
<el-input
v-model="queryParams.nickname"
placeholder="请输入工号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="用户名称" prop="username">
<el-input
v-model="queryParams.username"
@ -96,17 +101,16 @@
</ContentWrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="用户编号" align="center" key="id" prop="id" />
<el-table-column
label="用户名称"
label="工号"
align="center"
prop="username"
prop="nickname"
:show-overflow-tooltip="true"
/>
<el-table-column
label="用户称"
label="用户称"
align="center"
prop="nickname"
prop="username"
:show-overflow-tooltip="true"
/>
<el-table-column
@ -116,6 +120,11 @@
prop="deptName"
:show-overflow-tooltip="true"
/>
<el-table-column label="用户性别" align="center" prop="sex">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.sex" />
</template>
</el-table-column>
<el-table-column label="手机号码" align="center" prop="mobile" width="120" />
<el-table-column label="状态" key="status">
<template #default="scope">
@ -222,6 +231,7 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
username: undefined,
nickname: undefined,
mobile: undefined,
status: undefined,
deptId: undefined,

Loading…
Cancel
Save