增加机具成套设备新增 删除 编辑功能

This commit is contained in:
BianLzhaoMin 2024-06-25 17:36:11 +08:00
parent 53361c7f01
commit 6183ae3eae
15 changed files with 787 additions and 57 deletions

View File

@ -0,0 +1,22 @@
import request from '@/utils/request'
// 新增 成套设备
export const addCompleteSetToolsApi = (data) => {
return request.post('/material/maWhole/addOrUpdate', data)
}
// 查询 成套设备列表
export const getCompleteSetToolsApi = (data) => {
return request.get('/material/maWhole/selectList', {
params: data
})
}
// 删除 成套设备单条数据
export const delCompleteSetToolsApi = (data) => {
return request.post('/material/maWhole/deleteById', data)
}
// 查询编辑 成套设备单
export const queryCompleteSetToolsApi = (data) => {
return request.get('/material/maWhole/selectListById', {
params: data
})
}

View File

@ -42,7 +42,7 @@
:options="item.f_selList"
:props="item.optionProps"
:show-all-levels="false"
@change="casCadeChange"
@change="casCadeChange(item.f_model, $event)"
clearable
filterable
style="width: 240px"
@ -50,6 +50,7 @@
<el-date-picker
v-if="item.f_type === 'date'"
v-model="queryParams[item.f_model]"
@change="timeChange(item.timeList, $event)"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
@ -79,55 +80,60 @@
</template>
<script>
export default {
props: {
/* 查询条件 */
formLabel: {
type: Array,
default: () => {
return []
},
},
routerParams: {
type: String,
default: () => {
return null
},
export default {
props: {
/* 查询条件 */
formLabel: {
type: Array,
default: () => {
return []
},
},
data() {
return {
queryParams: {},
}
},
created() {
/* 生产查询参数 */
this.formLabel.map((e) => {
this.$set(this.queryParams, e.f_model, '')
})
},
mounted() {
this.queryParams.keyword = this.routerParams
if (this.queryParams.keyword) {
this.$emit('queryList', this.queryParams)
}
},
methods: {
/* 查询按钮 */
handleQuery() {
this.$emit('queryList', this.queryParams)
},
/* 重置按钮 */
resetQuery() {
this.$refs.queryForm.resetFields()
this.$emit('queryList', this.queryParams, 'reset')
},
/* 级联选择框的change事件 */
casCadeChange(val) {
this.queryParams.type = val[val.length - 1]
routerParams: {
type: String,
default: () => {
return null
},
},
}
},
data() {
return {
queryParams: {},
}
},
created() {
/* 生产查询参数 */
this.formLabel.map((e) => {
this.$set(this.queryParams, e.f_model, '')
})
},
mounted() {
this.queryParams.keyword = this.routerParams
if (this.queryParams.keyword) {
this.$emit('queryList', this.queryParams)
}
},
methods: {
/* 查询按钮 */
handleQuery() {
this.$emit('queryList', this.queryParams)
},
/* 重置按钮 */
resetQuery() {
this.$refs.queryForm.resetFields()
this.$emit('queryList', this.queryParams, 'reset')
},
/* 级联选择框的change事件 */
casCadeChange(name, val) {
this.queryParams[name] = val[val.length - 1]
},
// change
timeChange(list, val) {
this.queryParams[list[0]] = val[0]
this.queryParams[list[1]] = val[1]
},
},
}
</script>
<style></style>

View File

@ -151,7 +151,7 @@ export default {
data() {
return {
total: 0,
tableList: [{ demo: 123 }],
tableList: [],
/* 分页参数 */
pageParams: {
pageNum: 1,
@ -198,13 +198,19 @@ export default {
/* 获取列表信息 */
async getList() {
this.pageParams = Object.assign(this.pageParams, this.sendParams)
this.$delete(this.pageParams, 'limit')
this.$delete(this.pageParams, 'page')
this.loading = true
const res = await this.sendApi(this.pageParams)
this.loading = false
if (res.code == 200) {
this.tableList = res.rows || res.data.rows
this.total = res.total || res.data.total
if (res.data) {
this.tableList = res.data.rows
this.total = res.data.total
} else {
this.tableList = res.rows
this.total = res.total
}
}
},

View File

@ -142,7 +142,6 @@
<el-table-column label="操作" align="center" width="140">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
@ -150,8 +149,8 @@
>编辑</el-button
>
<el-button
size="mini"
type="text"
style="color: #f56c6c"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['base:comeAndGo:del']"

View File

@ -105,7 +105,6 @@
<el-table-column label="操作" align="center" width="200">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
@ -113,9 +112,9 @@
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
style="color: #f56c6c"
@click="handleDelete(scope.row)"
v-hasPermi="['base:unit:del']"
>删除</el-button

View File

@ -20,7 +20,12 @@ export const config = {
{ f_label: '关键字', f_model: 'keyword', f_type: 'ipt' },
{ f_label: '单位名称', f_model: 'backUnit', f_type: 'sel', f_selList: [] },
{ f_label: '工程名称', f_model: 'backPro', f_type: 'sel', f_selList: [] },
{ f_label: '工机具类型', f_model: 'type', f_type: 'selCas', f_selList: [], optionProps: { value: 'id', } },
{
f_label: '工机具类型', f_model: 'type', f_type: 'selCas', f_selList: [], optionProps: {
multiple: false,
value: 'id',
}
},
{
f_label: '报废来源', f_model: 'scrapSource', f_type: 'sel', f_selList: [
{ label: '退料', value: 1 },

View File

@ -0,0 +1,20 @@
<template>
<div>
<PageHeader :pageContent="pageContent" @goBack="goBack" />
</div>
</template>
<script>
import PageHeader from '@/components/pageHeader'
export default {
components: {
PageHeader,
},
methods: {
goBack() {
this.$emit('openHomePage')
},
},
}
</script>

View File

@ -0,0 +1,113 @@
import {
getUnitInfoSelectApi,
listPartTypeApi,
} from '@/api/repairTest/repair'
import { getProjectList } from '@/api/claimAndRefund/receive'
import { getTypeList } from '@/api/store/warehousing'
let unitList = []
let proList = []
let typeList = []
export const config = {
handleColShow: true, // 是否显示操作列
pageShow: true, // 是否显示分页组件
isSelShow: false,// 表格是否需要复选框
isFormShow: true, // 是否显示表单查询组件
handleWidth: '', // 操作列宽度
formLabel: [
{ f_label: '成套设备名称', f_model: 'keyword', f_type: 'ipt' },
{ f_label: '主体设备', f_model: 'backUnit', f_type: 'sel', f_selList: [] },
{ f_label: '创建日期', f_model: 'backPro', f_type: 'date' },
],
columnsList: [
// { t_width: '55px', t_props: '', t_label: '序号' },
{ t_width: '', t_props: 'scrapNum', t_label: '成套设备名称', },
{ t_width: '', t_props: '', t_label: '主体设备', t_slot: 'source', },
{ t_width: '', t_props: 'repairNum', t_label: '配套设备种类数量', t_slot: 'code', },
{ t_width: '', t_props: 'unitName', t_label: '创建人', },
{ t_width: '', t_props: 'projectName', t_label: '创建日期', },
],
handleBtn: [
{ btn_title: '查看', id: 1 },
{ btn_title: '审核', id: 2 },
],
}
export const dialogConfig = {
outerWidth: '70%',
outerTitle: '',
outerVisible: false,
innerWidth: '50%',
innerTitle: '',
innerVisible: false,
handleColShow: false, // 是否显示操作列
pageShow: true, // 是否显示分页组件
isSelShow: false,// 表格是否需要复选框
isFormShow: true, // 是否显示表单查询组件
formLabel: [
{ f_label: '类型名称', f_model: 'keywords', f_type: 'sel', f_selList: [], selLabel: 'typeName', selValue: 'typeId' },
],
columnsList: [
// { t_width: '55px', t_props: '', t_label: '序号' },
{ t_width: '', t_props: 'machineTypeName', t_label: '设备类型' },
{ t_width: '', t_props: 'specificationType', t_label: '规格型号' },
{ t_width: '', t_props: 'maCode', t_label: '设备编码' },
{ t_width: '', t_props: 'scrapNum', t_label: '设备数量' },
{ t_width: '', t_props: 'status', t_label: '审批状态', t_slot: 't_type' },
{ t_width: '', t_props: 'auditRemark', t_label: '报废原因' },
{ t_width: '', t_props: '', t_label: '损坏原因', t_slot: 't_damage' },
{ t_width: '', t_props: '', t_label: '报废图片', t_slot: 't_img' },
{ t_width: '', t_props: 'remark', t_label: '备注' },
],
}
export const getSelList = () => {
new Promise(async (resolve) => {
const { data: unitRes } = await getUnitInfoSelectApi()
unitList = unitRes.map((e) => {
e.value = e.unitId
e.label = e.unitName
return e
})
const { data: proRes } = await getProjectList()
proList = proRes.map((e) => {
e.value = e.projectId
e.label = e.projectName
return e
})
const { data: typeRes } = await listPartTypeApi()
typeList = typeRes
resolve()
}).then(() => {
config.formLabel.map((item) => {
if (item.f_model === 'backUnit') {
item.f_selList = unitList
return item
}
if (item.f_model === 'backPro') {
item.f_selList = proList
return item
}
if (item.f_model === 'type') {
item.f_selList = typeList
return item
}
})
}).catch(() => {
})
}
export const getTypeListSel = async () => {
const { data: res } = await getTypeList({ level: '3' })
dialogConfig.formLabel[0].f_selList = res.map((e) => {
e.value = e.typeId
e.label = e.typeName
return e
})
}

View File

@ -0,0 +1,44 @@
<template>
<!-- 机具成套设备主列表 -->
<div>
<TableModel
ref="tbRef"
:config="config"
:sendApi="getForecastWasteListApi"
>
<template slot="export">
<el-row class="mb8">
<el-button
type="success"
plain
icon="el-icon-download"
size="mini"
@click="handleAddComplete()"
>新增</el-button
>
</el-row>
</template>
</TableModel>
</div>
</template>
<script>
import TableModel from '@/components/TableModel'
import { config } from './config'
export default {
components: {
TableModel,
},
data() {
return {
config,
}
},
methods: {
handleAddComplete() {
console.log('新增!')
this.$emit('handleAddComplete')
},
},
}
</script>

View File

@ -0,0 +1,32 @@
<template>
<div class="app-container">
<!-- 调试成套设备页面 -->
<Home v-if="isShowHome" @handleAddComplete="handleAddComplete" />
<AddCompleteTools v-else @openHomePage="openHomePage" />
</div>
</template>
<script>
import Home from './component/home.vue'
import AddCompleteTools from './component/addCompleteTools.vue'
export default {
components: {
Home,
AddCompleteTools,
},
data() {
return {
isShowHome: true,
}
},
methods: {
handleAddComplete() {
this.isShowHome = false
},
openHomePage() {
this.isShowHome = true
},
},
}
</script>

View File

@ -0,0 +1,308 @@
<template>
<!-- 机具成套新增页面 -->
<div>
<PageHeader :pageContent="pageContent" @goBack="goBack" />
<el-form
ref="addFormRef"
:model="addCompleteForm"
:rules="addCompleteRules"
inline
label-width="120px"
>
<el-form-item label="成套名称" prop="completeSetName">
<el-input
placeholder="请输入成套名称"
:disabled="isEdit"
v-model="addCompleteForm.completeSetName"
/>
</el-form-item>
<el-form-item label="主体设备">
<el-cascader
ref="mainDeviceRef"
placeholder="请选择主体设备"
:options="deviceTypeTreeNew"
:props="deviceTypeTreeProps"
v-model="addCompleteForm.mainDevice"
@change="selMainDevice"
:show-all-levels="false"
filterable
clearable
:disabled="mainDeviceDisabled"
/>
</el-form-item>
<el-form-item label="配套设备">
<el-cascader
ref="assortDeviceRef"
placeholder="请选择配套设备"
:options="deviceTypeTreeNew"
:props="deviceTypeTreeProps"
v-model="addCompleteForm.assortDevice"
@change="selAssortDevice"
:show-all-levels="false"
filterable
clearable
/>
</el-form-item>
</el-form>
<el-row class="mb8">
<el-button type="primary" size="mini" @click="submitComplete"
> </el-button
>
</el-row>
<el-table :data="tempList" border>
<el-table-column align="center" label="序号" type="index" />
<el-table-column
prop="deviceType"
align="center"
label="设备型号"
/>
<el-table-column
prop="deviceAscription"
align="center"
label="设备所属"
/>
<el-table-column align="center" label="数量">
<template slot-scope="{ row }">
<el-input
v-model="row.deviceNum"
style="width: 180px"
placeholder="请输入数量"
@change="deviceNumChange"
/>
</template>
</el-table-column>
<el-table-column align="center" label="数量">
<template slot-scope="{ row }">
<el-button
size="mini"
type="danger"
@click="handleDelete(row)"
> </el-button
>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import PageHeader from '@/components/pageHeader'
import { getDeviceTypeTree } from '@/api/claimAndRefund/receive'
import {
addCompleteSetToolsApi,
queryCompleteSetToolsApi,
} from '@/api/store/completeTools.js'
export default {
components: {
PageHeader,
},
props: {
editInfo: {
type: Object,
default: () => null,
},
},
data() {
return {
pageContent: '成套设备新增',
addCompleteForm: {
completeSetName: '',
mainDevice: '',
assortDevice: '',
},
addCompleteRules: {
completeSetName: [
{
required: true,
trigger: 'blur',
message: '请输入成套名称',
},
],
},
deviceTypeTreeProps: {
multiple: false,
value: 'id',
},
deviceTypeTreeNew: [], //
tempList: [],
mainDeviceDisabled: false,
saveParams: {
wholeTypeName: '', //
createBy: sessionStorage.getItem('userId'), //
parentId: '', // ID
companyId: 101,
deviceInfo: [],
},
isEdit: false,
}
},
async created() {
this.getDeviceTypeTree()
if (this.editInfo) {
this.pageContent = '成套设备编辑'
this.addCompleteForm.completeSetName = this.editInfo.wholeTypeName
this.addCompleteForm.mainDevice = this.editInfo.deviceTypeId
this.saveParams.id = this.editInfo.id
this.mainDeviceDisabled = true
this.isEdit = true
const queryParams = {
id: this.editInfo.id,
wholeTypeName: this.editInfo.wholeTypeName,
}
const { data: res } = await queryCompleteSetToolsApi(queryParams)
this.tempList = res.rows
}
},
methods: {
//
selMainDevice(val) {
const checkNode = this.$refs['mainDeviceRef'].getCheckedNodes()
if (checkNode.length < 1) return
const mainDeviceObj = {
deviceType: checkNode[0].label, //
deviceTypeId: val[val.length - 1], // Id
deviceNum: '', //
deviceAscription: '主体设备', //
ascriptionType: 1, // 1 2
}
if (this.tempList.length === 0) {
this.tempList.unshift(mainDeviceObj)
} else {
//
const isRepeat = this.tempList.some(
(e) => e.deviceTypeId === mainDeviceObj.deviceTypeId,
)
if (isRepeat) {
this.$message.error(
'该设备已选择作为配套设备,不可作为主体设备!',
)
return
} else {
this.tempList.unshift(mainDeviceObj)
}
}
this.mainDeviceDisabled = true
},
//
selAssortDevice(val) {
const checkNode = this.$refs['assortDeviceRef'].getCheckedNodes()
if (checkNode.length < 1) return
const assortDeviceObj = {
deviceType: checkNode[0].label, //
deviceTypeId: val[val.length - 1], // Id
deviceNum: '', //
deviceAscription: '配套设备', //
ascriptionType: 2, // 1 2
}
//
if (
this.tempList.length > 0 &&
this.tempList[0].deviceTypeId === assortDeviceObj.deviceTypeId
) {
this.$message.error(
'所选设备已作为主体设备,不可再作为配套设备!',
)
return
}
//
const isRepeat = this.tempList.some(
(e) => e.deviceTypeId === assortDeviceObj.deviceTypeId,
)
if (isRepeat) {
this.$message.error('该设备已添加,不可重复添加!')
return
} else {
this.tempList.push(assortDeviceObj)
}
},
//
handleDelete(row) {
this.tempList = this.tempList.filter(
(e) => e.deviceTypeId !== row.deviceTypeId,
)
//
if (row.ascriptionType === 1) {
this.mainDeviceDisabled = false
}
},
//
deviceNumChange(val) {
let reg = /^[1-9]\d*$/
if (!reg.test(val)) {
this.$message.error('请输入大于0的正整数')
}
},
//
submitComplete() {
this.$refs.addFormRef.validate(async (valid) => {
if (valid) {
const isMainDevice = this.tempList.some(
(e) => e.ascriptionType === 1,
)
if (!isMainDevice) {
this.$message.error('请添加主体设备!')
return
}
const isAssortDevice = this.tempList.some(
(e) => e.ascriptionType === 2,
)
if (!isAssortDevice) {
this.$message.error('请添加配套设备!')
return
}
this.tempList.forEach((e) => {
if (!parseInt(e.deviceNum)) {
this.$message.error('请输入数量!')
return
} else {
e.deviceNum = parseInt(e.deviceNum)
}
})
this.saveParams.parentId = this.tempList[0].deviceTypeId
this.saveParams.wholeTypeName =
this.addCompleteForm.completeSetName
this.saveParams.deviceInfo = this.tempList
const res = await addCompleteSetToolsApi(this.saveParams)
if (res.code == 200) {
this.$message.success('新增成功!')
this.$emit('openHomePage')
}
}
})
},
//
async getDeviceTypeTree() {
const params = {
level: 4,
}
const res = await getDeviceTypeTree(params)
this.deviceTypeTreeNew = res.data.filter((e) => e.companyId == 101)
},
goBack() {
this.$emit('openHomePage')
this.tempList = []
},
},
}
</script>

View File

@ -0,0 +1,28 @@
import { getDeviceTypeTree } from '@/api/claimAndRefund/receive'
import { start } from 'nprogress'
export const config = {
handleColShow: true, // 是否显示操作列
pageShow: true, // 是否显示分页组件
isSelShow: false,// 表格是否需要复选框
isFormShow: true, // 是否显示表单查询组件
handleWidth: '', // 操作列宽度
formLabel: [
{ f_label: '成套设备名称', f_model: 'wholeTypeName', f_type: 'ipt' },
{ f_label: '主体设备', f_model: 'parentId', f_type: 'selCas', f_selList: [], optionProps: { value: 'id', } },
{ f_label: '创建日期', f_model: 'time', f_type: 'date', timeList: ['startTime', 'endTime'] },
],
columnsList: [
{ t_width: '', t_props: 'wholeTypeName', t_label: '成套设备名称', },
{ t_width: '', t_props: 'typeModelName', t_label: '主体设备', },
{ t_width: '', t_props: 'totalNum', t_label: '配套设备种类数量' },
{ t_width: '', t_props: 'nickName', t_label: '创建人', },
{ t_width: '', t_props: 'createTime', t_label: '创建日期', },
],
}
export const getDeviceTypeTreeFun = async () => {
const { data: res } = await getDeviceTypeTree({ level: '4' })
config.formLabel[1].f_selList = res.filter((e) => e.companyId == 101)
}

View File

@ -0,0 +1,109 @@
<template>
<!-- 机具成套设备主列表 -->
<div>
<TableModel
ref="tbRef"
:config="config"
:sendApi="getCompleteSetToolsApi"
:sendParams="sendParams"
>
<template slot="export">
<el-row class="mb8">
<el-button
type="primary"
size="mini"
@click="handleAddComplete()"
> </el-button
>
</el-row>
</template>
<!-- 列表操作栏 -->
<template slot="handle" slot-scope="{ data }">
<el-button
type="text"
icon="el-icon-edit"
@click="handleEdit(data)"
>编辑</el-button
>
<el-button
type="text"
icon="el-icon-delete"
style="color: #f56c6c"
@click="handleDelete(data)"
v-hasPermi="['forecast:waste:auditing']"
>删除</el-button
>
</template>
</TableModel>
</div>
</template>
<script>
import TableModel from '@/components/TableModel'
import {
getCompleteSetToolsApi,
delCompleteSetToolsApi,
} from '@/api/store/completeTools.js'
import { config, getDeviceTypeTreeFun } from './config'
export default {
components: {
TableModel,
},
data() {
return {
config,
getCompleteSetToolsApi,
sendParams: {
companyId: 101,
},
getDeviceTypeTreeFun,
}
},
created() {
this.getDeviceTypeTreeFun()
},
methods: {
//
handleAddComplete() {
console.log('新增!')
this.$emit('handleAddComplete')
},
//
handleEdit(data) {
console.log(data, '编辑')
this.$emit('handleAddComplete', data)
},
//
handleDelete(data) {
this.$confirm('是否确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
delCompleteSetToolsApi({
id: data.id,
wholeTypeName: data.wholeTypeName,
})
.then((res) => {
console.log(res, '删除结果---')
this.$message({
type: 'success',
message: '删除成功!',
})
this.$refs.tbRef.getList()
})
.catch((err) => {
this.$message({
type: 'error',
message: '删除失败!',
})
})
})
.catch(() => {})
},
},
}
</script>

View File

@ -0,0 +1,39 @@
<template>
<div class="app-container">
<!-- 机具成套设备页面 -->
<Home v-if="isShowHome" @handleAddComplete="handleAddComplete" />
<AddCompleteTools
v-else
:editInfo="editInfo"
@openHomePage="openHomePage"
/>
</div>
</template>
<script>
import Home from './component/home.vue'
import AddCompleteTools from './component/addCompleteTools.vue'
export default {
components: {
Home,
AddCompleteTools,
},
data() {
return {
isShowHome: true,
editInfo: {},
}
},
methods: {
handleAddComplete(data) {
this.editInfo = data
this.isShowHome = false
},
openHomePage() {
this.editInfo = null
this.isShowHome = true
},
},
}
</script>

View File

@ -43,11 +43,11 @@ module.exports = {
// target: `https://test-cc.zhgkxt.com`,//线上环境-南网
// target: `https://z.csgmall.com.cn`,
// target: `http://10.40.92.60:28080`, //超
target: `http://192.168.2.122:38080`, //超
// target: `http://10.40.92.81:28080`, //韩/
// target: `http://10.40.92.74:8080`,//旭/
// target: `http://10.40.92.140:28080`, //帅
target: `http://10.40.92.253:28080`, //福
// target: `http://192.168.2.209:28080`, //福
//******** 注意事项 ********* */
//1.全局替换qrUrl二维码扫码提供的网址-发布服务器的地址target;