更新物料、班组、仓库 #380
@ -1,9 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* @Author: Do not edit
|
* @Author: Do not edit
|
||||||
* @Date: 2023-10-21 11:50:46
|
* @Date: 2023-10-21 11:50:46
|
||||||
* @LastEditTime: 2023-11-04 10:42:50
|
* @LastEditTime: 2024-07-08 14:35:17
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @Description:
|
* @Description:
|
||||||
*/
|
*/
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ export function getCoreProductPage(query) {
|
|||||||
// 获得所有列表
|
// 获得所有列表
|
||||||
export function getCoreProductList(query) {
|
export function getCoreProductList(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/base/core-product/listAll',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
@ -108,4 +108,4 @@ export function getCoreProductAttrPage(query) {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,13 @@ export function getCode() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获得可用的班次列表
|
||||||
|
export function listClassesEnabled() {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-classes/listEnable',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
// 导出班次基础信息 Excel
|
// 导出班次基础信息 Excel
|
||||||
export function exportGroupClassesExcel(query) {
|
export function exportGroupClassesExcel(query) {
|
||||||
return request({
|
return request({
|
||||||
|
125
src/api/base/groupSchedulingPlan.js
Normal file
125
src/api/base/groupSchedulingPlan.js
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 创建排班计划配置基础信息
|
||||||
|
export function createGroupPlan(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/create',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新排班计划配置基础信息
|
||||||
|
export function updateGroupPlan(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/update',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除排班计划配置基础信息
|
||||||
|
export function deleteGroupPlan(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/delete?id=' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得排班计划配置基础信息
|
||||||
|
export function getGroupPlan(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/get?id=' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得排班计划配置基础信息分页
|
||||||
|
export function getGroupPlanPage(query) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/page',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得所有排班计划列表
|
||||||
|
export function groupPlanList() {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/listAll',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获得排班计划相关班组列表
|
||||||
|
export function groupPlanTeamList(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan-team/teamListByPlanId?planId=' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获得排班计划相关班次列表
|
||||||
|
export function groupPlanClassesList(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan-classes/classesListByPlanId?planId=' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取code
|
||||||
|
export function getCode() {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/getCode',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出排班计划配置基础信息 Excel
|
||||||
|
export function exportGroupPlanExcel(query) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/export-excel',
|
||||||
|
method: 'get',
|
||||||
|
params: query,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得产线工段树形结构
|
||||||
|
export function getGroupPlanTree() {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan/getLineSectionTree',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建排班计划产线工段
|
||||||
|
export function createGroupPlanLine(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan-line-section/createPlanLineSection',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新排班计划产线工段
|
||||||
|
export function updateGroupPlanLine(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan-line-section/updatePlanLineSection',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得排班计划配置基础信息
|
||||||
|
export function getGroupPlanLine(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan-line-section/getLineSectionByPlanId?planId=' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得当前登录用户所在部门id
|
||||||
|
export function getLoginUserDeptId() {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-plan-line-section/getLoginUserDeptId',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
54
src/api/base/groupSchedulingRule.js
Normal file
54
src/api/base/groupSchedulingRule.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 创建排班规则基础信息
|
||||||
|
export function createGroupRule(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-rule/create',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新排班规则基础信息
|
||||||
|
export function updateGroupRule(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-rule/update',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除排班规则基础信息
|
||||||
|
export function deleteGroupRule(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-rule/delete?id=' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得排班规则基础信息
|
||||||
|
export function getGroupRule(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-rule/get?id=' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得排班规则基础信息分页
|
||||||
|
export function getGroupRulePage(query) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-rule/page',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出排班规则基础信息 Excel
|
||||||
|
export function exportGroupRuleExcel(query) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-scheduling-rule/export-excel',
|
||||||
|
method: 'get',
|
||||||
|
params: query,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
@ -8,7 +8,14 @@ export function getPreset(query) {
|
|||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 获取某月预排班
|
||||||
|
export function getScheduling(query) {
|
||||||
|
return request({
|
||||||
|
url: '/base/group-team-scheduling/getScheduling',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
// 批量创建-更新排班信息
|
// 批量创建-更新排班信息
|
||||||
export function createOrUpdateList(data) {
|
export function createOrUpdateList(data) {
|
||||||
return request({
|
return request({
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* @Author: Do not edit
|
* @Author: Do not edit
|
||||||
* @Date: 2023-10-21 11:50:46
|
* @Date: 2023-10-21 11:50:46
|
||||||
* @LastEditTime: 2023-10-24 11:22:28
|
* @LastEditTime: 2024-07-05 10:09:18
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @Description:
|
* @Description:
|
||||||
*/
|
*/
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ export function getMaterialPage(query) {
|
|||||||
// 获得物料列表
|
// 获得物料列表
|
||||||
export function getMaterialList(query) {
|
export function getMaterialList(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/base/material/listbyfilter',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
@ -118,4 +118,85 @@ export function getMaterialAttr(query) {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 获得物料树结构
|
||||||
|
export function getMaterialTree() {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material-type/listTree',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建物料树
|
||||||
|
export function createMaterialTree(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material-type/create',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新物料树
|
||||||
|
export function updateMaterialTree(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material-type/update',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除物料树
|
||||||
|
export function deleteMaterialTree(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material-type/delete?id=' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得产品物料分页
|
||||||
|
export function getProductMaterialPage(query) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material/page',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 删除产品物料
|
||||||
|
export function deleteProductMaterial(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material/delete?id=' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 创建产品物料
|
||||||
|
export function createProductMaterial(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material/create',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新产品物料
|
||||||
|
export function updateProductMaterial(data) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material/update',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获得产品物料
|
||||||
|
export function getProductMaterial(id) {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material/get?id=' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得产品物料code
|
||||||
|
export function getProductMaterialCode() {
|
||||||
|
return request({
|
||||||
|
url: '/base/core-product-material/getCode',
|
||||||
|
method: 'POST'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* @Date: 2023-10-21 11:50:46
|
* @Date: 2023-10-21 11:50:46
|
||||||
* @LastEditTime: 2023-11-27 17:54:28
|
* @LastEditTime: 2023-11-27 17:54:28
|
||||||
* @LastEditors: DY
|
* @LastEditors: DY
|
||||||
* @Description:
|
* @Description:
|
||||||
*/
|
*/
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ export function getMaterialPBList(query) {
|
|||||||
// 获得产品列表
|
// 获得产品列表
|
||||||
export function getProList(query) {
|
export function getProList(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/base/core-product/listAll',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
|
@ -2,7 +2,7 @@ import request from '@/utils/request'
|
|||||||
// 获得产品列表
|
// 获得产品列表
|
||||||
export function getProductAll() {
|
export function getProductAll() {
|
||||||
return request({
|
return request({
|
||||||
url: '/base/core-product/listAll',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* @Author: zhp
|
* @Author: zhp
|
||||||
* @Date: 2023-11-07 19:47:48
|
* @Date: 2023-11-07 19:47:48
|
||||||
* @LastEditTime: 2023-11-23 13:57:41
|
* @LastEditTime: 2024-07-08 14:33:12
|
||||||
* @LastEditors: zhp
|
* @LastEditors: zwq
|
||||||
* @Description:
|
* @Description:
|
||||||
*/
|
*/
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
@ -99,7 +99,7 @@ export function getProcessEquMaterialBomDet(data) {
|
|||||||
|
|
||||||
export function getMaterialList(data) {
|
export function getMaterialList(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/base/material/listbyfilter',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
|
@ -25,7 +25,7 @@ export function getWorkOrderList(query) {
|
|||||||
}
|
}
|
||||||
export function getProductList(query) {
|
export function getProductList(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/base/core-product/listAll',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query,
|
params: query,
|
||||||
})
|
})
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2021-11-18 14:16:25
|
* @Date: 2021-11-18 14:16:25
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-11-16 09:14:35
|
* @LastEditTime: 2024-07-03 14:19:01
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
<svg-icon style="width: 18px; height: 18px" class="item-icon" icon-class="edit" />
|
<svg-icon style="width: 18px; height: 18px" class="item-icon" icon-class="edit" />
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-tooltip> -->
|
</el-tooltip> -->
|
||||||
|
|
||||||
<!-- <el-tooltip placement="top" content="删除">
|
<!-- <el-tooltip placement="top" content="删除">
|
||||||
<el-button
|
<el-button
|
||||||
type="text"
|
type="text"
|
||||||
@ -105,7 +105,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import basicAdd from '../../core/mixins/basic-add';
|
import basicAdd from '../../core/mixins/basic-add';
|
||||||
import { getConOrderList, createConCoreWOr, getCoreWO } from '@/api/base/coreWorkOrder';
|
import { getConOrderList, createConCoreWOr, getCoreWO } from '@/api/base/coreWorkOrder';
|
||||||
import SmallTitle from '../material/SmallTitle';
|
import SmallTitle from '../coreWorkOrder/SmallTitle';
|
||||||
// import { parseTime } from '../../core/mixins/code-filter';
|
// import { parseTime } from '../../core/mixins/code-filter';
|
||||||
// import attrAdd from './attr-add';
|
// import attrAdd from './attr-add';
|
||||||
|
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
<!--
|
|
||||||
* @Author: zwq
|
|
||||||
* @Date: 2023-08-01 15:27:31
|
|
||||||
* @LastEditors: zwq
|
|
||||||
* @LastEditTime: 2023-08-01 16:25:54
|
|
||||||
* @Description:
|
|
||||||
-->
|
|
||||||
<template>
|
|
||||||
<div :class="[className, { 'p-0': noPadding }]">
|
|
||||||
<slot />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
size: {
|
|
||||||
// 取值范围: xl lg md sm
|
|
||||||
type: String,
|
|
||||||
default: 'de',
|
|
||||||
validator: function (val) {
|
|
||||||
return ['xl', 'lg', 'de', 'md', 'sm'].indexOf(val) !== -1;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
noPadding: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
className: function () {
|
|
||||||
return `${this.size}-title`;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
$pxls: (xl, 28px) (lg, 24px) (de, 20px) (md, 18px) (sm, 16px);
|
|
||||||
$mgr: 8px;
|
|
||||||
@each $size, $height in $pxls {
|
|
||||||
.#{$size}-title {
|
|
||||||
font-size: 18px;
|
|
||||||
line-height: $height;
|
|
||||||
color: #000;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: '微软雅黑', 'Microsoft YaHei', Arial, Helvetica, sans-serif;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
width: 4px;
|
|
||||||
height: $height + 2px;
|
|
||||||
border-radius: 1px;
|
|
||||||
margin-right: $mgr;
|
|
||||||
background-color: #0b58ff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-0 {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,459 +1,223 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2021-11-18 14:16:25
|
* @Date: 2021-11-18 14:16:25
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-11-27 15:26:12
|
* @LastEditTime: 2024-07-08 16:52:34
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-form
|
||||||
:visible.sync="visible"
|
:model="dataForm"
|
||||||
:show-close="false"
|
:rules="dataRule"
|
||||||
:wrapper-closable="isdetail"
|
ref="dataForm"
|
||||||
class="drawer"
|
@keyup.enter.native="dataFormSubmit()"
|
||||||
size="60%">
|
label-width="100px"
|
||||||
<small-title slot="title" :no-padding="true">
|
label-position="top">
|
||||||
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
|
<el-row :gutter="20">
|
||||||
</small-title>
|
<el-col :span="8">
|
||||||
<div class="content">
|
<el-form-item label="物料产品名称" prop="name">
|
||||||
<div class="visual-part">
|
<el-input
|
||||||
<el-form
|
v-model="dataForm.name"
|
||||||
:model="dataForm"
|
clearable
|
||||||
:rules="dataRule"
|
placeholder="请输入物料产品名称" />
|
||||||
ref="dataForm"
|
</el-form-item>
|
||||||
@keyup.enter.native="dataFormSubmit()"
|
</el-col>
|
||||||
label-width="100px"
|
<el-col :span="8">
|
||||||
label-position="top">
|
<el-form-item label="物料产品编码" prop="code">
|
||||||
<el-row :gutter="20">
|
<el-input
|
||||||
<el-col :span="12">
|
v-model="dataForm.code"
|
||||||
<el-form-item label="物料编码" prop="code">
|
clearable
|
||||||
<el-input
|
placeholder="请输入物料产品编码" />
|
||||||
v-model="dataForm.code"
|
</el-form-item>
|
||||||
clearable
|
</el-col>
|
||||||
:disabled="isdetail"
|
<el-col :span="8">
|
||||||
placeholder="请输入物料编码" />
|
<el-form-item label="物料产品类型" prop="typeId">
|
||||||
</el-form-item>
|
<treeselect
|
||||||
</el-col>
|
v-model="dataForm.typeId"
|
||||||
<el-col :span="12">
|
:options="deptOptions"
|
||||||
<el-form-item label="物料名称" prop="name">
|
:normalizer="normalizer"
|
||||||
<el-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入物料名称" />
|
@select="setShowTime"
|
||||||
</el-form-item>
|
:show-count="true"
|
||||||
</el-col>
|
:appendToBody="true"
|
||||||
</el-row>
|
z-index="99999"
|
||||||
<el-row :gutter="20">
|
placeholder="选择物料产品类型" />
|
||||||
<el-col :span="12">
|
</el-form-item>
|
||||||
<el-form-item label="英文名称" prop="engName">
|
</el-col>
|
||||||
<el-input
|
<el-col :span="8">
|
||||||
v-model="dataForm.engName"
|
<el-form-item label="单位" prop="unit">
|
||||||
clearable
|
<el-select
|
||||||
:disabled="isdetail"
|
v-model="dataForm.unit"
|
||||||
placeholder="请输入英文名称" />
|
filterable
|
||||||
</el-form-item>
|
style="width: 100%"
|
||||||
</el-col>
|
placeholder="请选择单位">
|
||||||
<el-col :span="12">
|
<el-option
|
||||||
<el-form-item label="物料类型" prop="type">
|
v-for="dict in getDictDatas(DICT_TYPE.UNIT_DICT)"
|
||||||
<el-select
|
:key="dict.value"
|
||||||
v-model="dataForm.type"
|
:label="dict.label"
|
||||||
filterable
|
:value="dict.value" />
|
||||||
:disabled="isdetail"
|
</el-select>
|
||||||
style="width: 100%"
|
</el-form-item>
|
||||||
placeholder="请选择物料类型">
|
</el-col>
|
||||||
<el-option
|
<el-col :span="8">
|
||||||
v-for="dict in materialList"
|
<el-form-item label="规格" prop="specifications">
|
||||||
:key="dict.value"
|
<el-input
|
||||||
:label="dict.label"
|
v-model="dataForm.specifications"
|
||||||
:value="dict.value" />
|
clearable
|
||||||
</el-select>
|
placeholder="请输入规格" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
<el-col :span="8">
|
||||||
<el-row :gutter="20">
|
<el-form-item label="供应商" prop="supplierId">
|
||||||
<el-col :span="12">
|
<el-select
|
||||||
<el-form-item label="规格" prop="spec">
|
v-model="dataForm.supplierId"
|
||||||
<el-input
|
filterable
|
||||||
v-model="dataForm.spec"
|
clearable
|
||||||
clearable
|
:style="{ width: '100%' }"
|
||||||
:disabled="isdetail"
|
placeholder="请选择供应商">
|
||||||
placeholder="请输入规格" />
|
<el-option
|
||||||
</el-form-item>
|
v-for="item in supplierArr"
|
||||||
</el-col>
|
:key="item.id"
|
||||||
<el-col :span="12">
|
:label="item.name"
|
||||||
<el-form-item label="供应商" prop="supplierId">
|
:value="item.id"></el-option>
|
||||||
<el-select
|
</el-select>
|
||||||
v-model="dataForm.supplierId"
|
</el-form-item>
|
||||||
filterable
|
</el-col>
|
||||||
clearable
|
<el-col :span="8" v-if="showTime">
|
||||||
:disabled="isdetail"
|
<el-form-item label="生产单位用时" prop="processTime">
|
||||||
style="width: 100%"
|
<el-input
|
||||||
placeholder="请选择供应商">
|
v-model.number="dataForm.processTime"
|
||||||
<el-option
|
type="number"
|
||||||
v-for="dict in supplierList"
|
clearable
|
||||||
:key="dict.id"
|
placeholder="请输入产线生产单位用时" />
|
||||||
:label="dict.name"
|
</el-form-item>
|
||||||
:value="dict.id" />
|
</el-col>
|
||||||
</el-select>
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
||||||
</el-col>
|
<el-input
|
||||||
</el-row>
|
v-model="dataForm.remark"
|
||||||
<el-row :gutter="20">
|
clearable
|
||||||
<el-col :span="12">
|
placeholder="请输入备注" />
|
||||||
<el-form-item label="单位" prop="unit">
|
</el-form-item>
|
||||||
<el-select
|
</el-col>
|
||||||
v-model="dataForm.unit"
|
</el-row>
|
||||||
filterable
|
</el-form>
|
||||||
:disabled="isdetail"
|
|
||||||
style="width: 100%"
|
|
||||||
placeholder="请选择物料单位">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getDictDatas('unit_dict')"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="attr-list" v-if="idAttrShow">
|
|
||||||
<small-title
|
|
||||||
style="margin: 16px 0; padding-left: 8px"
|
|
||||||
:no-padding="true">
|
|
||||||
物料属性
|
|
||||||
</small-title>
|
|
||||||
|
|
||||||
<div v-if="!isdetail" class="action_btn">
|
|
||||||
<template>
|
|
||||||
<span style="display: inline-block;">
|
|
||||||
<el-button type="text" @click="addNew()" icon="el-icon-plus">新增</el-button>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
<base-table
|
|
||||||
:table-props="tableProps"
|
|
||||||
:page="listQuery.pageNo"
|
|
||||||
:limit="listQuery.pageSize"
|
|
||||||
:table-data="materialAttrList">
|
|
||||||
<method-btn
|
|
||||||
v-if="!isdetail"
|
|
||||||
slot="handleBtn"
|
|
||||||
:width="120"
|
|
||||||
label="操作"
|
|
||||||
:method-list="tableBtn"
|
|
||||||
@clickBtn="handleClick" />
|
|
||||||
</base-table>
|
|
||||||
<pagination
|
|
||||||
v-show="listQuery.total > 0"
|
|
||||||
:total="listQuery.total"
|
|
||||||
:page.sync="listQuery.pageNo"
|
|
||||||
:limit.sync="listQuery.pageSize"
|
|
||||||
:page-sizes="[5, 10, 15]"
|
|
||||||
@pagination="getList" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="!isdetail" class="drawer-body__footer">
|
|
||||||
<el-button style="" @click="goback()">取消</el-button>
|
|
||||||
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<attr-add
|
|
||||||
v-if="addOrUpdateVisible"
|
|
||||||
ref="addOrUpdate"
|
|
||||||
:material-id="dataForm.id"
|
|
||||||
@refreshDataList="getList" />
|
|
||||||
</el-drawer>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import basicAdd from '../../core/mixins/basic-add';
|
import basicAdd from '../../core/mixins/basic-add';
|
||||||
import { createMaterial, updateMaterial, getMaterial, getCode, getSupplierList, getMaterialAttrList, deleteMaterialAttr } from "@/api/base/material";
|
import { getTreeArr } from '../mixins/code-filter';
|
||||||
import { listData } from "@/api/system/dict/data";
|
import {
|
||||||
import SmallTitle from './SmallTitle';
|
createProductMaterial,
|
||||||
import { parseTime } from '../../core/mixins/code-filter';
|
updateProductMaterial,
|
||||||
import attrAdd from './attr-add';
|
getProductMaterial,
|
||||||
import { getDictDatas } from "@/utils/dict";
|
getProductMaterialCode,
|
||||||
|
getSupplierList,
|
||||||
const tableBtn = [
|
getMaterialTree,
|
||||||
{
|
} from '@/api/base/material';
|
||||||
type: 'edit',
|
import Treeselect from '@riophae/vue-treeselect';
|
||||||
btnName: '编辑',
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'delete',
|
|
||||||
btnName: '删除',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
const tableProps = [
|
|
||||||
{
|
|
||||||
prop: 'createTime',
|
|
||||||
label: '添加时间',
|
|
||||||
filter: parseTime,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'attrName',
|
|
||||||
label: '属性名',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'attrValue',
|
|
||||||
label: '属性值',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [basicAdd],
|
mixins: [basicAdd],
|
||||||
components: { SmallTitle, attrAdd },
|
components: {
|
||||||
|
Treeselect,
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tableBtn,
|
|
||||||
tableProps,
|
|
||||||
addOrUpdateVisible: false,
|
|
||||||
urlOptions: {
|
urlOptions: {
|
||||||
isGetCode: true,
|
isGetCode: true,
|
||||||
codeURL: getCode,
|
codeURL: getProductMaterialCode,
|
||||||
createURL: createMaterial,
|
createURL: createProductMaterial,
|
||||||
updateURL: updateMaterial,
|
updateURL: updateProductMaterial,
|
||||||
infoURL: getMaterial,
|
infoURL: getProductMaterial,
|
||||||
},
|
|
||||||
listQuery: {
|
|
||||||
pageSize: 10,
|
|
||||||
pageNo: 1,
|
|
||||||
total: 0,
|
|
||||||
},
|
},
|
||||||
|
deptOptions: undefined,
|
||||||
|
showTime: false,
|
||||||
dataForm: {
|
dataForm: {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
name: '',
|
name: '',
|
||||||
engName: '',
|
typeId: undefined,
|
||||||
type: '',
|
unit: undefined,
|
||||||
spec: undefined,
|
specifications: undefined,
|
||||||
supplierId: undefined,
|
supplierId: undefined,
|
||||||
remark: undefined,
|
processTime: 0,
|
||||||
unit: ''
|
remark: undefined,
|
||||||
},
|
},
|
||||||
materialList: [],
|
supplierArr: [],
|
||||||
supplierList: [],
|
treeArr: [],
|
||||||
materialAttrList: [],
|
|
||||||
unitList: [],
|
|
||||||
visible: false,
|
|
||||||
isdetail: false,
|
|
||||||
idAttrShow: false,
|
|
||||||
dataRule: {
|
dataRule: {
|
||||||
code: [{ required: true, message: "物料编码不能为空", trigger: "blur" }],
|
code: [{ required: true, message: '编号不能为空', trigger: 'blur' }],
|
||||||
name: [{ required: true, message: "物料名称不能为空", trigger: "blur" }],
|
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
|
||||||
type: [{ required: true, message: "物料类型不能为空", trigger: "blur" }]
|
typeId: [
|
||||||
}
|
{
|
||||||
|
required: true,
|
||||||
|
message: '物料产品类型不能为空',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {},
|
||||||
this.getDict()
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
async getDict() {
|
init(id) {
|
||||||
// 物料类型列表
|
this.dataForm.id = id || '';
|
||||||
const res = await listData({
|
|
||||||
pageNo: 1,
|
|
||||||
pageSize: 99,
|
|
||||||
dictType: 'material_type',
|
|
||||||
});
|
|
||||||
this.materialList = res.data.list.map(item => {
|
|
||||||
return {
|
|
||||||
label: item.label,
|
|
||||||
value: Number(item.value)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// 供应商列表
|
|
||||||
const supplierRes = await getSupplierList();
|
|
||||||
this.supplierList = supplierRes.data;
|
|
||||||
// 物料单位列表
|
|
||||||
// const unitRes = await listData({
|
|
||||||
// pageNo: 1,
|
|
||||||
// pageSize: 99,
|
|
||||||
// dictType: 'goods_unit',
|
|
||||||
// });
|
|
||||||
// this.unitList = unitRes.data.list.map(item => {
|
|
||||||
// return {
|
|
||||||
// label: item.label,
|
|
||||||
// value: Number(item.value)
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
},
|
|
||||||
initData() {
|
|
||||||
this.materialAttrList.splice(0);
|
|
||||||
this.listQuery.total = 0;
|
|
||||||
},
|
|
||||||
handleClick(raw) {
|
|
||||||
if (raw.type === 'delete') {
|
|
||||||
this.$confirm(
|
|
||||||
`是否确认删除属性名为"${raw.data.attrName}"的数据项?`,
|
|
||||||
'提示',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning',
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.then(() => {
|
|
||||||
deleteMaterialAttr(raw.data.id).then(({ data }) => {
|
|
||||||
this.$message({
|
|
||||||
message: '操作成功',
|
|
||||||
type: 'success',
|
|
||||||
duration: 1500,
|
|
||||||
onClose: () => {
|
|
||||||
this.getList();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(() => {});
|
|
||||||
} else {
|
|
||||||
this.addNew(raw.data.id);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getList() {
|
|
||||||
// 获取物料的属性列表
|
|
||||||
getMaterialAttrList({
|
|
||||||
...this.listQuery,
|
|
||||||
materialId: this.dataForm.id,
|
|
||||||
}).then((response) => {
|
|
||||||
this.materialAttrList = response.data.list;
|
|
||||||
this.listQuery.total = response.data.total;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
init(id, isdetail) {
|
|
||||||
this.initData();
|
|
||||||
this.isdetail = isdetail || false;
|
|
||||||
this.dataForm.id = id || undefined;
|
|
||||||
this.visible = true;
|
this.visible = true;
|
||||||
if (id) {
|
|
||||||
this.idAttrShow = true
|
|
||||||
} else {
|
|
||||||
this.idAttrShow = false
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs['dataForm'].resetFields();
|
this.$refs['dataForm'].resetFields();
|
||||||
|
|
||||||
if (this.dataForm.id) {
|
if (this.dataForm.id) {
|
||||||
// 获取物料详情
|
this.urlOptions.infoURL(id).then((response) => {
|
||||||
this.urlOptions.infoURL(id).then(response => {
|
this.dataForm = response.data;
|
||||||
this.dataForm = response.data;
|
this.setDataForm();
|
||||||
if (this.dataForm.unit) {
|
});
|
||||||
this.dataForm.unit = String(this.dataForm.unit)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// 获取物料的属性列表
|
|
||||||
this.getList();
|
|
||||||
} else {
|
} else {
|
||||||
if (this.urlOptions.isGetCode) {
|
if (this.urlOptions.isGetCode) {
|
||||||
this.getCode()
|
this.getCode();
|
||||||
}
|
this.setDataForm();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
// 表单提交
|
typeId(typeId, product) {
|
||||||
dataFormSubmit() {
|
|
||||||
this.$refs["dataForm"].validate((valid) => {
|
|
||||||
if (!valid) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// 修改的提交
|
|
||||||
if (this.dataForm.id) {
|
|
||||||
this.urlOptions.updateURL(this.dataForm).then(response => {
|
|
||||||
this.$modal.msgSuccess("修改成功");
|
|
||||||
this.visible = false
|
|
||||||
this.$emit("refreshDataList");
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 添加的提交
|
|
||||||
this.urlOptions.createURL(this.dataForm).then(response => {
|
|
||||||
this.$modal.msgSuccess("新增成功");
|
|
||||||
this.idAttrShow = true
|
|
||||||
this.$emit("refreshDataList");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
goback() {
|
|
||||||
this.$emit('refreshDataList');
|
|
||||||
this.visible = false;
|
|
||||||
// this.initData();
|
|
||||||
},
|
|
||||||
goEdit() {
|
|
||||||
this.isdetail = false;
|
|
||||||
},
|
|
||||||
// 新增 / 修改
|
|
||||||
addNew(id) {
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.addOrUpdate.init(id);
|
this.dataForm.typeId = typeId || undefined;
|
||||||
|
this.showTime = product || false;
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
setDataForm() {
|
||||||
|
getSupplierList().then((res) => {
|
||||||
|
this.supplierArr = res.data;
|
||||||
|
});
|
||||||
|
// 下拉树结构
|
||||||
|
getMaterialTree().then((response) => {
|
||||||
|
this.deptOptions = [];
|
||||||
|
this.deptOptions.push(...this.handleTree(response.data, 'id'));
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.dataForm.id) {
|
||||||
|
this.treeArr = [];
|
||||||
|
this.treeArr = getTreeArr(response.data);//解构,树结构变为普通数组
|
||||||
|
this.showTime = this.treeArr.find(
|
||||||
|
(item) => item.id == this.dataForm.typeId
|
||||||
|
).product;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 转换菜单数据结构 */
|
||||||
|
normalizer(node) {
|
||||||
|
if (node.children && !node.children.length) {
|
||||||
|
delete node.children;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
id: node.id,
|
||||||
|
label: node.name,
|
||||||
|
children: node.children,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
setShowTime(node) {
|
||||||
|
this.showTime = node.product || false;
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
|
||||||
.drawer >>> .el-drawer {
|
|
||||||
border-radius: 8px 0 0 8px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer >>> .el-form-item__label {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer >>> .el-drawer__header {
|
|
||||||
margin: 0;
|
|
||||||
padding: 32px 32px 24px;
|
|
||||||
border-bottom: 1px solid #dcdfe6;
|
|
||||||
}
|
|
||||||
.drawer >>> .el-drawer__body {
|
|
||||||
flex: 1;
|
|
||||||
height: 1px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer >>> .content {
|
|
||||||
padding: 30px 24px;
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
/* height: 100%; */
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer >>> .visual-part {
|
|
||||||
flex: 1 auto;
|
|
||||||
max-height: 76vh;
|
|
||||||
overflow: hidden;
|
|
||||||
overflow-y: scroll;
|
|
||||||
padding-right: 10px; /* 调整滚动条样式 */
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer >>> .el-form,
|
|
||||||
.drawer >>> .attr-list {
|
|
||||||
padding: 0 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer-body__footer {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
padding: 18px;
|
|
||||||
}
|
|
||||||
.action_btn {
|
|
||||||
float: right;
|
|
||||||
margin: -40px 15px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
.add {
|
|
||||||
color: #0b58ff;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
@ -1,141 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-dialog
|
|
||||||
:visible.sync="visible"
|
|
||||||
:width="'30%'"
|
|
||||||
:append-to-body="true"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
class="dialog">
|
|
||||||
<template #title>
|
|
||||||
<slot name="title">
|
|
||||||
<div class="titleStyle">
|
|
||||||
{{ !dataForm.id ? '新增' : '编辑' }}
|
|
||||||
</div>
|
|
||||||
</slot>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<el-form
|
|
||||||
ref="dataForm"
|
|
||||||
:model="dataForm"
|
|
||||||
:rules="dataRule"
|
|
||||||
label-width="70px"
|
|
||||||
@keyup.enter.native="dataFormSubmit()">
|
|
||||||
<el-form-item label="属性名" prop="attrName">
|
|
||||||
<el-input
|
|
||||||
v-model="dataForm.attrName"
|
|
||||||
placeholder="请输入属性名"
|
|
||||||
clearable />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="属性值" prop="attrValue">
|
|
||||||
<el-input
|
|
||||||
v-model="dataForm.attrValue"
|
|
||||||
placeholder="请输入属性值"
|
|
||||||
clearable />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row style="text-align: right">
|
|
||||||
<el-button @click="visible = false">取消</el-button>
|
|
||||||
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
|
|
||||||
</el-row>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import {
|
|
||||||
createMaterialAttr,
|
|
||||||
updateMaterialAttr,
|
|
||||||
getMaterialAttr
|
|
||||||
} from '@/api/base/material';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
materialId: {
|
|
||||||
type: String,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
visible: false,
|
|
||||||
dataForm: {
|
|
||||||
id: undefined,
|
|
||||||
attrName: '',
|
|
||||||
attrValue: '',
|
|
||||||
},
|
|
||||||
dataRule: {
|
|
||||||
attrName: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
init(id) {
|
|
||||||
this.dataForm.id = id || '';
|
|
||||||
this.visible = true;
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs['dataForm'].resetFields();
|
|
||||||
if (this.dataForm.id) {
|
|
||||||
getMaterialAttr({
|
|
||||||
id: this.dataForm.id
|
|
||||||
}).then((res) => {
|
|
||||||
const { attrName, attrValue } = res.data;
|
|
||||||
this.dataForm.attrName = attrName;
|
|
||||||
this.dataForm.attrValue = attrValue;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 表单提交
|
|
||||||
dataFormSubmit() {
|
|
||||||
this.$refs['dataForm'].validate((valid) => {
|
|
||||||
if (valid) {
|
|
||||||
// 修改的提交
|
|
||||||
if (this.dataForm.id) {
|
|
||||||
updateMaterialAttr({
|
|
||||||
...this.dataForm,
|
|
||||||
materialId: this.materialId,
|
|
||||||
}).then((response) => {
|
|
||||||
this.$modal.msgSuccess('修改成功');
|
|
||||||
this.visible = false;
|
|
||||||
this.$emit('refreshDataList');
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 添加的提交
|
|
||||||
createMaterialAttr({
|
|
||||||
...this.dataForm,
|
|
||||||
materialId: this.materialId,
|
|
||||||
}).then((response) => {
|
|
||||||
this.$modal.msgSuccess('新增成功');
|
|
||||||
this.visible = false;
|
|
||||||
this.$emit('refreshDataList');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.dialog >>> .el-dialog__body {
|
|
||||||
padding: 30px 24px;
|
|
||||||
}
|
|
||||||
.dialog >>> .el-dialog__header {
|
|
||||||
font-size: 16px;
|
|
||||||
color: rgba(0, 0, 0, 0.85);
|
|
||||||
font-weight: 500;
|
|
||||||
padding: 13px 24px;
|
|
||||||
border-bottom: 1px solid #e9e9e9;
|
|
||||||
}
|
|
||||||
.dialog >>> .el-dialog__header .titleStyle::before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
width: 4px;
|
|
||||||
height: 16px;
|
|
||||||
background-color: #0b58ff;
|
|
||||||
border-radius: 1px;
|
|
||||||
margin-right: 8px;
|
|
||||||
position: relative;
|
|
||||||
top: 2px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,32 +1,135 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-01 14:54:06
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-08 15:12:18
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div style="display: flex; gap: 16px; flex: 1; background: #eff1f6">
|
||||||
<search-bar
|
<div
|
||||||
:formConfigs="formConfig"
|
class="app-container"
|
||||||
ref="searchBarForm"
|
style="background: white; width: 280px; border-radius: 8px">
|
||||||
@headBtnClick="buttonClick" />
|
<div class="head-container">
|
||||||
<base-table
|
<el-input
|
||||||
v-loading="dataListLoading"
|
v-model="treeName"
|
||||||
:table-props="tableProps"
|
placeholder="请输入名称"
|
||||||
:page="listQuery.pageNo"
|
clearable
|
||||||
:limit="listQuery.pageSize"
|
size="small"
|
||||||
:table-data="tableData">
|
prefix-icon="el-icon-search"
|
||||||
<method-btn
|
style="margin-bottom: 20px" />
|
||||||
v-if="tableBtn.length"
|
</div>
|
||||||
slot="handleBtn"
|
<div class="head-container">
|
||||||
:width="120"
|
<el-tree
|
||||||
label="操作"
|
v-loading="treeLoading"
|
||||||
:method-list="tableBtn"
|
element-loading-text="拼命加载中"
|
||||||
@clickBtn="handleClick" />
|
element-loading-spinner="el-icon-loading"
|
||||||
</base-table>
|
element-loading-background="rgba(0, 0, 0, 0.8)"
|
||||||
<pagination
|
:data="deptOptions1"
|
||||||
:limit.sync="listQuery.pageSize"
|
:props="defaultProps"
|
||||||
:page.sync="listQuery.pageNo"
|
node-key="id"
|
||||||
:total="listQuery.total"
|
:expand-on-click-node="false"
|
||||||
@pagination="getDataList" />
|
:filter-node-method="filterNode"
|
||||||
<add-or-update
|
ref="tree"
|
||||||
v-if="addOrUpdateVisible"
|
default-expand-all
|
||||||
ref="addOrUpdate"
|
highlight-current
|
||||||
@refreshDataList="getDataList" />
|
@node-click="handleNodeClick">
|
||||||
|
<span class="custom-tree-node" slot-scope="{ node, data }">
|
||||||
|
<span>{{ node.label }}</span>
|
||||||
|
<span style="float: right" v-if="data.parentId !== -1">
|
||||||
|
<el-button
|
||||||
|
class="btnHover"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
v-if="data.parentId !== 0"
|
||||||
|
@click="() => edit(node, data)" />
|
||||||
|
<el-button
|
||||||
|
class="btnHover"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-circle-plus-outline"
|
||||||
|
size="mini"
|
||||||
|
@click="() => append(data)" />
|
||||||
|
<el-button
|
||||||
|
class="btnHover"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-remove-outline"
|
||||||
|
size="mini"
|
||||||
|
v-if="data.parentId !== 0"
|
||||||
|
@click="() => remove(node, data)" />
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</el-tree>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="app-container"
|
||||||
|
style="background: #fff; border-radius: 8px; width: 1px; flex: 1">
|
||||||
|
<search-bar
|
||||||
|
:formConfigs="formConfig"
|
||||||
|
ref="searchBarForm"
|
||||||
|
@headBtnClick="buttonClick" />
|
||||||
|
<base-table
|
||||||
|
v-loading="dataListLoading"
|
||||||
|
:table-props="tableProps"
|
||||||
|
:page="listQuery.pageNo"
|
||||||
|
:limit="listQuery.pageSize"
|
||||||
|
:table-data="tableData">
|
||||||
|
<method-btn
|
||||||
|
v-if="tableBtn.length"
|
||||||
|
slot="handleBtn"
|
||||||
|
:width="80"
|
||||||
|
label="操作"
|
||||||
|
:method-list="tableBtn"
|
||||||
|
@clickBtn="handleClick" />
|
||||||
|
</base-table>
|
||||||
|
<pagination
|
||||||
|
:limit.sync="listQuery.pageSize"
|
||||||
|
:page.sync="listQuery.pageNo"
|
||||||
|
:total="listQuery.total"
|
||||||
|
@pagination="getDataList" />
|
||||||
|
<base-dialog
|
||||||
|
:dialogTitle="addOrEditTitle"
|
||||||
|
:dialogVisible="addOrUpdateVisible"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
@confirm="handleConfirm"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
width="50%">
|
||||||
|
<add-or-update
|
||||||
|
ref="addOrUpdate"
|
||||||
|
@refreshDataList="successSubmit"></add-or-update>
|
||||||
|
</base-dialog>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 添加或修改菜单对话框 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="700px">
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="父类型">
|
||||||
|
<treeselect
|
||||||
|
v-model="form.parentId"
|
||||||
|
:options="deptOptions"
|
||||||
|
:normalizer="normalizer"
|
||||||
|
:show-count="true"
|
||||||
|
:appendToBody="true"
|
||||||
|
z-index="99999"
|
||||||
|
placeholder="选择父类型" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="名称" prop="name">
|
||||||
|
<el-input v-model="form.name" placeholder="请输入名称" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -34,97 +137,129 @@
|
|||||||
import AddOrUpdate from './add-or-updata';
|
import AddOrUpdate from './add-or-updata';
|
||||||
import basicPage from '../../core/mixins/basic-page';
|
import basicPage from '../../core/mixins/basic-page';
|
||||||
import { parseTime } from '../../core/mixins/code-filter';
|
import { parseTime } from '../../core/mixins/code-filter';
|
||||||
import {
|
|
||||||
getMaterialPage,
|
|
||||||
deleteMaterial
|
|
||||||
} from '@/api/base/material';
|
|
||||||
import { listData } from "@/api/system/dict/data";
|
|
||||||
import { publicFormatter } from '@/utils/dict';
|
import { publicFormatter } from '@/utils/dict';
|
||||||
|
import {
|
||||||
|
getProductMaterialPage,
|
||||||
|
deleteProductMaterial,
|
||||||
|
getMaterialTree,
|
||||||
|
createMaterialTree,
|
||||||
|
updateMaterialTree,
|
||||||
|
deleteMaterialTree,
|
||||||
|
} from '@/api/base/material';
|
||||||
|
import Treeselect from '@riophae/vue-treeselect';
|
||||||
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
|
||||||
|
|
||||||
const tableProps = [
|
const tableProps = [
|
||||||
{
|
{
|
||||||
prop: 'createTime',
|
prop: 'createTime',
|
||||||
label: '添加时间',
|
label: '添加时间',
|
||||||
filter: parseTime
|
filter: parseTime,
|
||||||
},
|
width: 150,
|
||||||
{
|
|
||||||
prop: 'code',
|
|
||||||
label: '物料编码'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'name',
|
prop: 'name',
|
||||||
label: '物料名称'
|
label: '物料产品名称',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'engName',
|
prop: 'code',
|
||||||
label: '英文名称'
|
label: '物料产品编码',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'type',
|
prop: 'typeNameChain',
|
||||||
label: '物料类型',
|
label: '物料产品类型',
|
||||||
filter: publicFormatter('material_type')
|
},
|
||||||
|
{
|
||||||
|
prop: 'unit',
|
||||||
|
label: '单位',
|
||||||
|
filter: publicFormatter('unit_dict'),
|
||||||
|
width: 60,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'specifications',
|
||||||
|
label: '规格',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'supplierName',
|
prop: 'supplierName',
|
||||||
label: '供应商'
|
label: '供应商',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注'
|
label: '备注',
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [basicPage],
|
mixins: [basicPage],
|
||||||
|
name: '',
|
||||||
|
components: {
|
||||||
|
AddOrUpdate,
|
||||||
|
Treeselect,
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
// 部门树选项
|
||||||
|
treeName: undefined,
|
||||||
|
deptOptions: undefined,
|
||||||
|
deptOptions1: undefined,
|
||||||
|
treeLoading: false,
|
||||||
|
defaultProps: {
|
||||||
|
children: 'children',
|
||||||
|
label: 'name',
|
||||||
|
},
|
||||||
|
// 弹出层标题
|
||||||
|
title: '',
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 表单参数
|
||||||
|
form: {
|
||||||
|
id: undefined,
|
||||||
|
parentId: undefined,
|
||||||
|
name: undefined,
|
||||||
|
defaultType: false,
|
||||||
|
},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
|
||||||
|
},
|
||||||
urlOptions: {
|
urlOptions: {
|
||||||
getDataListURL: getMaterialPage,
|
getDataListURL: getProductMaterialPage,
|
||||||
deleteURL: deleteMaterial
|
deleteURL: deleteProductMaterial,
|
||||||
// exportURL: exportFactoryExcel,
|
|
||||||
},
|
},
|
||||||
tableProps,
|
tableProps,
|
||||||
tableBtn: [
|
tableBtn: [
|
||||||
this.$auth.hasPermi(`base:material:queryAttr`)
|
this.$auth.hasPermi(`base:core-product:update`)
|
||||||
? {
|
|
||||||
type: 'detail',
|
|
||||||
btnName: '查看属性',
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
this.$auth.hasPermi(`base:material:update`)
|
|
||||||
? {
|
? {
|
||||||
type: 'edit',
|
type: 'edit',
|
||||||
btnName: '编辑',
|
btnName: '编辑',
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
// this.$auth.hasPermi(`base:material:editAttr`)
|
this.$auth.hasPermi(`base:core-product:delete`)
|
||||||
// ? {
|
|
||||||
// type: 'editAttr',
|
|
||||||
// btnName: '编辑属性',
|
|
||||||
// }
|
|
||||||
// : undefined,
|
|
||||||
this.$auth.hasPermi(`base:material:delete`)
|
|
||||||
? {
|
? {
|
||||||
type: 'delete',
|
type: 'delete',
|
||||||
btnName: '删除',
|
btnName: '删除',
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
].filter((v)=>v),
|
].filter((v) => v),
|
||||||
tableData: [],
|
tableData: [],
|
||||||
typeList: [],
|
|
||||||
formConfig: [
|
formConfig: [
|
||||||
{
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
label: '物料名称',
|
label: '物料产品名称',
|
||||||
placeholder: '物料名称',
|
placeholder: '物料产品名称',
|
||||||
param: 'name',
|
param: 'name',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
label: '物料编码',
|
label: '物料产品编号',
|
||||||
placeholder: '物料编码',
|
placeholder: '物料产品编号',
|
||||||
param: 'code',
|
param: 'code',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
label: '物料产品类型',
|
||||||
|
param: 'type',
|
||||||
|
disabled: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: 'button',
|
type: 'button',
|
||||||
btnName: '查询',
|
btnName: '查询',
|
||||||
@ -139,63 +274,43 @@ export default {
|
|||||||
btnName: '新增',
|
btnName: '新增',
|
||||||
name: 'add',
|
name: 'add',
|
||||||
color: 'success',
|
color: 'success',
|
||||||
plain: true
|
plain: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
components: {
|
watch: {
|
||||||
AddOrUpdate,
|
// 根据名称筛选部门树
|
||||||
|
treeName(val) {
|
||||||
|
this.$refs.tree.filter(val);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getDict()
|
this.getDataList();
|
||||||
|
this.getTreeselect();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getDict() {
|
// 删除
|
||||||
// 物料类型列表
|
deleteHandle(id, name, index) {
|
||||||
const res = await listData({
|
this.$confirm(`是否确认删除物料产品名称为"${name}"的数据项`, '提示', {
|
||||||
pageNo: 1,
|
confirmButtonText: '确定',
|
||||||
pageSize: 99,
|
cancelButtonText: '取消',
|
||||||
dictType: 'material_type',
|
type: 'warning',
|
||||||
});
|
})
|
||||||
this.typeList = res.data.list.map(item => {
|
.then(() => {
|
||||||
return {
|
this.urlOptions.deleteURL(id).then(({ data }) => {
|
||||||
label: item.label,
|
this.$message({
|
||||||
value: Number(item.value)
|
message: '操作成功',
|
||||||
}
|
type: 'success',
|
||||||
});
|
duration: 1500,
|
||||||
|
onClose: () => {
|
||||||
|
this.getDataList();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
},
|
},
|
||||||
otherMethods(val) {
|
|
||||||
if (val.type === 'detail') {
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.addOrEditTitle = '详情';
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.addOrUpdate.init(val.data.id, true);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.addOrEditTitle = '编辑';
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.addOrUpdate.init(val.data.id);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 获取数据列表
|
|
||||||
getDataList() {
|
|
||||||
this.dataListLoading = true;
|
|
||||||
this.urlOptions.getDataListURL(this.listQuery).then(response => {
|
|
||||||
this.tableData = response.data.records.map(item => {
|
|
||||||
this.typeList.filter(t => {
|
|
||||||
if (item.type === t.value) {
|
|
||||||
item.materialType = t.label
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return item
|
|
||||||
});
|
|
||||||
this.listQuery.total = response.data.total;
|
|
||||||
this.dataListLoading = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
buttonClick(val) {
|
buttonClick(val) {
|
||||||
switch (val.btnName) {
|
switch (val.btnName) {
|
||||||
case 'search':
|
case 'search':
|
||||||
@ -205,19 +320,13 @@ export default {
|
|||||||
this.listQuery.code = val.code ? val.code : undefined;
|
this.listQuery.code = val.code ? val.code : undefined;
|
||||||
this.getDataList();
|
this.getDataList();
|
||||||
break;
|
break;
|
||||||
case 'reset':
|
|
||||||
this.$refs.searchBarForm.resetForm();
|
|
||||||
this.listQuery = {
|
|
||||||
pageSize: 10,
|
|
||||||
pageNo: 1,
|
|
||||||
total: 1,
|
|
||||||
};
|
|
||||||
this.getDataList();
|
|
||||||
break;
|
|
||||||
case 'add':
|
case 'add':
|
||||||
this.addOrEditTitle = '新增';
|
this.addOrEditTitle = '新增';
|
||||||
this.addOrUpdateVisible = true;
|
this.addOrUpdateVisible = true;
|
||||||
this.addOrUpdateHandle();
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addOrUpdate.init();
|
||||||
|
this.$refs.addOrUpdate.typeId(this.listQuery.typeId,this.listQuery.product);
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
case 'export':
|
case 'export':
|
||||||
this.handleExport();
|
this.handleExport();
|
||||||
@ -226,27 +335,126 @@ export default {
|
|||||||
console.log(val);
|
console.log(val);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 删除
|
|
||||||
deleteHandle(id, name, index) {
|
/** 树操作 */
|
||||||
this.$confirm(`是否删除物料名称为"${name}"的数据项?`, "提示", {
|
|
||||||
confirmButtonText: "确定",
|
// 查询下拉树结构
|
||||||
cancelButtonText: "取消",
|
getTreeselect() {
|
||||||
type: "warning",
|
this.treeLoading = true;
|
||||||
})
|
getMaterialTree().then((response) => {
|
||||||
.then(() => {
|
// treeArr[0].push(...this.handleTree(response.data, 'id'));
|
||||||
this.urlOptions.deleteURL(id).then(({ data }) => {
|
// 处理 deptOptions 参数
|
||||||
this.$message({
|
this.deptOptions = [];
|
||||||
message: "操作成功",
|
this.treeLoading = false;
|
||||||
type: "success",
|
this.deptOptions.push(...this.handleTree(response.data, 'id'));
|
||||||
duration: 1500,
|
const arr = [{ name: '全部', parentId: -1 }];
|
||||||
onClose: () => {
|
this.deptOptions1 = arr.concat(this.deptOptions);
|
||||||
this.getDataList();
|
});
|
||||||
},
|
},
|
||||||
});
|
// 筛选节点
|
||||||
});
|
filterNode(value, data) {
|
||||||
})
|
if (!value) return true;
|
||||||
.catch(() => { });
|
return data.name.indexOf(value) !== -1;
|
||||||
}
|
},
|
||||||
|
// 节点单击事件
|
||||||
|
handleNodeClick(data) {
|
||||||
|
this.listQuery.typeId = data.id || undefined;
|
||||||
|
this.listQuery.product = data.product;
|
||||||
|
this.$refs.searchBarForm.formInline.type = data.name || undefined;
|
||||||
|
},
|
||||||
|
// 新增节点
|
||||||
|
append(data) {
|
||||||
|
this.open = true;
|
||||||
|
this.title = '新增物料产品类型';
|
||||||
|
this.form.id = undefined;
|
||||||
|
this.form.parentId = data.id;
|
||||||
|
},
|
||||||
|
// 删除节点
|
||||||
|
remove(node, data) {
|
||||||
|
this.$confirm(`是否确认删除名称为"${data.name}"的数据项`, '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
deleteMaterialTree(data.id).then(({ data }) => {
|
||||||
|
this.$message({
|
||||||
|
message: '操作成功',
|
||||||
|
type: 'success',
|
||||||
|
duration: 1500,
|
||||||
|
onClose: () => {
|
||||||
|
this.getTreeselect();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
},
|
||||||
|
// 编辑节点
|
||||||
|
edit(node, data) {
|
||||||
|
this.open = true;
|
||||||
|
this.title = '编辑物料产品类型';
|
||||||
|
this.form.id = data.id;
|
||||||
|
this.form.name = data.name;
|
||||||
|
this.form.parentId = data.parentId;
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 转换菜单数据结构 */
|
||||||
|
normalizer(node) {
|
||||||
|
if (node.children && !node.children.length) {
|
||||||
|
delete node.children;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
id: node.id,
|
||||||
|
label: node.name,
|
||||||
|
children: node.children,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: undefined,
|
||||||
|
parentId: 0,
|
||||||
|
name: undefined,
|
||||||
|
defaultType: false,
|
||||||
|
};
|
||||||
|
this.resetForm('form');
|
||||||
|
},
|
||||||
|
// 表单提交
|
||||||
|
submitForm() {
|
||||||
|
this.$refs['form'].validate((valid) => {
|
||||||
|
if (!valid) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 修改的提交
|
||||||
|
if (this.form.id) {
|
||||||
|
updateMaterialTree(this.form).then((response) => {
|
||||||
|
this.$modal.msgSuccess('修改成功');
|
||||||
|
this.cancel();
|
||||||
|
this.getTreeselect();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 添加的提交
|
||||||
|
createMaterialTree(this.form).then((response) => {
|
||||||
|
this.$modal.msgSuccess('新增成功');
|
||||||
|
this.cancel();
|
||||||
|
this.getTreeselect();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.btnHover:hover {
|
||||||
|
color: #67c23a;
|
||||||
|
transform: scale(1.5);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2021-11-18 14:16:25
|
* @Date: 2021-11-18 14:16:25
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-11-27 19:50:36
|
* @LastEditTime: 2024-07-09 09:59:11
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
@ -107,10 +107,9 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import basicAdd from '../../core/mixins/basic-add';
|
import basicAdd from '../../core/mixins/basic-add';
|
||||||
import { createMaterialPB, updateMaterialPB, getMaterialPB, getCode, getProList, getProBomList, createMaterialPBDet, updateMaterialPBDet, deleteMaterialPBDet } from "@/api/base/materialProductBom";
|
import { createMaterialPB, updateMaterialPB, getMaterialPB, getCode, getProBomList, createMaterialPBDet, updateMaterialPBDet, deleteMaterialPBDet } from "@/api/base/materialProductBom";
|
||||||
import { getMaterialList } from "@/api/base/material";
|
import { getMaterialTree,getMaterialList } from '@/api/base/material';
|
||||||
import { listData } from "@/api/system/dict/data";
|
import SmallTitle from '../coreWorkOrder/SmallTitle';
|
||||||
import SmallTitle from '../material/SmallTitle';
|
|
||||||
import { parseTime } from '../../core/mixins/code-filter';
|
import { parseTime } from '../../core/mixins/code-filter';
|
||||||
import attrAdd from './attr-add';
|
import attrAdd from './attr-add';
|
||||||
import { publicFormatter } from '@/utils/dict';
|
import { publicFormatter } from '@/utils/dict';
|
||||||
@ -183,7 +182,6 @@ export default {
|
|||||||
productList: [],
|
productList: [],
|
||||||
materialAttrList: [],
|
materialAttrList: [],
|
||||||
tableData: [],
|
tableData: [],
|
||||||
unitList: [],
|
|
||||||
visible: false,
|
visible: false,
|
||||||
isdetail: false,
|
isdetail: false,
|
||||||
idAttrShow: false,
|
idAttrShow: false,
|
||||||
@ -213,7 +211,7 @@ export default {
|
|||||||
if (this.dataForm.id) {
|
if (this.dataForm.id) {
|
||||||
this.urlOptions.updateURL(this.dataForm).then(response => {
|
this.urlOptions.updateURL(this.dataForm).then(response => {
|
||||||
this.$modal.msgSuccess("修改成功");
|
this.$modal.msgSuccess("修改成功");
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
this.$emit("refreshDataList");
|
this.$emit("refreshDataList");
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
@ -229,21 +227,14 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
async getDict() {
|
async getDict() {
|
||||||
// 产品列表
|
const materRes = await getMaterialTree();
|
||||||
const proRes = await getProList();
|
let typeId = materRes.data[0].product?materRes.data[0].id:materRes.data[1].id
|
||||||
this.productList = proRes.data;
|
const listQuery= {
|
||||||
// 物料单位列表
|
typeId:typeId
|
||||||
const unitRes = await listData({
|
}
|
||||||
pageNo: 1,
|
const materData = await getMaterialList(listQuery);
|
||||||
pageSize: 99,
|
this.productList = [];
|
||||||
dictType: 'unit_dict',
|
this.productList = materData.data;
|
||||||
});
|
|
||||||
this.unitList = unitRes.data.list.map(item => {
|
|
||||||
return {
|
|
||||||
label: item.label,
|
|
||||||
value: Number(item.value)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
initData() {
|
initData() {
|
||||||
// this.materialAttrList.splice(0);
|
// this.materialAttrList.splice(0);
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getMaterialList } from '@/api/base/material';
|
import { getMaterialTree,getMaterialList } from '@/api/base/material';
|
||||||
import { createMaterialPBDet, updateMaterialPBDet, getMaterialPBDet } from "@/api/base/materialProductBom";
|
import { createMaterialPBDet, updateMaterialPBDet, getMaterialPBDet } from "@/api/base/materialProductBom";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -117,8 +117,14 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
async getDict() {
|
async getDict() {
|
||||||
// 物料列表
|
// 物料列表
|
||||||
const res = await getMaterialList();
|
const materRes = await getMaterialTree();
|
||||||
this.materialList = res.data;
|
let typeId = materRes.data[0].product?materRes.data[1].id:materRes.data[0].id
|
||||||
|
const listQuery= {
|
||||||
|
typeId:typeId
|
||||||
|
}
|
||||||
|
const materData = await getMaterialList(listQuery);
|
||||||
|
this.materialList = [];
|
||||||
|
this.materialList = materData.data;
|
||||||
},
|
},
|
||||||
init(id) {
|
init(id) {
|
||||||
this.dataForm.id = id || '';
|
this.dataForm.id = id || '';
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2021-11-18 14:16:25
|
* @Date: 2021-11-18 14:16:25
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-11-27 19:57:23
|
* @LastEditTime: 2024-07-09 09:58:24
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
@ -22,8 +22,7 @@
|
|||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
@change="setCode"
|
@change="setCode"
|
||||||
style="width: 100%"
|
style="width: 100%">
|
||||||
>
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in materialList"
|
v-for="dict in materialList"
|
||||||
:key="dict.id"
|
:key="dict.id"
|
||||||
@ -42,14 +41,13 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="批次号" prop="materialDateId">
|
<el-form-item label="物料批次" prop="materialDateId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="dataForm.materialDateId"
|
v-model="dataForm.materialDateId"
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择物料批次"
|
placeholder="请选择物料批次"
|
||||||
style="width: 100%"
|
style="width: 100%">
|
||||||
>
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in materialDateList"
|
v-for="dict in materialDateList"
|
||||||
:key="dict.id"
|
:key="dict.id"
|
||||||
@ -81,8 +79,8 @@
|
|||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="dataForm.useTime"
|
v-model="dataForm.useTime"
|
||||||
type="datetime"
|
type="datetime"
|
||||||
format='yyyy-MM-dd HH:mm:ss'
|
format="yyyy-MM-dd HH:mm:ss"
|
||||||
value-format='timestamp'
|
value-format="timestamp"
|
||||||
placeholder="选择日期时间" />
|
placeholder="选择日期时间" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -98,8 +96,8 @@
|
|||||||
<el-option
|
<el-option
|
||||||
v-for="dict in workersList"
|
v-for="dict in workersList"
|
||||||
:key="dict.id"
|
:key="dict.id"
|
||||||
:label="dict.name"
|
:label="dict.nickname"
|
||||||
:value="dict.name" />
|
:value="dict.nickname" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -107,7 +105,12 @@
|
|||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="使用数量" prop="num">
|
<el-form-item label="使用数量" prop="num">
|
||||||
<el-input-number v-model="dataForm.num" clearable controls-position="right" placeholder="请输入使用数量" style="width: 100%" />
|
<el-input-number
|
||||||
|
v-model="dataForm.num"
|
||||||
|
clearable
|
||||||
|
controls-position="right"
|
||||||
|
placeholder="请输入使用数量"
|
||||||
|
style="width: 100%" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
@ -126,7 +129,10 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="dataForm.remark" clearable placeholder="请输入备注" />
|
<el-input
|
||||||
|
v-model="dataForm.remark"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -135,9 +141,15 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import basicAdd from '../../core/mixins/basic-add';
|
import basicAdd from '../../core/mixins/basic-add';
|
||||||
import { createMaterialLog, updateMaterialLog, getMaterialLog, getEqListAll, getworkerAll } from "@/api/base/materialUseLog";
|
import {
|
||||||
import { getMaterialList } from "@/api/base/material"
|
createMaterialLog,
|
||||||
import { getMaterDateList } from "@/api/base/materialDate"
|
updateMaterialLog,
|
||||||
|
getMaterialLog,
|
||||||
|
getEqListAll,
|
||||||
|
} from '@/api/base/materialUseLog';
|
||||||
|
import { getMaterialTree,getMaterialList } from '@/api/base/material';
|
||||||
|
import { getMaterDateList } from '@/api/base/materialDate';
|
||||||
|
import { listSimpleUsers } from '@/api/system/user';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [basicAdd],
|
mixins: [basicAdd],
|
||||||
@ -146,115 +158,127 @@ export default {
|
|||||||
urlOptions: {
|
urlOptions: {
|
||||||
createURL: createMaterialLog,
|
createURL: createMaterialLog,
|
||||||
updateURL: updateMaterialLog,
|
updateURL: updateMaterialLog,
|
||||||
infoURL: getMaterialLog
|
infoURL: getMaterialLog,
|
||||||
},
|
},
|
||||||
dataForm: {
|
dataForm: {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
materialId: undefined,
|
materialId: undefined,
|
||||||
materialCode: undefined,
|
materialCode: undefined,
|
||||||
materialDateId: undefined,
|
materialDateId: undefined,
|
||||||
equipmentId: undefined,
|
equipmentId: undefined,
|
||||||
userName: undefined,
|
userName: undefined,
|
||||||
userNames: [],
|
userNames: [],
|
||||||
useTime: new Date().getTime(),
|
useTime: new Date().getTime(),
|
||||||
address: undefined,
|
address: undefined,
|
||||||
num: 0,
|
num: 0,
|
||||||
source: undefined,
|
source: undefined,
|
||||||
remark: undefined
|
remark: undefined,
|
||||||
},
|
},
|
||||||
dataSourceList: [
|
dataSourceList: [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
name: '手动'
|
name: '手动',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
name: 'PDA'
|
name: 'PDA',
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
materialList: [],
|
materialList: [],
|
||||||
materialDateList: [],
|
materialDateList: [],
|
||||||
eqList: [],
|
eqList: [],
|
||||||
workersList: [],
|
workersList: [],
|
||||||
dataRule: {
|
dataRule: {
|
||||||
materialId: [{ required: true, message: "物料不能为空", trigger: "blur" }],
|
materialId: [
|
||||||
materialDateId: [{ required: true, message: "批次号不能为空", trigger: "blur" }],
|
{ required: true, message: '物料不能为空', trigger: 'blur' },
|
||||||
useTime: [{ required: true, message: "使用时间不能为空", trigger: "blur" }],
|
],
|
||||||
userNames: [{ required: true, message: "操作员不能为空", trigger: "blur" }],
|
useTime: [
|
||||||
num: [{ required: true, message: "使用数量不能为空", trigger: "blur" }]
|
{ required: true, message: '使用时间不能为空', trigger: 'blur' },
|
||||||
}
|
],
|
||||||
|
userNames: [
|
||||||
|
{ required: true, message: '操作员不能为空', trigger: 'blur' },
|
||||||
|
],
|
||||||
|
num: [{ required: true, message: '使用数量不能为空', trigger: 'blur' }],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.getDictData()
|
this.getDictData();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getDictData() {
|
async getDictData() {
|
||||||
const materRes = await getMaterialList()
|
const materRes = await getMaterialTree();
|
||||||
this.materialList = materRes.data
|
let typeId = materRes.data[0].product?materRes.data[1].id:materRes.data[0].id
|
||||||
const dateRes = await getMaterDateList()
|
const listQuery= {
|
||||||
this.materialDateList = dateRes.data
|
typeId:typeId
|
||||||
const eqRes = await getEqListAll()
|
}
|
||||||
this.eqList = eqRes.data
|
const materData = await getMaterialList(listQuery);
|
||||||
const workerRes = await getworkerAll()
|
this.materialList = [];
|
||||||
this.workersList = workerRes.data
|
this.materialList = materData.data;
|
||||||
|
const dateRes = await getMaterDateList();
|
||||||
|
this.materialDateList = dateRes.data;
|
||||||
|
const eqRes = await getEqListAll();
|
||||||
|
this.eqList = eqRes.data;
|
||||||
|
const workerRes = await listSimpleUsers();
|
||||||
|
this.workersList = workerRes.data;
|
||||||
},
|
},
|
||||||
// 表单提交
|
// 表单提交
|
||||||
dataFormSubmit() {
|
dataFormSubmit() {
|
||||||
this.dataForm.userName = this.dataForm.userNames.join(',')
|
this.dataForm.userName = this.dataForm.userNames.join(',');
|
||||||
this.$refs["dataForm"].validate((valid) => {
|
this.$refs['dataForm'].validate((valid) => {
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// 修改的提交
|
// 修改的提交
|
||||||
if (this.dataForm.id) {
|
if (this.dataForm.id) {
|
||||||
this.urlOptions.updateURL(this.dataForm).then(response => {
|
this.urlOptions.updateURL(this.dataForm).then((response) => {
|
||||||
this.$modal.msgSuccess("修改成功");
|
this.$modal.msgSuccess('修改成功');
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
this.$emit("refreshDataList");
|
this.$emit('refreshDataList');
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 添加的提交
|
// 添加的提交
|
||||||
this.urlOptions.createURL(this.dataForm).then(response => {
|
this.urlOptions.createURL(this.dataForm).then((response) => {
|
||||||
this.$modal.msgSuccess("新增成功");
|
this.$modal.msgSuccess('新增成功');
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
this.$emit("refreshDataList");
|
this.$emit('refreshDataList');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
init(id) {
|
init(id) {
|
||||||
this.dataForm.id = id || undefined;
|
this.dataForm.id = id || undefined;
|
||||||
this.visible = true;
|
this.visible = true;
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs["dataForm"].resetFields();
|
this.$refs['dataForm'].resetFields();
|
||||||
if (this.dataForm.id) {
|
if (this.dataForm.id) {
|
||||||
this.urlOptions.infoURL(id).then(response => {
|
this.urlOptions.infoURL(id).then((response) => {
|
||||||
this.dataForm.id = response.data.id
|
this.dataForm.id = response.data.id;
|
||||||
this.dataForm.materialCode = response.data.materialCode
|
this.dataForm.materialCode = response.data.materialCode;
|
||||||
this.dataForm.materialId = response.data.materialId
|
this.dataForm.materialId = response.data.materialId;
|
||||||
this.dataForm.materialDateId = response.data.materialDateId
|
this.dataForm.materialDateId = response.data.materialDateId;
|
||||||
this.dataForm.equipmentId = response.data.equipmentId
|
this.dataForm.equipmentId = response.data.equipmentId;
|
||||||
this.dataForm.useTime = response.data.useTime
|
this.dataForm.useTime = response.data.useTime;
|
||||||
// this.dataForm.userName = response.data.userName
|
// this.dataForm.userName = response.data.userName
|
||||||
this.dataForm.num = response.data.num
|
this.dataForm.num = response.data.num;
|
||||||
this.dataForm.source = response.data.source
|
this.dataForm.source = response.data.source;
|
||||||
this.dataForm.remark = response.data.remark
|
this.dataForm.remark = response.data.remark;
|
||||||
this.dataForm.userNames = response.data.userName.split(',')
|
this.dataForm.userNames = response.data.userName.split(',');
|
||||||
});
|
});
|
||||||
} else {}
|
} else {
|
||||||
});
|
}
|
||||||
},
|
});
|
||||||
|
},
|
||||||
setCode() {
|
setCode() {
|
||||||
const tempMaterial = this.materialList.filter(item =>{
|
const tempMaterial = this.materialList.filter((item) => {
|
||||||
return item.id === this.dataForm.materialId
|
return item.id === this.dataForm.materialId;
|
||||||
})
|
});
|
||||||
this.dataForm.materialCode = tempMaterial[0].code
|
this.dataForm.materialCode = tempMaterial[0].code;
|
||||||
getMaterDateList({materialId: this.dataForm.materialId}).then(res =>{
|
getMaterDateList({ materialId: this.dataForm.materialId }).then((res) => {
|
||||||
this.materialDateList = res.data
|
this.materialDateList = res.data;
|
||||||
})
|
});
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2022-08-24 11:19:43
|
* @Date: 2022-08-24 11:19:43
|
||||||
* @LastEditors: zhp
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-11-24 09:29:36
|
* @LastEditTime: 2024-07-05 10:10:12
|
||||||
* @Description:
|
* @Description:
|
||||||
*/
|
*/
|
||||||
export default {
|
export default {
|
||||||
@ -53,11 +53,12 @@ export default {
|
|||||||
this.listQuery.pageNo = val;
|
this.listQuery.pageNo = val;
|
||||||
this.getDataList();
|
this.getDataList();
|
||||||
},
|
},
|
||||||
// 新增 / 修改
|
// 新增
|
||||||
addOrUpdateHandle(id) {
|
addOrUpdateHandle() {
|
||||||
|
this.addOrEditTitle = '新增';
|
||||||
this.addOrUpdateVisible = true;
|
this.addOrUpdateVisible = true;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.addOrUpdate.init(id);
|
this.$refs.addOrUpdate.init();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
cancel(id) {
|
cancel(id) {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @Date: 2020-12-29 16:49:28
|
* @Date: 2020-12-29 16:49:28
|
||||||
* @LastEditors: DY
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-09-12 11:13:34
|
* @LastEditTime: 2024-07-08 16:27:39
|
||||||
* @FilePath: \basic-admin\src\filters\basicData\index.js
|
* @FilePath: \basic-admin\src\filters\basicData\index.js
|
||||||
* @Description:
|
* @Description:
|
||||||
*/
|
*/
|
||||||
@ -33,7 +33,7 @@ export function parseTime(time, pattern) {
|
|||||||
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
|
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
|
||||||
time = parseInt(time)
|
time = parseInt(time)
|
||||||
} else if (typeof time === 'string') {
|
} else if (typeof time === 'string') {
|
||||||
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm),'');
|
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm), '');
|
||||||
}
|
}
|
||||||
if ((typeof time === 'number') && (time.toString().length === 10)) {
|
if ((typeof time === 'number') && (time.toString().length === 10)) {
|
||||||
time = time * 1000
|
time = time * 1000
|
||||||
@ -62,6 +62,22 @@ export function parseTime(time, pattern) {
|
|||||||
})
|
})
|
||||||
return time_str
|
return time_str
|
||||||
}
|
}
|
||||||
|
// 遍历树结构返回数组
|
||||||
|
export function getTreeArr(arr) {
|
||||||
|
let result =[]
|
||||||
|
arr.forEach(item => {
|
||||||
|
if(item.children && item.children.length>0){
|
||||||
|
let {children,...obj} = item
|
||||||
|
result.push(obj)
|
||||||
|
result = result.concat(getTreeArr(children))
|
||||||
|
}else{
|
||||||
|
let {children,...obj} = item
|
||||||
|
result.push(obj)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
export default function (dictTable) {
|
export default function (dictTable) {
|
||||||
return function (val) {
|
return function (val) {
|
||||||
return table?.[dictTable]?.[val]
|
return table?.[dictTable]?.[val]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!--
|
<!--
|
||||||
filename: index.vue
|
filename: index.vue
|
||||||
author: liubin
|
author: liubin
|
||||||
date: 2023-09-04 09:34:52
|
date: 2023-09-04 09:34:52
|
||||||
@ -280,7 +280,7 @@ export default {
|
|||||||
|
|
||||||
async fillProductOptions() {
|
async fillProductOptions() {
|
||||||
const { data } = await this.$axios({
|
const { data } = await this.$axios({
|
||||||
url: '/base/core-product/listAll',
|
url: '/base/core-product-material/listAll',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
const cfg = this.searchBarFormConfig.find(
|
const cfg = this.searchBarFormConfig.find(
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
filename: EquipmentDrawer.vue
|
filename: EquipmentDrawer.vue
|
||||||
author: liubin
|
author: liubin
|
||||||
date: 2023-08-22 14:38:56
|
date: 2023-08-22 14:38:56
|
||||||
description:
|
description:
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -383,7 +383,7 @@ export default {
|
|||||||
|
|
||||||
// 新增属性
|
// 新增属性
|
||||||
handleAddAttr() {
|
handleAddAttr() {
|
||||||
if (!this.dataId) return this.$message.error('请先创建设备分组信息');
|
if (!this.dataId) return this.$message.warning('请先创建设备分组信息');
|
||||||
this.attrForm = {
|
this.attrForm = {
|
||||||
id: null,
|
id: null,
|
||||||
equipmentGroupId: this.dataId,
|
equipmentGroupId: this.dataId,
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
filename: EquipmentDrawer.vue
|
filename: EquipmentDrawer.vue
|
||||||
author: liubin
|
author: liubin
|
||||||
date: 2023-08-22 14:38:56
|
date: 2023-08-22 14:38:56
|
||||||
description:
|
description:
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -382,7 +382,7 @@ export default {
|
|||||||
|
|
||||||
// 新增属性
|
// 新增属性
|
||||||
handleAddAttr() {
|
handleAddAttr() {
|
||||||
if (!this.dataId) return this.$message.error('请先创建设备分组信息');
|
if (!this.dataId) return this.$message.warning('请先创建设备分组信息');
|
||||||
this.attrForm = {
|
this.attrForm = {
|
||||||
id: null,
|
id: null,
|
||||||
equipmentGroupId: this.dataId,
|
equipmentGroupId: this.dataId,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!--
|
<!--
|
||||||
filename: index.vue
|
filename: index.vue
|
||||||
author: liubin
|
author: liubin
|
||||||
date: 2023-09-04 09:34:52
|
date: 2023-09-04 09:34:52
|
||||||
@ -270,7 +270,7 @@ export default {
|
|||||||
switch (btnName) {
|
switch (btnName) {
|
||||||
case 'search':
|
case 'search':
|
||||||
if (!payload.recordTime || payload.recordTime.length <= 0) {
|
if (!payload.recordTime || payload.recordTime.length <= 0) {
|
||||||
this.$message.error('请选择时间段');
|
this.$message.warning('请选择时间段');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.startTime = new Date(payload.recordTime).getTime();
|
this.startTime = new Date(payload.recordTime).getTime();
|
||||||
@ -493,7 +493,7 @@ export default {
|
|||||||
if (code == 0) {
|
if (code == 0) {
|
||||||
const newEqlist = this.objectToArray(data);
|
const newEqlist = this.objectToArray(data);
|
||||||
if (!newEqlist || newEqlist.length == 0) {
|
if (!newEqlist || newEqlist.length == 0) {
|
||||||
this.$message.error('该设备没有产量数据');
|
this.$message.warning('该设备没有产量数据');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.graphList.push(...newEqlist);
|
this.graphList.push(...newEqlist);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!--
|
<!--
|
||||||
filename: index.vue
|
filename: index.vue
|
||||||
author: liubin
|
author: liubin
|
||||||
date: 2023-09-04 09:34:52
|
date: 2023-09-04 09:34:52
|
||||||
@ -338,7 +338,7 @@ export default {
|
|||||||
switch (btnName) {
|
switch (btnName) {
|
||||||
case 'search':
|
case 'search':
|
||||||
if (!payload.recordTime || payload.recordTime.length <= 0) {
|
if (!payload.recordTime || payload.recordTime.length <= 0) {
|
||||||
this.$message.error('请选择时间段');
|
this.$message.warning('请选择时间段');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +373,7 @@ export default {
|
|||||||
|
|
||||||
async submitForm() {
|
async submitForm() {
|
||||||
if (this.existingEquipments.indexOf(this.queryParams.equipmentId) >= 0) {
|
if (this.existingEquipments.indexOf(this.queryParams.equipmentId) >= 0) {
|
||||||
this.$message.error('该设备已存在');
|
this.$message.warning('该设备已存在');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const { code, data } = await this.$axios({
|
const { code, data } = await this.$axios({
|
||||||
@ -387,7 +387,7 @@ export default {
|
|||||||
if (code == 0) {
|
if (code == 0) {
|
||||||
const newEqlist = this.objectToArray(data);
|
const newEqlist = this.objectToArray(data);
|
||||||
if (!newEqlist || newEqlist.length == 0) {
|
if (!newEqlist || newEqlist.length == 0) {
|
||||||
this.$message.error('该设备没有状态数据');
|
this.$message.warning('该设备没有状态数据');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.graphList.push(newEqlist[0]);
|
this.graphList.push(newEqlist[0]);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zwq
|
* @Author: zwq
|
||||||
* @Date: 2021-11-18 14:16:25
|
* @Date: 2021-11-18 14:16:25
|
||||||
* @LastEditors: zhp
|
* @LastEditors: zwq
|
||||||
* @LastEditTime: 2023-11-28 10:03:20
|
* @LastEditTime: 2024-07-09 13:40:03
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zhp
|
* @Author: zhp
|
||||||
* @Date: 2023-11-08 15:30:27
|
* @Date: 2023-11-08 15:30:27
|
||||||
* @LastEditTime: 2023-11-23 14:27:59
|
* @LastEditTime: 2024-07-09 13:29:06
|
||||||
* @LastEditors: zhp
|
* @LastEditors: zwq
|
||||||
* @Description:
|
* @Description:
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
@ -42,8 +42,8 @@ import {
|
|||||||
getProcessEquMaterialBomDet,
|
getProcessEquMaterialBomDet,
|
||||||
createProcessEquMaterialBomDetList,
|
createProcessEquMaterialBomDetList,
|
||||||
updateProcessEquMaterialBomDet,
|
updateProcessEquMaterialBomDet,
|
||||||
getMaterialList
|
|
||||||
} from '@/api/extend/processEquMaterialBom';
|
} from '@/api/extend/processEquMaterialBom';
|
||||||
|
import { getMaterialTree,getMaterialList } from '@/api/base/material';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
@ -94,12 +94,16 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getDict() {
|
async getDict() {
|
||||||
getMaterialList().then((res) => [
|
const materRes = await getMaterialTree();
|
||||||
this.materialList = res.data,
|
let typeId = materRes.data[0].product?materRes.data[1].id:materRes.data[0].id
|
||||||
console.log(res)
|
const listQuery= {
|
||||||
])
|
typeId:typeId
|
||||||
},
|
}
|
||||||
|
const materData = await getMaterialList(listQuery);
|
||||||
|
this.materialList = [];
|
||||||
|
this.materialList = materData.data;
|
||||||
|
},
|
||||||
// 表单提交
|
// 表单提交
|
||||||
dataFormSubmit() {
|
dataFormSubmit() {
|
||||||
this.$refs['dataForm'].validate((valid) => {
|
this.$refs['dataForm'].validate((valid) => {
|
||||||
|
@ -12,32 +12,6 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="生效时间" prop="enableTime">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="form.enableTime"
|
|
||||||
type="datetime"
|
|
||||||
placeholder="选择日期时间"
|
|
||||||
label-format="yyyy-MM-dd HH:mm:ss"
|
|
||||||
value-format="timestamp"
|
|
||||||
style="width: 100%;">
|
|
||||||
</el-date-picker>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="失效时间" prop="disableTime">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="form.disableTime"
|
|
||||||
type="datetime"
|
|
||||||
placeholder="选择日期时间"
|
|
||||||
label-format="yyyy-MM-dd HH:mm:ss"
|
|
||||||
value-format="timestamp"
|
|
||||||
style="width: 100%;">
|
|
||||||
</el-date-picker>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="班次开始时间" prop="startTime">
|
<el-form-item label="班次开始时间" prop="startTime">
|
||||||
@ -91,8 +65,6 @@ export default {
|
|||||||
id: '',
|
id: '',
|
||||||
name: '',
|
name: '',
|
||||||
code: '',
|
code: '',
|
||||||
enableTime: '',
|
|
||||||
disableTime: '',
|
|
||||||
startTime: '',
|
startTime: '',
|
||||||
endTime: '',
|
endTime: '',
|
||||||
daySpan: '',
|
daySpan: '',
|
||||||
@ -101,7 +73,6 @@ export default {
|
|||||||
isEdit: false, //是否是编辑
|
isEdit: false, //是否是编辑
|
||||||
rules: {
|
rules: {
|
||||||
name: [{ required: true, message: '请输入班组名称', trigger: 'blur' }],
|
name: [{ required: true, message: '请输入班组名称', trigger: 'blur' }],
|
||||||
enableTime: [{ required: true, message: '请选择班次开始时间', trigger: 'change' }],
|
|
||||||
code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
|
code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
|
||||||
startTime: [{ required: true, message: '请输入生效时间', trigger: 'change' }],
|
startTime: [{ required: true, message: '请输入生效时间', trigger: 'change' }],
|
||||||
endTime: [{ required: true, message: '请选择班次结束时间', trigger: 'change' }]
|
endTime: [{ required: true, message: '请选择班次结束时间', trigger: 'change' }]
|
||||||
@ -116,7 +87,6 @@ export default {
|
|||||||
getGroupClasses(id).then((res) => {
|
getGroupClasses(id).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.form = res.data
|
this.form = res.data
|
||||||
this.form.disableTime = res.data.disableTime || ''
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -146,7 +116,6 @@ export default {
|
|||||||
submitForm() {
|
submitForm() {
|
||||||
this.$refs['form'].validate((valid) => {
|
this.$refs['form'].validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.form.disableTime = this.form.disableTime || ''
|
|
||||||
if (this.isEdit) {
|
if (this.isEdit) {
|
||||||
//编辑
|
//编辑
|
||||||
updateGroupClasses({ ...this.form }).then((res) => {
|
updateGroupClasses({ ...this.form }).then((res) => {
|
||||||
|
52
src/views/group/base/groupClasses/components/statusBtn.vue
Normal file
52
src/views/group/base/groupClasses/components/statusBtn.vue
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-01 14:53:55
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-10 10:28:05
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<el-switch v-model="state" type="text" size="small" :disabled="readonly" @change="changeHandler" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
state: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
readonly() {
|
||||||
|
return !!this.injectData.readonly
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.mapToState()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
mapToState() {
|
||||||
|
if (this.injectData.prop === 'enabled') {
|
||||||
|
this.state = this.injectData.enabled === 1 ? true : false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
changeHandler() {
|
||||||
|
let params = {}
|
||||||
|
let payload = {}
|
||||||
|
params.name = 'state'
|
||||||
|
payload.id = this.injectData.id
|
||||||
|
payload.enabled = this.state ? '1' : '0'
|
||||||
|
payload.startTime = this.injectData.startTime
|
||||||
|
payload.endTime = this.injectData.endTime
|
||||||
|
params.payload = payload
|
||||||
|
this.$emit('emitData', params)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -1,262 +1,263 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-01 14:53:55
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-12 16:19:13
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
<!-- 搜索工作栏 -->
|
<search-bar
|
||||||
<search-bar
|
:formConfigs="formConfig"
|
||||||
:formConfigs="formConfig"
|
ref="searchBarForm"
|
||||||
ref="searchBarForm"
|
@headBtnClick="buttonClick" />
|
||||||
@headBtnClick="buttonClick"
|
<!-- 列表 -->
|
||||||
/>
|
<base-table
|
||||||
<!-- 列表 -->
|
:page="queryParams.pageNo"
|
||||||
<base-table
|
:limit="queryParams.pageSize"
|
||||||
:page="queryParams.pageNo"
|
:table-props="tableProps"
|
||||||
:limit="queryParams.pageSize"
|
:table-data="list"
|
||||||
:table-props="tableProps"
|
:max-height="tableH"
|
||||||
:table-data="list"
|
@emitFun="handleTableEvents">
|
||||||
:max-height="tableH"
|
<method-btn
|
||||||
>
|
v-if="tableBtn.length"
|
||||||
<method-btn
|
slot="handleBtn"
|
||||||
v-if="tableBtn.length"
|
:width="120"
|
||||||
slot="handleBtn"
|
label="操作"
|
||||||
:width="120"
|
:method-list="tableBtn"
|
||||||
label="操作"
|
@clickBtn="handleClick" />
|
||||||
:method-list="tableBtn"
|
</base-table>
|
||||||
@clickBtn="handleClick"
|
<pagination
|
||||||
/>
|
:page.sync="queryParams.pageNo"
|
||||||
</base-table>
|
:limit.sync="queryParams.pageSize"
|
||||||
<pagination
|
:total="total"
|
||||||
:page.sync="queryParams.pageNo"
|
@pagination="getList" />
|
||||||
:limit.sync="queryParams.pageSize"
|
<!-- 新增 -->
|
||||||
:total="total"
|
<base-dialog
|
||||||
@pagination="getList"
|
:dialogTitle="addOrEditTitle"
|
||||||
/>
|
:dialogVisible="centervisible"
|
||||||
<!-- 新增 -->
|
@cancel="handleCancel"
|
||||||
<base-dialog
|
@confirm="handleConfirm"
|
||||||
:dialogTitle="addOrEditTitle"
|
:before-close="handleCancel"
|
||||||
:dialogVisible="centervisible"
|
width="50%">
|
||||||
@cancel="handleCancel"
|
<group-class-add ref="classList" @successSubmit="successSubmit" />
|
||||||
@confirm="handleConfirm"
|
</base-dialog>
|
||||||
:before-close="handleCancel"
|
</div>
|
||||||
width='50%'
|
|
||||||
>
|
|
||||||
<group-class-add ref="classList" @successSubmit="successSubmit" />
|
|
||||||
</base-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getGroupClassesPage, deleteGroupClasses, updateGroupClasses } from "@/api/base/groupClasses";
|
import {
|
||||||
import GroupClassAdd from './components/groupClassAdd.vue'
|
getGroupClassesPage,
|
||||||
import { formatDate } from '@/utils'
|
deleteGroupClasses,
|
||||||
|
updateGroupClasses,
|
||||||
|
} from '@/api/base/groupClasses';
|
||||||
|
import GroupClassAdd from './components/groupClassAdd.vue';
|
||||||
|
import StatusBtn from './components/statusBtn';
|
||||||
const tableProps = [
|
const tableProps = [
|
||||||
{
|
{
|
||||||
prop: 'enableTimeStr',
|
prop: 'name',
|
||||||
label: '生效时段',
|
label: '班次名称',
|
||||||
minWidth: 300
|
},
|
||||||
},
|
{
|
||||||
{
|
prop: 'timeStr',
|
||||||
prop: 'name',
|
label: '班次时间',
|
||||||
label: '班次名称'
|
minWidth: 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'timeStr',
|
prop: 'code',
|
||||||
label: '班次时间',
|
label: '班次编码',
|
||||||
minWidth: 100
|
minWidth: 200,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'code',
|
prop: 'enabled',
|
||||||
label: '班次编码',
|
label: '班次状态',
|
||||||
minWidth: 200
|
subcomponent: StatusBtn,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'status',
|
prop: 'remark',
|
||||||
label: '班次状态'
|
label: '备注',
|
||||||
},
|
},
|
||||||
{
|
];
|
||||||
prop: 'remark',
|
|
||||||
label: '备注'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
export default {
|
export default {
|
||||||
name: "GroupClass",
|
name: 'GroupClass',
|
||||||
components: { GroupClassAdd },
|
components: { GroupClassAdd },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
formConfig: [
|
formConfig: [
|
||||||
{
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
label: '班次名称',
|
label: '班次名称',
|
||||||
placeholder: '班次名称',
|
placeholder: '班次名称',
|
||||||
param: 'name'
|
param: 'name',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'button',
|
type: 'button',
|
||||||
btnName: '查询',
|
btnName: '查询',
|
||||||
name: 'search',
|
name: 'search',
|
||||||
color: 'primary'
|
color: 'primary',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'separate'
|
type: 'separate',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: this.$auth.hasPermi('base:group-classes:create') ? 'button' : '',
|
type: this.$auth.hasPermi('base:group-classes:create')
|
||||||
btnName: '新增',
|
? 'button'
|
||||||
name: 'add',
|
: '',
|
||||||
color: 'success',
|
btnName: '新增',
|
||||||
plain: true
|
name: 'add',
|
||||||
}
|
color: 'success',
|
||||||
],
|
plain: true,
|
||||||
tableProps,
|
},
|
||||||
tableBtn: [
|
],
|
||||||
this.$auth.hasPermi('base:group-classes:cancel')
|
tableProps,
|
||||||
? {
|
tableBtn: [
|
||||||
type: 'cancel',
|
this.$auth.hasPermi('base:group-classes:update')
|
||||||
btnName: '作废',
|
? {
|
||||||
showParam: {
|
type: 'edit',
|
||||||
type: '&',
|
btnName: '编辑',
|
||||||
data: [
|
}
|
||||||
{
|
: undefined,
|
||||||
type: 'unequal',
|
this.$auth.hasPermi('base:group-classes:delete')
|
||||||
name: 'status',
|
? {
|
||||||
value: '不可用'
|
type: 'delete',
|
||||||
}
|
btnName: '删除',
|
||||||
]
|
}
|
||||||
}
|
: undefined,
|
||||||
}
|
].filter((v) => v),
|
||||||
: undefined,
|
tableH: this.tableHeight(260),
|
||||||
this.$auth.hasPermi('base:group-classes:update')
|
// 总条数
|
||||||
? {
|
total: 0,
|
||||||
type: 'edit',
|
// 班次基础信息列表
|
||||||
btnName: '编辑'
|
list: [],
|
||||||
}
|
// 弹出层标题
|
||||||
: undefined,
|
addOrEditTitle: '',
|
||||||
this.$auth.hasPermi('base:group-classes:delete')
|
// 是否显示弹出层
|
||||||
? {
|
centervisible: false,
|
||||||
type: 'delete',
|
// 查询参数
|
||||||
btnName: '删除'
|
queryParams: {
|
||||||
}
|
pageNo: 1,
|
||||||
: undefined
|
pageSize: 20,
|
||||||
].filter((v) => v),
|
name: null,
|
||||||
tableH: this.tableHeight(260),
|
},
|
||||||
// 总条数
|
};
|
||||||
total: 0,
|
},
|
||||||
// 班次基础信息列表
|
created() {
|
||||||
list: [],
|
window.addEventListener('resize', () => {
|
||||||
// 弹出层标题
|
this.tableH = this.tableHeight(260);
|
||||||
addOrEditTitle: "",
|
});
|
||||||
// 是否显示弹出层
|
this.getList();
|
||||||
centervisible: false,
|
},
|
||||||
// 查询参数
|
methods: {
|
||||||
queryParams: {
|
buttonClick(val) {
|
||||||
pageNo: 1,
|
switch (val.btnName) {
|
||||||
pageSize: 20,
|
case 'search':
|
||||||
name: null
|
this.queryParams.pageNo = 1;
|
||||||
}
|
this.queryParams.name = val.name;
|
||||||
};
|
this.getList();
|
||||||
},
|
break;
|
||||||
created() {
|
default:
|
||||||
window.addEventListener('resize', () => {
|
this.addOrEditTitle = '新增';
|
||||||
this.tableH = this.tableHeight(260)
|
this.centervisible = true;
|
||||||
})
|
this.$nextTick(() => {
|
||||||
this.getList()
|
this.$refs.classList.init();
|
||||||
},
|
});
|
||||||
methods: {
|
}
|
||||||
buttonClick(val) {
|
},
|
||||||
switch (val.btnName) {
|
// 班组状态
|
||||||
case 'search':
|
handleTableEvents(params) {
|
||||||
this.queryParams.pageNo = 1;
|
if (params.name === 'state') {
|
||||||
this.queryParams.name = val.name
|
// 班组状态
|
||||||
this.getList()
|
updateGroupClasses({ ...params.payload })
|
||||||
break
|
.then((res) => {
|
||||||
default:
|
if (res.code === 0) {
|
||||||
this.addOrEditTitle = '新增'
|
this.$modal.msgSuccess('操作成功');
|
||||||
this.centervisible = true
|
this.getList();
|
||||||
this.$nextTick(() => {
|
}
|
||||||
this.$refs.classList.init()
|
})
|
||||||
})
|
.catch((res) => {
|
||||||
}
|
this.getList();
|
||||||
},
|
});
|
||||||
/** 查询列表 */
|
}
|
||||||
getList() {
|
},
|
||||||
getGroupClassesPage(this.queryParams).then(res => {
|
/** 查询列表 */
|
||||||
if (res.code === 0 && res.data.list.length > 0) {
|
getList() {
|
||||||
res.data.list.map(item => {
|
getGroupClassesPage(this.queryParams).then((res) => {
|
||||||
item.enableTimeStr = formatDate(item.enableTime) + '至' + (item.disableTime ? formatDate(item.disableTime) : '永久')
|
if (res.code === 0 && res.data.list && res.data.list.length > 0) {
|
||||||
item.timeStr = item.startTime.slice(0, 5) + '-' + item.endTime.slice(0, 5)
|
res.data.list.map((item) => {
|
||||||
item.status = item.status === true ? '可用' : '不可用'
|
item.timeStr =
|
||||||
})
|
item.startTime.slice(0, 5) + '-' + item.endTime.slice(0, 5);
|
||||||
this.list = res.data.list;
|
});
|
||||||
this.total = res.data.total;
|
this.list = res.data.list;
|
||||||
} else {
|
this.total = res.data.total;
|
||||||
this.list = []
|
} else {
|
||||||
this.total = 0
|
this.list = [];
|
||||||
}
|
this.total = 0;
|
||||||
});
|
}
|
||||||
},
|
});
|
||||||
handleClick(val) {
|
},
|
||||||
switch (val.type) {
|
handleClick(val) {
|
||||||
case 'edit':
|
switch (val.type) {
|
||||||
this.addOrEditTitle = '编辑'
|
case 'edit':
|
||||||
this.$nextTick(() => {
|
this.addOrEditTitle = '编辑';
|
||||||
this.$refs.classList.init(val.data.id)
|
this.$nextTick(() => {
|
||||||
})
|
this.$refs.classList.init(val.data.id);
|
||||||
this.centervisible = true
|
});
|
||||||
break
|
this.centervisible = true;
|
||||||
case 'cancel':
|
break;
|
||||||
this.discard(val.data)
|
default:
|
||||||
break
|
this.handleDelete(val.data);
|
||||||
default:
|
}
|
||||||
this.handleDelete(val.data)
|
},
|
||||||
}
|
handleCancel() {
|
||||||
},
|
this.$refs.classList.formClear();
|
||||||
handleCancel() {
|
this.centervisible = false;
|
||||||
this.$refs.classList.formClear()
|
this.addOrEditTitle = '';
|
||||||
this.centervisible = false
|
},
|
||||||
this.addOrEditTitle = ''
|
handleConfirm() {
|
||||||
},
|
this.$refs.classList.submitForm();
|
||||||
handleConfirm() {
|
},
|
||||||
this.$refs.classList.submitForm()
|
successSubmit() {
|
||||||
},
|
this.handleCancel();
|
||||||
successSubmit() {
|
this.getList();
|
||||||
this.handleCancel()
|
},
|
||||||
this.getList()
|
/** 删除按钮操作 */
|
||||||
},
|
handleDelete(row) {
|
||||||
discard(row) {
|
console.log(row);
|
||||||
let obj = {}
|
let _this = this;
|
||||||
obj.id = row.id
|
if (row.enabled) {
|
||||||
obj.startTime = row.startTime
|
// 可用
|
||||||
obj.endTime = row.endTime
|
_this.$modal
|
||||||
obj.enableTime = row.enableTime
|
.confirm(
|
||||||
obj.disableTime = Date.parse(new Date())
|
'删除的班次"' +
|
||||||
this.$modal.confirm('是否确认作废班次名称为"' + row.name + '"的数据项?').then(function() {
|
row.name +
|
||||||
return updateGroupClasses({ ...obj })
|
'"可能会影响交接班计划,请点取消再次确认!'
|
||||||
}).then(() => {
|
)
|
||||||
this.getList();
|
.then(function () {
|
||||||
this.$modal.msgSuccess("操作成功");
|
return _this.$modal
|
||||||
}).catch(() => {});
|
.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?')
|
||||||
},
|
.then(function () {
|
||||||
/** 删除按钮操作 */
|
return deleteGroupClasses(row.id);
|
||||||
handleDelete(row) {
|
})
|
||||||
console.log(row)
|
.then(() => {
|
||||||
let _this = this
|
_this.getList();
|
||||||
if (row.status === '可用') {// 可用
|
_this.$modal.msgSuccess('删除成功');
|
||||||
_this.$modal.confirm('删除的班次"' + row.name + '"可能会影响交接班计划,请点取消再次确认!').then(function() {
|
})
|
||||||
return _this.$modal.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?').then(function() {
|
.catch(() => {});
|
||||||
return deleteGroupClasses(row.id);
|
});
|
||||||
}).then(() => {
|
} else {
|
||||||
_this.getList();
|
_this.$modal
|
||||||
_this.$modal.msgSuccess("删除成功");
|
.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?')
|
||||||
}).catch(() => {});
|
.then(function () {
|
||||||
})
|
return deleteGroupClasses(row.id);
|
||||||
} else {
|
})
|
||||||
_this.$modal.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?').then(function() {
|
.then(() => {
|
||||||
return deleteGroupClasses(row.id);
|
_this.getList();
|
||||||
}).then(() => {
|
_this.$modal.msgSuccess('删除成功');
|
||||||
_this.getList();
|
})
|
||||||
_this.$modal.msgSuccess("删除成功");
|
.catch(() => {});
|
||||||
}).catch(() => {});
|
}
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -14,20 +14,18 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="班组组长" prop="leaderId">
|
<el-form-item label="班组组长" prop="leaderName">
|
||||||
<el-select v-model="form.leaderId" placeholder="请选择" style="width: 100%;" filterable @change="selectLeader">
|
<el-input v-model="form.leaderName" clearable></el-input>
|
||||||
<el-option
|
|
||||||
v-for="item in workerList"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="手机号" prop="telephone">
|
<el-form-item label="手机号" prop="leaderPhone">
|
||||||
<el-input v-model="form.telephone" disabled></el-input>
|
<el-input v-model="form.leaderPhone" clearable></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="班组人数" prop="num">
|
||||||
|
<el-input-number style="width: 100%;" v-model="form.num" :step="1" step-strictly></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -35,7 +33,6 @@
|
|||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getGroupTeam, updateGroupTeam, createGroupTeam, getCode } from '@/api/base/groupTeam'
|
import { getGroupTeam, updateGroupTeam, createGroupTeam, getCode } from '@/api/base/groupTeam'
|
||||||
import { getWorkerList } from '@/api/base/worker'
|
|
||||||
export default {
|
export default {
|
||||||
name: 'groupTeamAdd',
|
name: 'groupTeamAdd',
|
||||||
data() {
|
data() {
|
||||||
@ -44,28 +41,26 @@ export default {
|
|||||||
id: '',
|
id: '',
|
||||||
name: '',
|
name: '',
|
||||||
code: '',
|
code: '',
|
||||||
leaderId: '',
|
leaderName: '',
|
||||||
telephone: ''
|
leaderPhone: '',
|
||||||
|
num: ''
|
||||||
},
|
},
|
||||||
isEdit: false, //是否是编辑
|
isEdit: false, //是否是编辑
|
||||||
rules: {
|
rules: {
|
||||||
name: [{ required: true, message: '请输入班组名称', trigger: 'blur' }],
|
name: [{ required: true, message: '请输入班组名称', trigger: 'blur' }],
|
||||||
code: [{ required: true, message: '请输入班组编码', trigger: 'blur' }],
|
code: [{ required: true, message: '请输入班组编码', trigger: 'blur' }],
|
||||||
leaderId: [{ required: true, message: '请选择组长', trigger: 'select' }]
|
leaderName: [{ required: true, message: '请输入组长', trigger: 'blur' }]
|
||||||
},
|
},
|
||||||
workerList: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
init(id) {
|
init(id) {
|
||||||
this.getWorkerList()
|
|
||||||
if (id) {
|
if (id) {
|
||||||
this.isEdit = true
|
this.isEdit = true
|
||||||
this.form.id = id
|
this.form.id = id
|
||||||
getGroupTeam( id ).then((res) => {
|
getGroupTeam( id ).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.form = res.data
|
this.form = res.data
|
||||||
this.selectLeader()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -76,24 +71,6 @@ export default {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 获取员工list
|
|
||||||
getWorkerList() {
|
|
||||||
getWorkerList().then(res => {
|
|
||||||
this.workerList = res.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 获取手机号
|
|
||||||
selectLeader() {
|
|
||||||
if (this.form.leaderId) {
|
|
||||||
this.workerList.map(item => {
|
|
||||||
if (item.id === this.form.leaderId) {
|
|
||||||
this.form.telephone = item.telephone || ''
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
this.form.telephone = ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
submitForm() {
|
submitForm() {
|
||||||
this.$refs['form'].validate((valid) => {
|
this.$refs['form'].validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-01 14:53:55
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-10 10:00:03
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
<template>
|
<template>
|
||||||
<el-switch v-model="state" type="text" size="small" :disabled="readonly" @change="changeHandler" />
|
<el-switch v-model="state" type="text" size="small" :disabled="readonly" @change="changeHandler" />
|
||||||
</template>
|
</template>
|
||||||
@ -37,7 +44,7 @@ export default {
|
|||||||
payload.enabled = this.state ? '1' : '0'
|
payload.enabled = this.state ? '1' : '0'
|
||||||
payload.code = this.injectData.code
|
payload.code = this.injectData.code
|
||||||
payload.name = this.injectData.name
|
payload.name = this.injectData.name
|
||||||
payload.leaderId = this.injectData.leaderId
|
payload.leaderName = this.injectData.leaderName
|
||||||
params.payload = payload
|
params.payload = payload
|
||||||
this.$emit('emitData', params)
|
this.$emit('emitData', params)
|
||||||
}
|
}
|
||||||
|
@ -193,7 +193,7 @@ export default {
|
|||||||
},
|
},
|
||||||
getList() {
|
getList() {
|
||||||
groupTeamPage({ ...this.queryParams }).then(res => {
|
groupTeamPage({ ...this.queryParams }).then(res => {
|
||||||
if (res.code === 0 && res.data.list.length > 0) {
|
if (res.code === 0 && res.data.list && res.data.list.length > 0) {
|
||||||
let arr = []
|
let arr = []
|
||||||
res.data.list.map(item => {
|
res.data.list.map(item => {
|
||||||
let obj = {}
|
let obj = {}
|
||||||
@ -307,4 +307,4 @@ export default {
|
|||||||
padding-top: 30px;
|
padding-top: 30px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -42,8 +42,6 @@
|
|||||||
>
|
>
|
||||||
<group-team-add ref="groupList" @successSubmit="successSubmit" />
|
<group-team-add ref="groupList" @successSubmit="successSubmit" />
|
||||||
</base-dialog>
|
</base-dialog>
|
||||||
<!-- 组员编辑 -->
|
|
||||||
<worker-edit v-if='paramVisible' ref='workerEditParam' @closeDrawer="closeDrawer"></worker-edit>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -52,8 +50,6 @@ import { getGroupTeamPage, deleteGroupTeam, updateGroupTeam } from "@/api/base/g
|
|||||||
import { parseTime } from '@/utils/ruoyi'
|
import { parseTime } from '@/utils/ruoyi'
|
||||||
import GroupTeamAdd from './components/groupTeamAdd'
|
import GroupTeamAdd from './components/groupTeamAdd'
|
||||||
import StatusBtn from './components/statusBtn'
|
import StatusBtn from './components/statusBtn'
|
||||||
import WorkerOperate from './components/workerOperate'
|
|
||||||
import WorkerEdit from './components/workerEdit'
|
|
||||||
const tableProps = [
|
const tableProps = [
|
||||||
{
|
{
|
||||||
prop: 'createTime',
|
prop: 'createTime',
|
||||||
@ -83,15 +79,10 @@ const tableProps = [
|
|||||||
label: '班组状态',
|
label: '班组状态',
|
||||||
subcomponent: StatusBtn
|
subcomponent: StatusBtn
|
||||||
},
|
},
|
||||||
{
|
|
||||||
prop: 'workerName',
|
|
||||||
label: '组员',
|
|
||||||
subcomponent: WorkerOperate
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
export default {
|
export default {
|
||||||
name: "GroupTeam",
|
name: "GroupTeam",
|
||||||
components: { GroupTeamAdd, WorkerEdit },
|
components: { GroupTeamAdd },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
formConfig: [
|
formConfig: [
|
||||||
@ -155,7 +146,6 @@ export default {
|
|||||||
name: null,
|
name: null,
|
||||||
code: null
|
code: null
|
||||||
},
|
},
|
||||||
paramVisible: false
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@ -203,17 +193,14 @@ export default {
|
|||||||
},
|
},
|
||||||
// 班组状态
|
// 班组状态
|
||||||
handleTableEvents(params) {
|
handleTableEvents(params) {
|
||||||
console.log(params)
|
|
||||||
if (params.name === 'state') {// 班组状态
|
if (params.name === 'state') {// 班组状态
|
||||||
updateGroupTeam({ ...params.payload }).then((res) => {
|
updateGroupTeam({ ...params.payload }).then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.$modal.msgSuccess("操作成功");
|
this.$modal.msgSuccess("操作成功");
|
||||||
|
this.getList()
|
||||||
}
|
}
|
||||||
})
|
}).catch((res)=>{
|
||||||
}else {// 编辑&查看
|
this.getList()
|
||||||
this.paramVisible = true
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.workerEditParam.init(params)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,478 +1,520 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-01 14:54:06
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-15 14:55:35
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="groupTeamScheduling">
|
<div class="groupTeamScheduling">
|
||||||
<div class="operationArea">
|
<div class="operationArea">
|
||||||
<el-form :inline="true" class="demo-form-inline">
|
<el-tabs v-model="planId" @tab-click="setPlan">
|
||||||
<span class="blue-block"></span>
|
<el-tab-pane
|
||||||
<el-form-item label="月份选择">
|
v-for="item in planArr"
|
||||||
<el-date-picker
|
:key="item.id"
|
||||||
v-model="startDay"
|
:label="item.name"
|
||||||
type="month"
|
:name="item.id" />
|
||||||
placeholder="选择月"
|
</el-tabs>
|
||||||
size="small"
|
<el-form :inline="true" class="demo-form-inline">
|
||||||
:disabled="showSetting"
|
<span class="blue-block"></span>
|
||||||
@change="selectMonth"
|
<el-form-item label="月份选择">
|
||||||
:clearable="false"
|
<el-date-picker
|
||||||
style="width: 120px">
|
v-model="startDay"
|
||||||
</el-date-picker>
|
type="month"
|
||||||
</el-form-item>
|
placeholder="选择月"
|
||||||
<el-form-item>
|
size="small"
|
||||||
<span class="separateStyle" v-if="this.$auth.hasPermi('base:group-team-scheduling:set')"></span>
|
:disabled="showSetting"
|
||||||
</el-form-item>
|
@change="selectMonth"
|
||||||
<el-form-item>
|
:clearable="false"
|
||||||
<el-button type="primary" size="small" v-if="this.$auth.hasPermi('base:group-team-scheduling:set')" :disabled="showSetting || settingBtnDis" @click="settingMsg">设置</el-button>
|
style="width: 120px"></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" size="small" v-show="showSetting && autoScheduling" @click="schedulingBtn">自动排班</el-button>
|
<span
|
||||||
</el-form-item>
|
class="separateStyle"
|
||||||
<el-form-item>
|
v-if="this.$auth.hasPermi('base:group-team-scheduling:set')"></span>
|
||||||
<span class="separateStyle" v-show="showSetting"></span>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
<el-form-item>
|
<el-button
|
||||||
<el-button type="primary" size="small" v-show="showSetting" @click="confirmSetting">确认</el-button>
|
type="primary"
|
||||||
</el-form-item>
|
size="small"
|
||||||
<el-form-item>
|
v-if="this.$auth.hasPermi('base:group-team-scheduling:set')"
|
||||||
<el-button type="primary" size="small" plain v-show="showSetting" @click="cancelSetting">取消</el-button>
|
:disabled="showSetting || settingBtnDis"
|
||||||
</el-form-item>
|
@click="settingMsg">
|
||||||
<el-form-item label="请先选择查询的班组" class="rightItem">
|
设置
|
||||||
<!-- <el-button type="primary" size="small" :disabled="jumpDisabled" @click="toOtherPage('1')">班组上下片查询</el-button> -->
|
</el-button>
|
||||||
<el-button type="primary" size="small" :disabled="jumpDisabled" @click="toOtherPage('2')">班组能源查询</el-button>
|
</el-form-item>
|
||||||
<el-button type="primary" size="small" :disabled="jumpDisabled" @click="toOtherPage('3')">班组检测查询</el-button>
|
<el-form-item>
|
||||||
</el-form-item>
|
<span class="separateStyle" v-show="showSetting"></span>
|
||||||
</el-form>
|
</el-form-item>
|
||||||
</div>
|
<el-form-item>
|
||||||
<!-- 日历区域 -->
|
<el-button
|
||||||
<div class="calenderArea">
|
type="primary"
|
||||||
<div style="font-size: 24px;font-weight: 500">{{ this.month }} {{ this.year }}</div>
|
size="small"
|
||||||
<el-calendar v-model="startDay">
|
v-show="showSetting"
|
||||||
<!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
|
@click="confirmSetting">
|
||||||
<template
|
确认
|
||||||
slot="dateCell"
|
</el-button>
|
||||||
slot-scope="{date, data}">
|
</el-form-item>
|
||||||
<div v-if="data.type === 'current-month'">
|
<el-form-item>
|
||||||
<!-- 日期 -->
|
<el-button
|
||||||
<div class="dateStyle">
|
type="primary"
|
||||||
{{ Number(data.day.split('-')[2]) }}
|
size="small"
|
||||||
</div>
|
plain
|
||||||
<!-- 班次班组 -->
|
v-show="showSetting"
|
||||||
<!-- class有两个样式,一个是类似class1,还有个是选中红框显示 -->
|
@click="cancelSetting">
|
||||||
<el-row :gutter="2" :class="'class' + (index+1) + (chooseTip === (item.startDay+item.classesId) ? ' team-active' : '')" v-for="(item, index) in list[Number(data.day.split('-')[2])]" :key='index'>
|
取消
|
||||||
<el-col :span="12">
|
</el-button>
|
||||||
<div class="selectDiv">
|
</el-form-item>
|
||||||
<!-- 选择班组图标 -->
|
</el-form>
|
||||||
<div class="toggle-icon" v-show="showSetting && (new Date(data.day).valueOf() < new Date().valueOf() ? false: true)">
|
</div>
|
||||||
<svg-icon icon-class="toggle"/>
|
<!-- 日历区域 -->
|
||||||
</div>
|
<div class="calenderArea">
|
||||||
<!-- 不能选择班组 -->
|
<div style="font-size: 24px; font-weight: 500">
|
||||||
<div class="toggle-icon-hide" v-show="!(showSetting && (new Date(data.day).valueOf() < new Date().valueOf() ? false: true))"></div>
|
{{ this.month }} {{ this.year }}
|
||||||
<el-select v-model="item.teamId" size='small' :disabled="!showSetting || (new Date(data.day).valueOf() > new Date().valueOf() ? false: true)">
|
</div>
|
||||||
<el-option
|
<el-calendar v-model="startDay">
|
||||||
v-for="i in teamList"
|
<!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
|
||||||
:key="i.id"
|
<template slot="dateCell" slot-scope="{ date, data }">
|
||||||
:label="i.name"
|
<div v-if="data.type === 'current-month'">
|
||||||
:value="i.id">
|
<!-- 日期 -->
|
||||||
</el-option>
|
<div class="dateStyle">
|
||||||
</el-select>
|
{{ Number(data.day.split('-')[2]) }}
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
<!-- 班次班组 -->
|
||||||
<el-col :span="12">
|
<!-- class有两个样式,一个是类似class1,还有个是选中红框显示 -->
|
||||||
<el-button class="labelClass" @click="chooseTeam(item)">{{ item.classesName }}</el-button>
|
<el-row
|
||||||
</el-col>
|
:gutter="2"
|
||||||
</el-row>
|
:class="
|
||||||
</div>
|
'class' +
|
||||||
</template>
|
(index + 1) +
|
||||||
</el-calendar>
|
(chooseTip === item.startDay + item.classesId
|
||||||
</div>
|
? ' team-active'
|
||||||
</div>
|
: '')
|
||||||
|
"
|
||||||
|
v-for="(item, index) in list[Number(data.day.split('-')[2])]"
|
||||||
|
:key="index">
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="selectDiv">
|
||||||
|
<!-- 选择班组图标 -->
|
||||||
|
<div
|
||||||
|
class="toggle-icon"
|
||||||
|
v-show="
|
||||||
|
showSetting &&
|
||||||
|
(new Date(data.day).valueOf() < new Date().valueOf()
|
||||||
|
? false
|
||||||
|
: true)
|
||||||
|
">
|
||||||
|
<svg-icon icon-class="toggle" />
|
||||||
|
</div>
|
||||||
|
<!-- 不能选择班组 -->
|
||||||
|
<div
|
||||||
|
class="toggle-icon-hide"
|
||||||
|
v-show="
|
||||||
|
!(
|
||||||
|
showSetting &&
|
||||||
|
(new Date(data.day).valueOf() < new Date().valueOf()
|
||||||
|
? false
|
||||||
|
: true)
|
||||||
|
)
|
||||||
|
"></div>
|
||||||
|
<el-select
|
||||||
|
v-model="item.teamId"
|
||||||
|
size="small"
|
||||||
|
:disabled="
|
||||||
|
!showSetting ||
|
||||||
|
(new Date(data.day).valueOf() > new Date().valueOf()
|
||||||
|
? false
|
||||||
|
: true)
|
||||||
|
">
|
||||||
|
<el-option
|
||||||
|
v-for="i in teamList"
|
||||||
|
:key="i.id"
|
||||||
|
:label="i.name"
|
||||||
|
:value="i.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-button class="labelClass" @click="chooseTeam(item)">
|
||||||
|
{{ item.classesName }}
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-calendar>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getPreset, createOrUpdateList, autoSet } from "@/api/base/groupTeamScheduling";
|
import {
|
||||||
import { listEnabled } from "@/api/base/groupTeam";
|
getScheduling,
|
||||||
|
createOrUpdateList,
|
||||||
|
} from '@/api/base/groupTeamScheduling';
|
||||||
|
import {
|
||||||
|
groupPlanList,
|
||||||
|
groupPlanTeamList,
|
||||||
|
} from '@/api/base/groupSchedulingPlan';
|
||||||
|
import { listEnabled } from '@/api/base/groupTeam';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "GroupTeamScheduling",
|
name: 'GroupTeamScheduling',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
startDay: '',// 查询参数
|
startDay: '', // 查询参数
|
||||||
year: '',// 2023
|
year: '', // 2023
|
||||||
month: '',// 九月
|
month: '', // 九月
|
||||||
monthList: ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],
|
monthList: [
|
||||||
list: {},
|
'一月',
|
||||||
teamList: [],// 班组下拉
|
'二月',
|
||||||
showSetting: false,// 设置模式。自动排班,确认,取消按钮显示
|
'三月',
|
||||||
settingBtnDis: false,
|
'四月',
|
||||||
jumpDisabled: true,// 操作按钮控制
|
'五月',
|
||||||
chooseObj: {}, //当前选中的数据,查询按钮用
|
'六月',
|
||||||
chooseTip: '',// 当前选中数据的唯一值,显示红框
|
'七月',
|
||||||
autoScheduling: false // 只有在当前日期后的月份才生效
|
'八月',
|
||||||
};
|
'九月',
|
||||||
},
|
'十月',
|
||||||
created() {
|
'十一月',
|
||||||
this.startDay = new Date()
|
'十二月',
|
||||||
// 设置按钮是否置灰
|
],
|
||||||
this.settingBtn()
|
planId: undefined, //计划id
|
||||||
this.getTeamList()
|
list: {},
|
||||||
this.toggleMonth()
|
planArr: [], //排班计划数组
|
||||||
this.getList()
|
teamList: [], // 班组下拉
|
||||||
},
|
showSetting: false, // 设置模式。自动排班,确认,取消按钮显示
|
||||||
methods: {
|
settingBtnDis: false,
|
||||||
// 切换月份
|
jumpDisabled: true, // 操作按钮控制
|
||||||
selectMonth() {
|
chooseObj: {}, //当前选中的数据,查询按钮用
|
||||||
if (this.startDay) {
|
chooseTip: '', // 当前选中数据的唯一值,显示红框
|
||||||
this.settingBtn() // 设置按钮状态,需在getlist前面
|
autoScheduling: false, // 只有在当前日期后的月份才生效
|
||||||
this.toggleMonth()
|
};
|
||||||
this.getList()
|
},
|
||||||
this.clearChoose()
|
created() {
|
||||||
if ( moment(this.startDay).valueOf() > moment().endOf('month').valueOf()) {
|
this.startDay = new Date();
|
||||||
this.autoScheduling = true
|
groupPlanList().then((res) => {
|
||||||
} else {
|
this.planArr = res.data || [];
|
||||||
this.autoScheduling = false
|
this.planId = this.planArr[0] ? this.planArr[0].id : undefined;
|
||||||
}
|
if (this.planId) {
|
||||||
}
|
this.getList();
|
||||||
},
|
this.getTeamList();
|
||||||
// 获取班组列表
|
}
|
||||||
getTeamList() {
|
});
|
||||||
listEnabled().then(res => {
|
// 设置按钮是否置灰
|
||||||
this.teamList = res.data || []
|
this.settingBtn();
|
||||||
})
|
this.toggleMonth();
|
||||||
},
|
},
|
||||||
// 获取日历数据
|
methods: {
|
||||||
getList() {
|
setPlan() {
|
||||||
let year = moment(this.startDay).format('YYYY')
|
this.getList();
|
||||||
let month = moment(this.startDay).format('M')
|
this.getTeamList();
|
||||||
getPreset({
|
},
|
||||||
year: year,
|
// 切换月份
|
||||||
month: month
|
selectMonth() {
|
||||||
}).then(res => {
|
if (this.startDay) {
|
||||||
let obj = res.data || {}
|
this.settingBtn(); // 设置按钮状态,需在getlist前面
|
||||||
if (obj) {
|
this.toggleMonth();
|
||||||
for (let item in obj) {
|
this.getList();
|
||||||
for (let i = 0; i < obj[item].length; i++) {
|
this.clearChoose();
|
||||||
if (!obj[item][i].teamId) {
|
if (
|
||||||
obj[item][i].teamId = ''
|
moment(this.startDay).valueOf() > moment().endOf('month').valueOf()
|
||||||
}
|
) {
|
||||||
}
|
this.autoScheduling = true;
|
||||||
}
|
} else {
|
||||||
}
|
this.autoScheduling = false;
|
||||||
this.list = obj
|
}
|
||||||
}).catch(() => {
|
}
|
||||||
this.list = {}
|
},
|
||||||
this.settingBtnDis = true // 禁用设置按钮
|
// 获取计划对应班组列表
|
||||||
})
|
getTeamList() {
|
||||||
},
|
groupPlanTeamList(this.planId).then((res) => {
|
||||||
// 设置
|
this.teamList = res.data || [];
|
||||||
settingMsg() {
|
});
|
||||||
this.showSetting = !this.showSetting
|
},
|
||||||
this.clearChoose()
|
// 获取日历数据
|
||||||
},
|
getList() {
|
||||||
// 取消
|
let year = moment(this.startDay).format('YYYY');
|
||||||
cancelSetting() {
|
let month = moment(this.startDay).format('M');
|
||||||
this.showSetting = !this.showSetting
|
getScheduling({
|
||||||
this.getList() // 数据还原
|
year: year,
|
||||||
},
|
month: month,
|
||||||
// 确认
|
planId: this.planId,
|
||||||
confirmSetting() {
|
})
|
||||||
let num = 0
|
.then((res) => {
|
||||||
// 当月数据的话,今天及今天之前的不传
|
let obj = res.data || {};
|
||||||
if (moment(this.startDay).format('YYYY-MM') === moment().format('YYYY-MM')) {
|
if (obj) {
|
||||||
num = Number(moment().format('DD'))
|
for (let item in obj) {
|
||||||
} else {
|
for (let i = 0; i < obj[item].length; i++) {
|
||||||
num = 0
|
if (!obj[item][i].teamId) {
|
||||||
}
|
obj[item][i].teamId = '';
|
||||||
// 下月数据全部都传
|
}
|
||||||
// 打平数据
|
}
|
||||||
let tempArr = Object.values(this.list)
|
}
|
||||||
let arr = []
|
}
|
||||||
for (let i = num; i < tempArr.length; i++) {
|
this.list = obj;
|
||||||
for (let j = 0; j < tempArr[i].length; j++) {
|
})
|
||||||
arr.push(tempArr[i][j])
|
.catch(() => {
|
||||||
}
|
this.list = {};
|
||||||
}
|
this.settingBtnDis = true; // 禁用设置按钮
|
||||||
createOrUpdateList(arr).then(res => {
|
});
|
||||||
if (res.code === 0) {
|
},
|
||||||
this.showSetting = !this.showSetting
|
// 设置
|
||||||
this.$modal.msgSuccess("操作成功")
|
settingMsg() {
|
||||||
this.getList() // 数据更新
|
this.showSetting = !this.showSetting;
|
||||||
}
|
this.clearChoose();
|
||||||
})
|
},
|
||||||
},
|
// 取消
|
||||||
// 点击班次红框选中当前数据
|
cancelSetting() {
|
||||||
chooseTeam(value) {
|
this.showSetting = !this.showSetting;
|
||||||
if (this.showSetting) {
|
this.getList(); // 数据还原
|
||||||
this.$modal.msgWarning("当前处于设置模式")
|
},
|
||||||
return false
|
// 确认
|
||||||
}
|
confirmSetting() {
|
||||||
this.chooseObj = value
|
let num = 0;
|
||||||
this.chooseTip = value.startDay + value.classesId // 匹配当前的样式
|
// 当月数据的话,今天及今天之前的不传
|
||||||
this.jumpDisabled = false //查询按钮不禁用
|
if (
|
||||||
},
|
moment(this.startDay).format('YYYY-MM') === moment().format('YYYY-MM')
|
||||||
// 自动排班
|
) {
|
||||||
schedulingBtn() {
|
num = Number(moment().format('DD'));
|
||||||
let tempData = this.list
|
} else {
|
||||||
// 次月1号有值前端排班
|
num = 0;
|
||||||
if (this.list[1][0].teamId) {
|
}
|
||||||
let tempArr = Object.values(this.list)
|
// 下月数据全部都传
|
||||||
let arr = []
|
// 打平数据
|
||||||
let n = 0
|
let tempArr = Object.values(this.list);
|
||||||
for (let i = 0; i < tempArr.length; i++) {
|
let arr = [];
|
||||||
if (n > 0) {
|
for (let i = num; i < tempArr.length; i++) {
|
||||||
break;
|
for (let j = 0; j < tempArr[i].length; j++) {
|
||||||
}
|
arr.push(tempArr[i][j]);
|
||||||
for (let j = 0; j < tempArr[i].length; j++) {
|
}
|
||||||
if (tempArr[i][j].teamId) {
|
}
|
||||||
arr.push(tempArr[i][j].teamId)
|
createOrUpdateList(arr).then((res) => {
|
||||||
} else {
|
if (res.code === 0) {
|
||||||
n++
|
this.showSetting = !this.showSetting;
|
||||||
}
|
this.$modal.msgSuccess('操作成功');
|
||||||
}
|
this.getList(); // 数据更新
|
||||||
}
|
}
|
||||||
let tempNum = 0
|
});
|
||||||
for (let k = 0; k < tempArr.length; k++) {
|
},
|
||||||
for (let v = 0; v < tempArr[k].length; v++) {
|
// 点击班次红框选中当前数据
|
||||||
let t = tempNum % arr.length
|
chooseTeam(value) {
|
||||||
if (arr.length === 1) {
|
// if (this.showSetting) {
|
||||||
tempData[k+1][v].teamId = arr[0]
|
// this.$modal.msgWarning('当前处于设置模式');
|
||||||
} else {
|
// return false;
|
||||||
tempData[k+1][v].teamId = arr[t]
|
// }
|
||||||
}
|
this.chooseObj = value;
|
||||||
tempNum++
|
this.chooseTip = value.startDay + value.classesId; // 匹配当前的样式
|
||||||
}
|
this.jumpDisabled = false; //查询按钮不禁用
|
||||||
}
|
},
|
||||||
this.list = []
|
// 设置按钮如果是上个月或者今天是本月最后一天,设置按钮置灰
|
||||||
this.list = tempData
|
settingBtn() {
|
||||||
} else {
|
let nowMonth = moment().startOf('month').valueOf();
|
||||||
// 次月1号没有值,接口排班
|
let startMonth = moment(this.startDay).valueOf();
|
||||||
// console.log(moment(this.startDay).format("YYYY-MM-DD"))
|
let nowDate = moment(new Date()).date();
|
||||||
autoSet({
|
let sumDate = moment().daysInMonth();
|
||||||
year: this.year,
|
if (nowMonth > startMonth) {
|
||||||
month: moment(this.startDay).month() + 1
|
// 之前月
|
||||||
}).then(res => {
|
this.settingBtnDis = true;
|
||||||
this.list = res.data || {}
|
} else {
|
||||||
})
|
if (nowDate < sumDate) {
|
||||||
}
|
this.settingBtnDis = false;
|
||||||
},
|
} else {
|
||||||
// 设置按钮如果是上个月或者今天是本月最后一天,设置按钮置灰
|
this.settingBtnDis = true;
|
||||||
settingBtn() {
|
}
|
||||||
let nowMonth = moment().startOf('month').valueOf()
|
}
|
||||||
let startMonth = moment(this.startDay).valueOf()
|
},
|
||||||
let nowDate = moment(new Date()).date()
|
// 清除红框选中数据
|
||||||
let sumDate = moment().daysInMonth()
|
clearChoose() {
|
||||||
if (nowMonth > startMonth) { // 之前月
|
this.chooseObj = {};
|
||||||
this.settingBtnDis = true
|
this.chooseTip = '';
|
||||||
} else {
|
this.jumpDisabled = true;
|
||||||
if (nowDate < sumDate) {
|
},
|
||||||
this.settingBtnDis = false
|
// 切换月份显示
|
||||||
} else {
|
toggleMonth() {
|
||||||
this.settingBtnDis = true
|
this.year = moment(this.startDay).format('YYYY');
|
||||||
}
|
let month = Number(moment(this.startDay).format('MM'));
|
||||||
}
|
this.month = this.monthList[month - 1];
|
||||||
},
|
},
|
||||||
// 清除红框选中数据
|
},
|
||||||
clearChoose() {
|
};
|
||||||
this.chooseObj = {}
|
|
||||||
this.chooseTip = ""
|
|
||||||
this.jumpDisabled = true
|
|
||||||
},
|
|
||||||
// 切换月份显示
|
|
||||||
toggleMonth() {
|
|
||||||
this.year = moment(this.startDay).format("YYYY")
|
|
||||||
let month = Number(moment(this.startDay).format("MM"))
|
|
||||||
this.month = this.monthList[month - 1]
|
|
||||||
},
|
|
||||||
// 3个跳转按钮
|
|
||||||
toOtherPage(val) {
|
|
||||||
switch (val) {
|
|
||||||
case '1':
|
|
||||||
this.$router.push({
|
|
||||||
path: '/core/enhance/product-line-24h?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime,
|
|
||||||
})
|
|
||||||
break;
|
|
||||||
case '2': // 能源
|
|
||||||
this.$router.push({
|
|
||||||
// path: '/energy/monitoring/energy-report-search?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime
|
|
||||||
path: '/energy/base/energy-quantity-realtime?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime
|
|
||||||
})
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.$router.push({
|
|
||||||
path: '/quality/base/quality-inspection-data/detection-information/statistical-data?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime,
|
|
||||||
// name: 'QualityStatistics',
|
|
||||||
// params: { startTime: this.chooseObj.startTime, endTime: this.chooseObj.endTime }
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
<style lang='scss'>
|
<style lang="scss">
|
||||||
.demo-form-inline {
|
.demo-form-inline {
|
||||||
.el-date-editor .el-range__icon {
|
.el-date-editor .el-range__icon {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #0B58FF;
|
color: #0b58ff;
|
||||||
}
|
}
|
||||||
.el-input__prefix .el-icon-date {
|
.el-input__prefix .el-icon-date {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #0B58FF;
|
color: #0b58ff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.groupTeamScheduling {
|
.groupTeamScheduling {
|
||||||
background-color: #F2F4F9;
|
background-color: #f2f4f9;
|
||||||
.operationArea {
|
.operationArea {
|
||||||
padding: 14px 10px 0 16px;
|
padding: 14px 10px 0 16px;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
.blue-block {
|
.blue-block {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 4px;
|
width: 4px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
background-color: #0B58FF;
|
background-color: #0b58ff;
|
||||||
border-radius: 1px;
|
border-radius: 1px;
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
.separateStyle {
|
.separateStyle {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 1px;
|
width: 1px;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
background: #E8E8E8;
|
background: #e8e8e8;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.el-form-item {
|
.el-form-item {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
.rightItem {
|
.rightItem {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 日历
|
// 日历
|
||||||
.calenderArea {
|
.calenderArea {
|
||||||
padding: 14px 10px 0 20px;
|
padding: 14px 10px 0 20px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
.el-calendar__body {
|
.el-calendar__body {
|
||||||
padding: 10px 16px 16px 0;
|
padding: 10px 16px 16px 0;
|
||||||
}
|
}
|
||||||
.el-calendar__header {
|
.el-calendar__header {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.el-calendar-table > thead {
|
.el-calendar-table > thead {
|
||||||
height: 48px;
|
height: 48px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
background-color: rgba(242, 244, 249, 1);
|
background-color: rgba(242, 244, 249, 1);
|
||||||
}
|
}
|
||||||
.el-calendar-table__row {
|
.el-calendar-table__row {
|
||||||
height: 133px;
|
height: 133px;
|
||||||
.prev, .next {
|
.prev,
|
||||||
pointer-events: none;
|
.next {
|
||||||
}
|
pointer-events: none;
|
||||||
.el-calendar-day {
|
}
|
||||||
padding: 0 10px;
|
.el-calendar-day {
|
||||||
height: 100%;
|
padding: 0 10px;
|
||||||
.dateStyle {
|
height: 100%;
|
||||||
font-size: 20px;
|
.dateStyle {
|
||||||
font-weight: 500;
|
font-size: 20px;
|
||||||
color: #000000;
|
font-weight: 500;
|
||||||
text-align: right;
|
color: #000000;
|
||||||
height: 32px;
|
text-align: right;
|
||||||
line-height: 28px;
|
height: 32px;
|
||||||
padding-right: 10px;
|
line-height: 28px;
|
||||||
}
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.team-active {// 选中班组
|
}
|
||||||
border:2px solid red
|
.team-active {
|
||||||
}
|
// 选中班组
|
||||||
.class1, .class2, .class3 {
|
border: 2px solid #409eff;
|
||||||
padding: 0;
|
}
|
||||||
font-weight: 600;
|
.class1,
|
||||||
margin-bottom: 2px;
|
.class2,
|
||||||
.selectDiv {
|
.class3 {
|
||||||
position: relative;
|
padding: 0;
|
||||||
.toggle-icon {
|
font-weight: 600;
|
||||||
position: absolute;
|
margin-bottom: 2px;
|
||||||
width: 26px;
|
.selectDiv {
|
||||||
height: 26px;
|
position: relative;
|
||||||
line-height: 26px;
|
.toggle-icon {
|
||||||
font-size: 14px;
|
position: absolute;
|
||||||
z-index: 1;
|
width: 26px;
|
||||||
text-align: center;
|
height: 26px;
|
||||||
}
|
line-height: 26px;
|
||||||
.toggle-icon-hide {
|
font-size: 14px;
|
||||||
position: absolute;
|
z-index: 1;
|
||||||
width: 2px;
|
text-align: center;
|
||||||
height: 28px;
|
}
|
||||||
z-index: 1;
|
.toggle-icon-hide {
|
||||||
}
|
position: absolute;
|
||||||
.el-input__suffix {
|
width: 2px;
|
||||||
display: none;
|
height: 28px;
|
||||||
}
|
z-index: 1;
|
||||||
.el-input--suffix .el-input__inner {
|
}
|
||||||
padding: 0 4px 0 28px;
|
.el-input__suffix {
|
||||||
}
|
display: none;
|
||||||
.el-input--small .el-input__inner {
|
}
|
||||||
height: 28px;
|
.el-input--suffix .el-input__inner {
|
||||||
border: none;
|
padding: 0 4px 0 28px;
|
||||||
font-weight: 600;
|
}
|
||||||
}
|
.el-input--small .el-input__inner {
|
||||||
}
|
height: 28px;
|
||||||
.labelClass {
|
border: none;
|
||||||
width: 100%;
|
font-weight: 600;
|
||||||
height: 28px;
|
}
|
||||||
border: none;
|
}
|
||||||
padding: 0;
|
.labelClass {
|
||||||
font-weight: 600;
|
width: 100%;
|
||||||
text-align: center;
|
height: 28px;
|
||||||
}
|
border: none;
|
||||||
}
|
padding: 0;
|
||||||
.class1 {
|
font-weight: 600;
|
||||||
.selectDiv {
|
text-align: center;
|
||||||
.toggle-icon, .toggle-icon-hide {
|
}
|
||||||
background-color: #FACE00;
|
}
|
||||||
}
|
.class1 {
|
||||||
.el-input--small .el-input__inner {
|
.selectDiv {
|
||||||
color: #E7A200;
|
.toggle-icon,
|
||||||
background-color: #FFEFC0;
|
.toggle-icon-hide {
|
||||||
}
|
background-color: #face00;
|
||||||
}
|
}
|
||||||
.labelClass {
|
.el-input--small .el-input__inner {
|
||||||
color: #E7A200;
|
color: #e7a200;
|
||||||
background-color: #FFEFC0;
|
background-color: #ffefc0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.class2 {
|
.labelClass {
|
||||||
.selectDiv {
|
color: #e7a200;
|
||||||
.toggle-icon, .toggle-icon-hide {
|
background-color: #ffefc0;
|
||||||
background-color: #3984FF;
|
}
|
||||||
}
|
}
|
||||||
.el-input--small .el-input__inner {
|
.class2 {
|
||||||
color: #2D7BFF;
|
.selectDiv {
|
||||||
background-color: #BEEAFF;
|
.toggle-icon,
|
||||||
}
|
.toggle-icon-hide {
|
||||||
}
|
background-color: #3984ff;
|
||||||
.labelClass {
|
}
|
||||||
color: #2D7BFF;
|
.el-input--small .el-input__inner {
|
||||||
background-color: #BEEAFF;
|
color: #2d7bff;
|
||||||
}
|
background-color: #beeaff;
|
||||||
}
|
}
|
||||||
.class3 {
|
}
|
||||||
.selectDiv {
|
.labelClass {
|
||||||
.toggle-icon, .toggle-icon-hide {
|
color: #2d7bff;
|
||||||
background-color: #37D97F;
|
background-color: #beeaff;
|
||||||
}
|
}
|
||||||
.el-input--small .el-input__inner {
|
}
|
||||||
color: #129F51;
|
.class3 {
|
||||||
background-color: #E0FFEE;
|
.selectDiv {
|
||||||
}
|
.toggle-icon,
|
||||||
}
|
.toggle-icon-hide {
|
||||||
.labelClass {
|
background-color: #37d97f;
|
||||||
color: #129F51;
|
}
|
||||||
background-color: #E0FFEE;
|
.el-input--small .el-input__inner {
|
||||||
}
|
color: #129f51;
|
||||||
}
|
background-color: #e0ffee;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.labelClass {
|
||||||
|
color: #129f51;
|
||||||
|
background-color: #e0ffee;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -0,0 +1,260 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-10 13:43:41
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-15 16:00:36
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<el-form ref="form" :rules="rules" label-width="110px" :model="form">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="部门名称" prop="deptId">
|
||||||
|
<el-select
|
||||||
|
v-model="form.deptId"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请选择部门">
|
||||||
|
<el-option
|
||||||
|
v-for="item in deptArr"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="计划名称" prop="name">
|
||||||
|
<el-input v-model="form.name" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="相关班组" prop="teamIdList">
|
||||||
|
<el-select
|
||||||
|
v-model="form.teamIdList"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
multiple
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请选择班组">
|
||||||
|
<el-option
|
||||||
|
v-for="item in teamList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="相关班次" prop="classesIdList">
|
||||||
|
<el-select
|
||||||
|
v-model="form.classesIdList"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
multiple
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请选择班次">
|
||||||
|
<el-option
|
||||||
|
v-for="item in classList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="是否生产班组" prop="isProduction">
|
||||||
|
<el-radio-group v-model="form.isProduction">
|
||||||
|
<el-radio :label="true">是</el-radio>
|
||||||
|
<el-radio :label="false">否</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24" v-show="form.isProduction">
|
||||||
|
<tree-transfer
|
||||||
|
:title="title"
|
||||||
|
:from_data="fromData"
|
||||||
|
:to_data="toData"
|
||||||
|
@add-btn="add"
|
||||||
|
@remove-btn="remove"
|
||||||
|
pid="productionLineId"
|
||||||
|
:defaultProps="{ label: 'name' }"
|
||||||
|
height="450px"
|
||||||
|
:mode="mode"
|
||||||
|
filter
|
||||||
|
openAll></tree-transfer>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getGroupPlan,
|
||||||
|
updateGroupPlan,
|
||||||
|
createGroupPlan,
|
||||||
|
getGroupPlanTree,
|
||||||
|
createGroupPlanLine,
|
||||||
|
updateGroupPlanLine,
|
||||||
|
getGroupPlanLine,
|
||||||
|
getLoginUserDeptId,
|
||||||
|
} from '@/api/base/groupSchedulingPlan';
|
||||||
|
|
||||||
|
import { listDept } from '@/api/system/dept';
|
||||||
|
import { listEnabled } from '@/api/base/groupTeam';
|
||||||
|
import { listClassesEnabled } from '@/api/base/groupClasses';
|
||||||
|
import treeTransfer from 'el-tree-transfer';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: { treeTransfer },
|
||||||
|
name: '',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
id: '',
|
||||||
|
name: '',
|
||||||
|
deptId: '',
|
||||||
|
teamIdList: [],
|
||||||
|
classesIdList: [],
|
||||||
|
remark: '',
|
||||||
|
isProduction: false,
|
||||||
|
},
|
||||||
|
deptArr: [], //部门
|
||||||
|
teamList: [], //班组
|
||||||
|
classList: [], //班次
|
||||||
|
rules: {
|
||||||
|
name: [{ required: true, message: '请输入计划名称', trigger: 'blur' }],
|
||||||
|
deptId: [{ required: true, message: '请选择部门', trigger: 'change' }],
|
||||||
|
teamIdList: [
|
||||||
|
{ required: true, message: '请选择相关班组', trigger: 'change' },
|
||||||
|
],
|
||||||
|
classesIdList: [
|
||||||
|
{ required: true, message: '请选择相关班次', trigger: 'change' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
title: ['待选', '已选'], //标题 类型:Array 必填:false 默认:["源列表", "目标列表"]
|
||||||
|
mode: 'transfer',
|
||||||
|
fromData: [], //左边内容
|
||||||
|
toData: [], //右边已选内容
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
init(id) {
|
||||||
|
this.form.id = id || undefined;
|
||||||
|
this.fromData = [];
|
||||||
|
this.toData = [];
|
||||||
|
this.getArr();
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs['form'].resetFields();
|
||||||
|
if (this.form.id) {
|
||||||
|
getGroupPlan(id).then((response) => {
|
||||||
|
this.form = response.data;
|
||||||
|
if (this.form.isProduction) {
|
||||||
|
getGroupPlanLine(id).then((res) => {
|
||||||
|
this.toData = res.data ? res.data.datas : [];
|
||||||
|
this.getFilterLeftData(this.fromData, this.toData); //编辑时组件有bug,左边相同数据不消失
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
getLoginUserDeptId().then((res) => {
|
||||||
|
this.form.deptId = res.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getArr() {
|
||||||
|
listDept().then((response) => {
|
||||||
|
this.deptArr = response.data;
|
||||||
|
});
|
||||||
|
listEnabled().then((res) => {
|
||||||
|
this.teamList = res.data || [];
|
||||||
|
});
|
||||||
|
listClassesEnabled().then((res) => {
|
||||||
|
this.classList = res.data || [];
|
||||||
|
});
|
||||||
|
getGroupPlanTree().then((res) => {
|
||||||
|
this.fromData = res.data;
|
||||||
|
this.fromData.forEach((item) => {
|
||||||
|
item.productionLineId = 0;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 监听穿梭框组件添加
|
||||||
|
add(fromData, toData, obj) {
|
||||||
|
console.log('fromData:', fromData);
|
||||||
|
console.log('toData:', toData);
|
||||||
|
},
|
||||||
|
// 监听穿梭框组件移除
|
||||||
|
remove(fromData, toData, obj) {
|
||||||
|
console.log('fromData:', fromData);
|
||||||
|
console.log('toData:', toData);
|
||||||
|
},
|
||||||
|
submitForm() {
|
||||||
|
this.$refs['form'].validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.id) {
|
||||||
|
//编辑
|
||||||
|
updateGroupPlan({ ...this.form }).then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
if (this.form.isProduction) {
|
||||||
|
const params = {
|
||||||
|
planId: this.form.id,
|
||||||
|
list: this.toData,
|
||||||
|
};
|
||||||
|
updateGroupPlanLine(params).then((res) => {
|
||||||
|
this.$modal.msgSuccess('操作成功');
|
||||||
|
this.$emit('successSubmit');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
createGroupPlan({ ...this.form }).then((res) => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
if (this.form.isProduction) {
|
||||||
|
const params = {
|
||||||
|
planId: res.data,
|
||||||
|
list: this.toData,
|
||||||
|
};
|
||||||
|
createGroupPlanLine(params).then((res) => {
|
||||||
|
this.$modal.msgSuccess('操作成功');
|
||||||
|
this.$emit('successSubmit');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
formClear() {
|
||||||
|
this.$refs.form.resetFields();
|
||||||
|
},
|
||||||
|
|
||||||
|
/** 消除组件左边与右边选中数据相同项 */
|
||||||
|
// 处理过滤数据
|
||||||
|
getFilterLeftData(data, selData) {
|
||||||
|
for (let i = data.length - 1; i >= 0; i--) {
|
||||||
|
for (let j = selData.length - 1; j >= 0; j--) {
|
||||||
|
if (data[i] && data[i].id === selData[j].id) {
|
||||||
|
// 当id相等可以删除的情况 即:没有子级可以删除;
|
||||||
|
if (!data[i].children) {
|
||||||
|
data.splice(i, 1);
|
||||||
|
} else {
|
||||||
|
this.getFilterLeftData(data[i].children, selData[j].children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
233
src/views/group/base/schedulingPlanConfig/index.vue
Normal file
233
src/views/group/base/schedulingPlanConfig/index.vue
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-10 11:08:48
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-12 16:19:28
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
|
<search-bar
|
||||||
|
:formConfigs="formConfig"
|
||||||
|
ref="searchBarForm"
|
||||||
|
@headBtnClick="buttonClick" />
|
||||||
|
<!-- 列表 -->
|
||||||
|
<base-table
|
||||||
|
:page="queryParams.pageNo"
|
||||||
|
:limit="queryParams.pageSize"
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="list"
|
||||||
|
:max-height="tableH">
|
||||||
|
<method-btn
|
||||||
|
v-if="tableBtn.length"
|
||||||
|
slot="handleBtn"
|
||||||
|
:width="120"
|
||||||
|
label="操作"
|
||||||
|
:method-list="tableBtn"
|
||||||
|
@clickBtn="handleClick" />
|
||||||
|
</base-table>
|
||||||
|
<pagination
|
||||||
|
:page.sync="queryParams.pageNo"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
:total="total"
|
||||||
|
@pagination="getList" />
|
||||||
|
<!-- 新增 -->
|
||||||
|
<base-dialog
|
||||||
|
:dialogTitle="addOrEditTitle"
|
||||||
|
:dialogVisible="centervisible"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
@confirm="handleConfirm"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
width="50%">
|
||||||
|
<schedulingPlanConfigAdd ref="classList" @successSubmit="successSubmit" />
|
||||||
|
</base-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getGroupPlanPage,
|
||||||
|
deleteGroupPlan,
|
||||||
|
} from '@/api/base/groupSchedulingPlan';
|
||||||
|
import { listDept } from '@/api/system/dept';
|
||||||
|
import schedulingPlanConfigAdd from './components/schedulingPlanConfigAdd.vue';
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'deptName',
|
||||||
|
label: '部门名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'name',
|
||||||
|
label: '计划名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'str',
|
||||||
|
label: '产线及工段',
|
||||||
|
minWidth: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'teamName',
|
||||||
|
label: '班组名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'classesName',
|
||||||
|
label: '班次名称',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
export default {
|
||||||
|
name: 'schedulingPlanConfig',
|
||||||
|
components: { schedulingPlanConfigAdd },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formConfig: [
|
||||||
|
{
|
||||||
|
type: 'select',
|
||||||
|
label: '部门名称',
|
||||||
|
selectOptions: [],
|
||||||
|
param: 'deptId',
|
||||||
|
defaultSelect: '',
|
||||||
|
filterable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
label: '计划名称',
|
||||||
|
placeholder: '计划名称',
|
||||||
|
param: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'button',
|
||||||
|
btnName: '查询',
|
||||||
|
name: 'search',
|
||||||
|
color: 'primary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'separate',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: this.$auth.hasPermi('base:group-scheduling-plan:create')
|
||||||
|
? 'button'
|
||||||
|
: '',
|
||||||
|
btnName: '新增',
|
||||||
|
name: 'add',
|
||||||
|
color: 'success',
|
||||||
|
plain: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
tableProps,
|
||||||
|
tableBtn: [
|
||||||
|
this.$auth.hasPermi('base:group-scheduling-plan:update')
|
||||||
|
? {
|
||||||
|
type: 'edit',
|
||||||
|
btnName: '编辑',
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
this.$auth.hasPermi('base:group-scheduling-plan:delete')
|
||||||
|
? {
|
||||||
|
type: 'delete',
|
||||||
|
btnName: '删除',
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
].filter((v) => v),
|
||||||
|
tableH: this.tableHeight(260),
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 列表
|
||||||
|
list: [],
|
||||||
|
// 弹出层标题
|
||||||
|
addOrEditTitle: '',
|
||||||
|
// 是否显示弹出层
|
||||||
|
centervisible: false,
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 20,
|
||||||
|
name: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
this.tableH = this.tableHeight(260);
|
||||||
|
});
|
||||||
|
listDept().then((response) => {
|
||||||
|
this.formConfig[0].selectOptions = response.data;
|
||||||
|
});
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
buttonClick(val) {
|
||||||
|
switch (val.btnName) {
|
||||||
|
case 'search':
|
||||||
|
this.queryParams.pageNo = 1;
|
||||||
|
this.queryParams.name = val.name || undefined;
|
||||||
|
this.queryParams.deptId = val.deptId || undefined;
|
||||||
|
this.getList();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.addOrEditTitle = '新增';
|
||||||
|
this.centervisible = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.classList.init();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 查询列表 */
|
||||||
|
getList() {
|
||||||
|
getGroupPlanPage(this.queryParams).then((res) => {
|
||||||
|
if (res.code === 0 && res.data.list && res.data.list.length > 0) {
|
||||||
|
res.data.list.forEach(item => {
|
||||||
|
if(item.isProduction){
|
||||||
|
item.str = item.strList?item.strList.join(','):'-'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.list = res.data.list;
|
||||||
|
this.total = res.data.total;
|
||||||
|
} else {
|
||||||
|
this.list = [];
|
||||||
|
this.total = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleClick(val) {
|
||||||
|
switch (val.type) {
|
||||||
|
case 'edit':
|
||||||
|
this.addOrEditTitle = '编辑';
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.classList.init(val.data.id);
|
||||||
|
});
|
||||||
|
this.centervisible = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.handleDelete(val.data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.$refs.classList.formClear();
|
||||||
|
this.centervisible = false;
|
||||||
|
this.addOrEditTitle = '';
|
||||||
|
},
|
||||||
|
handleConfirm() {
|
||||||
|
this.$refs.classList.submitForm();
|
||||||
|
},
|
||||||
|
successSubmit() {
|
||||||
|
this.handleCancel();
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
let _this = this;
|
||||||
|
_this.$modal
|
||||||
|
.confirm('是否确认删除名称为"' + row.name + '"的数据项?')
|
||||||
|
.then(function () {
|
||||||
|
return deleteGroupPlan(row.id);
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
_this.getList();
|
||||||
|
_this.$modal.msgSuccess('删除成功');
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
@ -0,0 +1,280 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-11 09:30:21
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-12 16:09:46
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<el-form ref="form" :rules="rules" label-width="110px" :model="form">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="排班开始日期" prop="startDay">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.startDay"
|
||||||
|
type="datetime"
|
||||||
|
placeholder="选择日期时间"
|
||||||
|
label-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
value-format="timestamp"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="排班结束日期" prop="endDay">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.endDay"
|
||||||
|
type="datetime"
|
||||||
|
placeholder="选择日期时间"
|
||||||
|
label-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
value-format="timestamp"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="排班计划" prop="planId">
|
||||||
|
<el-select
|
||||||
|
v-model="form.planId"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
@change="setTableArr"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请选择排班计划">
|
||||||
|
<el-option
|
||||||
|
v-for="item in planArr"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="min-title">班组上班顺序</div>
|
||||||
|
<base-table
|
||||||
|
border
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
:page="1"
|
||||||
|
:limit="100"
|
||||||
|
:height="300"
|
||||||
|
@emitButtonClick="addNew"
|
||||||
|
@emitFun="inputChange"
|
||||||
|
:add-button-show="addButtonShow">
|
||||||
|
<method-btn
|
||||||
|
slot="handleBtn"
|
||||||
|
:width="60"
|
||||||
|
label="操作"
|
||||||
|
:method-list="tableBtn"
|
||||||
|
@clickBtn="handleClick" />
|
||||||
|
</base-table>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getGroupRule,
|
||||||
|
updateGroupRule,
|
||||||
|
createGroupRule,
|
||||||
|
} from '@/api/base/groupSchedulingRule';
|
||||||
|
import {
|
||||||
|
groupPlanList,
|
||||||
|
groupPlanTeamList,
|
||||||
|
groupPlanClassesList,
|
||||||
|
} from '@/api/base/groupSchedulingPlan';
|
||||||
|
import tableSelect from './tableSelect';
|
||||||
|
|
||||||
|
const tableBtn = [
|
||||||
|
{
|
||||||
|
type: 'delete',
|
||||||
|
btnName: '删除',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'classesId',
|
||||||
|
label: '班次',
|
||||||
|
classesArr: [],
|
||||||
|
subcomponent: tableSelect,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'teamId',
|
||||||
|
label: '班组',
|
||||||
|
teamArr: [],
|
||||||
|
subcomponent: tableSelect,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
export default {
|
||||||
|
name: 'schedulingRuleConfigAdd',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
id: '',
|
||||||
|
startDay: '',
|
||||||
|
endDay: '',
|
||||||
|
planId: '',
|
||||||
|
remark: '',
|
||||||
|
},
|
||||||
|
tableBtn,
|
||||||
|
tableProps,
|
||||||
|
tableData: [],
|
||||||
|
addButtonShow: '',
|
||||||
|
planArr: [], //排班计划数组
|
||||||
|
rules: {
|
||||||
|
name: [{ required: true, message: '请输入班组名称', trigger: 'blur' }],
|
||||||
|
startDay: [
|
||||||
|
{ required: true, message: '请选择排班开始时间', trigger: 'change' },
|
||||||
|
],
|
||||||
|
endDay: [
|
||||||
|
{ required: true, message: '请选择排班结束时间', trigger: 'change' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
init(id) {
|
||||||
|
this.form = {
|
||||||
|
id: id || undefined,
|
||||||
|
startDay: '',
|
||||||
|
endDay: '',
|
||||||
|
planId: '',
|
||||||
|
remark: '',
|
||||||
|
};
|
||||||
|
this.getArr();
|
||||||
|
this.tableData = [];
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs['form'].resetFields();
|
||||||
|
if (this.form.id) {
|
||||||
|
getGroupRule(id).then((response) => {
|
||||||
|
this.form = response.data;
|
||||||
|
this.getTableArr(response.data.planId);
|
||||||
|
this.tableData = [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getArr() {
|
||||||
|
groupPlanList().then((res) => {
|
||||||
|
this.planArr = res.data || [];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
setTableArr() {
|
||||||
|
if (this.form.planId) {
|
||||||
|
this.tableData = [];
|
||||||
|
this.getTableArr(this.form.planId);
|
||||||
|
} else {
|
||||||
|
this.tableData = [];
|
||||||
|
this.addButtonShow = '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getTableArr(id) {
|
||||||
|
//获取表格下拉框
|
||||||
|
this.addButtonShow = '新增';
|
||||||
|
const res0 = await groupPlanClassesList(id);
|
||||||
|
this.tableProps[0].classesArr = res0.data || [];
|
||||||
|
const res1 = await groupPlanTeamList(id);
|
||||||
|
this.tableProps[1].teamArr = res1.data || [];
|
||||||
|
if (this.form.id) {
|
||||||
|
//编辑时获取班组上班顺序
|
||||||
|
this.form.sequenceList.forEach((item) => {
|
||||||
|
this.tableData.push(item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
inputChange(data) {
|
||||||
|
this.tableData[data._pageIndex - 1][data.prop] = data[data.prop];
|
||||||
|
},
|
||||||
|
handleClick(raw) {
|
||||||
|
if (raw.type === 'delete') {
|
||||||
|
this.$confirm(
|
||||||
|
`确定对${
|
||||||
|
raw.data.name
|
||||||
|
? '[名称=' + raw.data.name + ']'
|
||||||
|
: '[序号=' + raw.data._pageIndex + ']'
|
||||||
|
}进行删除操作?`,
|
||||||
|
'提示',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(() => {
|
||||||
|
this.tableData.splice(raw.data._pageIndex - 1, 1);
|
||||||
|
this.tableData.forEach((item, index) => {
|
||||||
|
item.sequence = index;
|
||||||
|
});
|
||||||
|
console.log(this.tableData);
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 新增
|
||||||
|
addNew() {
|
||||||
|
this.tableData.push({ sequence: this.tableData.length });
|
||||||
|
},
|
||||||
|
submitForm() {
|
||||||
|
this.$refs['form'].validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.id) {
|
||||||
|
//编辑
|
||||||
|
let list = [];
|
||||||
|
this.tableData.forEach((item) => {
|
||||||
|
const obj = {
|
||||||
|
classesId: item.classesId,
|
||||||
|
sequence: item.sequence,
|
||||||
|
teamId: item.teamId,
|
||||||
|
};
|
||||||
|
list.push(obj);
|
||||||
|
});
|
||||||
|
this.form.list = list;
|
||||||
|
updateGroupRule({ ...this.form }).then((res) => {
|
||||||
|
this.$modal.msgSuccess('操作成功');
|
||||||
|
this.$emit('successSubmit');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
let list = [];
|
||||||
|
this.tableData.forEach((item) => {
|
||||||
|
const obj = {
|
||||||
|
classesId: item.classesId,
|
||||||
|
sequence: item.sequence,
|
||||||
|
teamId: item.teamId,
|
||||||
|
};
|
||||||
|
list.push(obj);
|
||||||
|
});
|
||||||
|
this.form.list = list;
|
||||||
|
createGroupRule({ ...this.form }).then((res) => {
|
||||||
|
this.$modal.msgSuccess('操作成功');
|
||||||
|
this.$emit('successSubmit');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
formClear() {
|
||||||
|
this.$refs.form.resetFields();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.min-title {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
.min-title::before {
|
||||||
|
content: '';
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: auto 5px;
|
||||||
|
background-color: #0b58ff;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,44 @@
|
|||||||
|
<template>
|
||||||
|
<div class="tableInner">
|
||||||
|
<el-select :key="itemProp+list._pageIndex" v-model="list[itemProp]" @change="changeInput">
|
||||||
|
<el-option
|
||||||
|
v-for="item in itemProp==='classesId'?list.classesArr:list.teamArr"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'tableSelect',
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
itemProp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: this.injectData,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeInput() {
|
||||||
|
this.$emit('emitData', this.list);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.tableInner >>> .el-input__inner {
|
||||||
|
color: #409EFF;
|
||||||
|
border: 1px rgb(232, 231, 231) solid;
|
||||||
|
padding: 0;
|
||||||
|
text-align: center;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
261
src/views/group/base/schedulingRuleConfig/index.vue
Normal file
261
src/views/group/base/schedulingRuleConfig/index.vue
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
|
<search-bar
|
||||||
|
:formConfigs="formConfig"
|
||||||
|
ref="searchBarForm"
|
||||||
|
@headBtnClick="buttonClick" />
|
||||||
|
<!-- 列表 -->
|
||||||
|
<base-table
|
||||||
|
:page="queryParams.pageNo"
|
||||||
|
:limit="queryParams.pageSize"
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="list"
|
||||||
|
:max-height="tableH">
|
||||||
|
<method-btn
|
||||||
|
v-if="tableBtn.length"
|
||||||
|
slot="handleBtn"
|
||||||
|
:width="120"
|
||||||
|
label="操作"
|
||||||
|
:method-list="tableBtn"
|
||||||
|
@clickBtn="handleClick" />
|
||||||
|
</base-table>
|
||||||
|
<pagination
|
||||||
|
:page.sync="queryParams.pageNo"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
:total="total"
|
||||||
|
@pagination="getList" />
|
||||||
|
<!-- 新增 -->
|
||||||
|
<base-dialog
|
||||||
|
:dialogTitle="addOrEditTitle"
|
||||||
|
:dialogVisible="centervisible"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
@confirm="handleConfirm"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
width="50%">
|
||||||
|
<schedulingRuleConfigAdd ref="classList" @successSubmit="successSubmit" />
|
||||||
|
</base-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getGroupRulePage,
|
||||||
|
deleteGroupRule,
|
||||||
|
updateGroupRule,
|
||||||
|
getGroupRule,
|
||||||
|
} from '@/api/base/groupSchedulingRule';
|
||||||
|
import schedulingRuleConfigAdd from './components/schedulingRuleConfigAdd.vue';
|
||||||
|
import { formatDate } from '@/utils';
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'enableTimeStr',
|
||||||
|
label: '排班日期',
|
||||||
|
minWidth: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'planName',
|
||||||
|
label: '排班计划',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'str',
|
||||||
|
label: '排班规则',
|
||||||
|
minWidth: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'enabled',
|
||||||
|
label: '状态',
|
||||||
|
filter: (val) => (val ? '正常' : '作废'),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
export default {
|
||||||
|
name: 'schedulingRuleConfig',
|
||||||
|
components: { schedulingRuleConfigAdd },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formConfig: [
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
label: '班次',
|
||||||
|
placeholder: '班次',
|
||||||
|
param: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'button',
|
||||||
|
btnName: '查询',
|
||||||
|
name: 'search',
|
||||||
|
color: 'primary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'separate',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: this.$auth.hasPermi('base:group-scheduling-rule:create')
|
||||||
|
? 'button'
|
||||||
|
: '',
|
||||||
|
btnName: '新增',
|
||||||
|
name: 'add',
|
||||||
|
color: 'success',
|
||||||
|
plain: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
tableProps,
|
||||||
|
tableBtn: [
|
||||||
|
this.$auth.hasPermi('base:group-scheduling-rule:cancel')
|
||||||
|
? {
|
||||||
|
type: 'cancel',
|
||||||
|
btnName: '作废',
|
||||||
|
showParam: {
|
||||||
|
type: '&',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: 'unequal',
|
||||||
|
name: 'enabled',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
this.$auth.hasPermi('base:group-scheduling-rule:update')
|
||||||
|
? {
|
||||||
|
type: 'edit',
|
||||||
|
btnName: '编辑',
|
||||||
|
showParam: {
|
||||||
|
type: '&',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: 'unequal',
|
||||||
|
name: 'enabled',
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
this.$auth.hasPermi('base:group-scheduling-rule:delete')
|
||||||
|
? {
|
||||||
|
type: 'delete',
|
||||||
|
btnName: '删除',
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
].filter((v) => v),
|
||||||
|
tableH: this.tableHeight(260),
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 班次基础信息列表
|
||||||
|
list: [],
|
||||||
|
// 弹出层标题
|
||||||
|
addOrEditTitle: '',
|
||||||
|
// 是否显示弹出层
|
||||||
|
centervisible: false,
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 20,
|
||||||
|
name: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
this.tableH = this.tableHeight(260);
|
||||||
|
});
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
buttonClick(val) {
|
||||||
|
switch (val.btnName) {
|
||||||
|
case 'search':
|
||||||
|
this.queryParams.pageNo = 1;
|
||||||
|
this.queryParams.classesName = val.name || undefined;
|
||||||
|
this.getList();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.addOrEditTitle = '新增';
|
||||||
|
this.centervisible = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.classList.init();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 查询列表 */
|
||||||
|
getList() {
|
||||||
|
getGroupRulePage(this.queryParams).then((res) => {
|
||||||
|
if (res.code === 0 && res.data.list && res.data.list.length > 0) {
|
||||||
|
res.data.list.map((item) => {
|
||||||
|
item.enableTimeStr =
|
||||||
|
formatDate(item.startDay) +
|
||||||
|
'至' +
|
||||||
|
(item.endDay ? formatDate(item.endDay) : '永久');
|
||||||
|
item.str = item.strList.join(',');
|
||||||
|
});
|
||||||
|
this.list = res.data.list;
|
||||||
|
this.total = res.data.total;
|
||||||
|
} else {
|
||||||
|
this.list = [];
|
||||||
|
this.total = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleClick(val) {
|
||||||
|
switch (val.type) {
|
||||||
|
case 'edit':
|
||||||
|
this.addOrEditTitle = '编辑';
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.classList.init(val.data.id);
|
||||||
|
});
|
||||||
|
this.centervisible = true;
|
||||||
|
break;
|
||||||
|
case 'cancel':
|
||||||
|
this.discard(val.data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this.handleDelete(val.data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.$refs.classList.formClear();
|
||||||
|
this.centervisible = false;
|
||||||
|
this.addOrEditTitle = '';
|
||||||
|
},
|
||||||
|
handleConfirm() {
|
||||||
|
this.$refs.classList.submitForm();
|
||||||
|
},
|
||||||
|
successSubmit() {
|
||||||
|
this.handleCancel();
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
discard(row) {
|
||||||
|
let _this = this
|
||||||
|
this.$modal
|
||||||
|
.confirm('是否确认作废序号为"' + row._pageIndex + '"的数据项?')
|
||||||
|
.then(() => {
|
||||||
|
getGroupRule(row.id).then((response) => {
|
||||||
|
let datas = response.data;
|
||||||
|
datas.list = datas.sequenceList;
|
||||||
|
datas.enabled = 0;
|
||||||
|
updateGroupRule(datas).then(() => {
|
||||||
|
_this.getList();
|
||||||
|
_this.$modal.msgSuccess('操作成功');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
this.$modal
|
||||||
|
.confirm('是否确认删除序号为"' + row._pageIndex + '"的数据项?')
|
||||||
|
.then(function () {
|
||||||
|
return deleteGroupRule(row.id);
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess('删除成功');
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
@ -36,8 +36,8 @@ export default {
|
|||||||
minWidth: 150
|
minWidth: 150
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'workOrderList',
|
prop: 'specifications',
|
||||||
label: '生产工单'
|
label: '产品规格'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
tableData: [],
|
tableData: [],
|
||||||
@ -147,8 +147,8 @@ export default {
|
|||||||
minWidth: 150
|
minWidth: 150
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'workOrderList',
|
prop: 'specifications',
|
||||||
label: '生产工单'
|
label: '产品规格'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -159,4 +159,4 @@ export default {
|
|||||||
.box {
|
.box {
|
||||||
padding: 0 32px;
|
padding: 0 32px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
131
src/views/warehouse/warehouse-info/BarChart.vue
Normal file
131
src/views/warehouse/warehouse-info/BarChart.vue
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
:class="className"
|
||||||
|
:style="{ height: height, width: width, marginLeft: '10px' }" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as echarts from 'echarts';
|
||||||
|
require('echarts/theme/macarons'); // echarts theme
|
||||||
|
import resize from '@/utils/chartMixins/resize';
|
||||||
|
|
||||||
|
const animationDuration = 1000;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
mixins: [resize],
|
||||||
|
props: {
|
||||||
|
className: {
|
||||||
|
type: String,
|
||||||
|
default: 'chart',
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
width: {
|
||||||
|
type: String,
|
||||||
|
default: '100%',
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type: String,
|
||||||
|
default: '300px',
|
||||||
|
},
|
||||||
|
barData: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
chart: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
if (!this.chart) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.chart.dispose();
|
||||||
|
this.chart = null;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initChart() {
|
||||||
|
this.chart = echarts.init(this.$el, 'macarons');
|
||||||
|
|
||||||
|
this.chart.setOption({
|
||||||
|
title: {
|
||||||
|
text: this.title
|
||||||
|
? '{space|}{tip|}{space|}{value|' + this.title + '}'
|
||||||
|
: '',
|
||||||
|
textStyle: {
|
||||||
|
rich: {
|
||||||
|
tip: {
|
||||||
|
width: 6,
|
||||||
|
height: 6,
|
||||||
|
borderRadius: 50,
|
||||||
|
backgroundColor: '#288AFF',
|
||||||
|
},
|
||||||
|
space: {
|
||||||
|
width: 8,
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
fontSize: 14,
|
||||||
|
color: 'black',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
color: ['#288AFF', '#8EF0AB', '#FFDC94'],
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: {
|
||||||
|
// 坐标轴指示器,坐标轴触发有效
|
||||||
|
type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
containLabel: true,
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: this.barData.map((item) => {
|
||||||
|
return item.name;
|
||||||
|
}),
|
||||||
|
axisTick: {
|
||||||
|
alignWithLabel: true,
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
color: '#979797',
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
lineStyle: {
|
||||||
|
color: '#979797',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
splitArea: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
color: '#979797',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: '数量',
|
||||||
|
type: 'bar',
|
||||||
|
barWidth: '20',
|
||||||
|
data: this.barData.map((item) => {
|
||||||
|
return item.value;
|
||||||
|
}),
|
||||||
|
animationDuration,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
@ -1,413 +1,99 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: zwq
|
||||||
|
* @Date: 2024-07-02 15:56:48
|
||||||
|
* @LastEditors: zwq
|
||||||
|
* @LastEditTime: 2024-07-02 16:55:43
|
||||||
|
* @Description:
|
||||||
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-row :gutter="20">
|
<div class="flexDiv">
|
||||||
<el-col :span="4">
|
<div v-for="i in wareName" :key="i + 'a'" class="divClass up">
|
||||||
<el-button
|
{{ i }}
|
||||||
type="primary"
|
</div>
|
||||||
v-hasPermi="['warehouse:warehouse-info:create']"
|
</div>
|
||||||
plain
|
<div class="flexDiv">
|
||||||
size="mini"
|
<div v-for="i in stockNum" :key="i + 'b'" class="divClass down">
|
||||||
@click="addWare">
|
<span v-if="i === '库存数量'">{{ i }}</span>
|
||||||
新增仓库
|
<el-link v-else :underline="false" type="primary" @click="toPage(i)">
|
||||||
</el-button>
|
{{ i }}
|
||||||
<el-divider content-position="left">仓库列表</el-divider>
|
</el-link>
|
||||||
<el-card
|
</div>
|
||||||
v-for="item in wareArr"
|
</div>
|
||||||
:key="item.id"
|
<barChart
|
||||||
shadow="hover"
|
style="margin-top: 50px"
|
||||||
@click.native="setWareInfo(item)"
|
ref="barChart"
|
||||||
:style="{
|
height="600px"
|
||||||
background: item.id === wareInfo.warehouseId ? '#37D97F' : '',
|
:title="'库存数量'"
|
||||||
color: item.id === wareInfo.warehouseId ? 'white' : '',
|
v-if="barData.length"
|
||||||
}"
|
:bar-data="barData" />
|
||||||
class="ware-card">
|
<!-- 没有数据 -->
|
||||||
{{ item.name }}
|
<div class="no-data-bg" v-else></div>
|
||||||
<el-dropdown class="el-dropdown-div">
|
|
||||||
<span class="el-dropdown-link">
|
|
||||||
<i
|
|
||||||
class="el-icon-s-tools"
|
|
||||||
style="color: #409eff; cursor: pointer; font-size: 25px" />
|
|
||||||
</span>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
|
||||||
<el-dropdown-item
|
|
||||||
v-hasPermi="['warehouse:warehouse-info:update']"
|
|
||||||
@click.native="dropdown(1, item.id)">
|
|
||||||
编辑
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item @click.native="dropdown(2, item.id)">
|
|
||||||
详情
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item
|
|
||||||
v-hasPermi="['warehouse:warehouse-info:delete']"
|
|
||||||
@click.native="dropdown(3, item.id, item.name)">
|
|
||||||
删除
|
|
||||||
</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</el-dropdown>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="20">
|
|
||||||
<!-- 搜索工作栏 -->
|
|
||||||
<search-bar
|
|
||||||
:formConfigs="formConfig"
|
|
||||||
ref="searchBarForm"
|
|
||||||
@headBtnClick="buttonClick" />
|
|
||||||
|
|
||||||
<!-- 列表 -->
|
|
||||||
<base-table
|
|
||||||
v-loading="dataListLoading"
|
|
||||||
:table-props="tableProps"
|
|
||||||
:page="listQuery.pageNo"
|
|
||||||
:limit="listQuery.pageSize"
|
|
||||||
:table-data="tableData">
|
|
||||||
<method-btn
|
|
||||||
v-if="tableBtn.length"
|
|
||||||
slot="handleBtn"
|
|
||||||
:width="80"
|
|
||||||
label="操作"
|
|
||||||
:method-list="tableBtn"
|
|
||||||
@clickBtn="handleClick" />
|
|
||||||
</base-table>
|
|
||||||
<pagination
|
|
||||||
:limit.sync="listQuery.pageSize"
|
|
||||||
:page.sync="listQuery.pageNo"
|
|
||||||
:total="listQuery.total"
|
|
||||||
@pagination="getDataList" />
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<!-- 对话框(添加 / 修改) -->
|
|
||||||
<base-dialog
|
|
||||||
:dialogTitle="addOrEditTitle"
|
|
||||||
:dialogVisible="addOrUpdateVisible"
|
|
||||||
@cancel="handleCancel"
|
|
||||||
@confirm="handleConfirm"
|
|
||||||
:before-close="handleCancel"
|
|
||||||
:destroy-on-close="true"
|
|
||||||
width="40%">
|
|
||||||
<add-or-update
|
|
||||||
ref="addOrUpdate"
|
|
||||||
@refreshDataList="successSubmit"></add-or-update>
|
|
||||||
<add-or-update1
|
|
||||||
ref="addOrUpdate1"
|
|
||||||
@refreshDataList="successSubmit1"></add-or-update1>
|
|
||||||
</base-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import AddOrUpdate from './add-or-updata';
|
import barChart from './BarChart.vue';
|
||||||
import AddOrUpdate1 from './add-or-updata1';
|
|
||||||
import basicPage from '../mixins/basic-page';
|
|
||||||
import { parseTime } from '../mixins/code-filter';
|
|
||||||
import codeFilter from '../mixins/code-filter';
|
|
||||||
import {
|
|
||||||
deleteWarehouse,
|
|
||||||
getWarehouseList,
|
|
||||||
} from '@/api/warehouse/warehouse-info';
|
|
||||||
import {
|
|
||||||
deleteWarehouseLocation,
|
|
||||||
getWarehouseLocationPage,
|
|
||||||
} from '@/api/warehouse/warehouseLocation';
|
|
||||||
import { BackgroundClass } from 'quill';
|
|
||||||
|
|
||||||
const tableProps = [
|
|
||||||
{
|
|
||||||
prop: 'warehouseCode',
|
|
||||||
label: '仓库编码',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'warehouseName',
|
|
||||||
label: '仓库名称',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'code',
|
|
||||||
label: '库位编码',
|
|
||||||
width: 180
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'name',
|
|
||||||
label: '库位名称',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'arrange',
|
|
||||||
label: '排',
|
|
||||||
width: 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'col',
|
|
||||||
label: '列',
|
|
||||||
width: 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'layer',
|
|
||||||
label: '层',
|
|
||||||
width: 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'type',
|
|
||||||
label: '库位类型',
|
|
||||||
filter: codeFilter('wareType'),
|
|
||||||
width: 80
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'enabled',
|
|
||||||
label: '是否可用',
|
|
||||||
filter: codeFilter('deactivate'),
|
|
||||||
width: 80
|
|
||||||
},
|
|
||||||
{
|
|
||||||
prop: 'remark',
|
|
||||||
label: '备注',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [basicPage],
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
urlOptions: {
|
wareName: ['仓库名称'],
|
||||||
getDataListURL: getWarehouseLocationPage,
|
stockNum: ['库存数量'],
|
||||||
deleteURL: deleteWarehouseLocation,
|
barData: [],
|
||||||
getWareListURL: getWarehouseList,
|
|
||||||
deleteWareURL: deleteWarehouse,
|
|
||||||
},
|
|
||||||
tableProps,
|
|
||||||
tableBtn: [
|
|
||||||
this.$auth.hasPermi(`extend:warehouse-location:update`)
|
|
||||||
? {
|
|
||||||
type: 'edit',
|
|
||||||
btnName: '编辑',
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
this.$auth.hasPermi(`extend:warehouse-location:delete`)
|
|
||||||
? {
|
|
||||||
type: 'delete',
|
|
||||||
btnName: '删除',
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
].filter((v) => v),
|
|
||||||
tableData: [],
|
|
||||||
formConfig: [
|
|
||||||
{
|
|
||||||
type: 'input',
|
|
||||||
label: '库位名称',
|
|
||||||
placeholder: '库位名称',
|
|
||||||
param: 'name',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'input',
|
|
||||||
label: '库位编码',
|
|
||||||
placeholder: '库位编码',
|
|
||||||
param: 'code',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'button',
|
|
||||||
btnName: '查询',
|
|
||||||
name: 'search',
|
|
||||||
color: 'primary',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'separate',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: this.$auth.hasPermi('extend:warehouse-location:create')
|
|
||||||
? 'button'
|
|
||||||
: '',
|
|
||||||
btnName: '新增',
|
|
||||||
name: 'add',
|
|
||||||
color: 'success',
|
|
||||||
plain: true,
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// type: 'button',
|
|
||||||
// btnName: '重置',
|
|
||||||
// name: 'reset',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// type: this.$auth.hasPermi('extend:warehouse-location:create') ? 'separate' : '',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// type: this.$auth.hasPermi('extend:warehouse-location:export') ? 'button' : '',
|
|
||||||
// btnName: '导出',
|
|
||||||
// name: 'export',
|
|
||||||
// color: 'warning',
|
|
||||||
// },
|
|
||||||
],
|
|
||||||
wareArr: [],
|
|
||||||
listQuery: {
|
|
||||||
pageSize: 10,
|
|
||||||
pageNo: 1,
|
|
||||||
total: 1,
|
|
||||||
warehouseId: '',
|
|
||||||
},
|
|
||||||
wareInfo: {},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
AddOrUpdate,
|
barChart,
|
||||||
AddOrUpdate1,
|
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.urlOptions.getWareListURL().then((response) => {
|
for (let i = 0; i < 5; i++) {
|
||||||
this.wareArr = response.data;
|
this.wareName.push('仓库' + i);
|
||||||
if (this.wareArr) {
|
this.stockNum.push(i * 100 + i);
|
||||||
this.wareInfo.warehouseId = this.wareArr[0].id;
|
}
|
||||||
this.wareInfo.warehouseName = this.wareArr[0].name;
|
|
||||||
this.wareInfo.warehouseCode = this.wareArr[0].code;
|
|
||||||
this.getDataList();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 获取数据列表
|
toPage(i) {
|
||||||
getDataList() {
|
console.log(i);
|
||||||
if (!this.wareInfo.warehouseId) {
|
for (let i = 1; i < 6; i++) {
|
||||||
return;
|
const obj = {
|
||||||
|
name: this.wareName[i],
|
||||||
|
value: this.stockNum[i],
|
||||||
|
};
|
||||||
|
this.barData.push(obj);
|
||||||
}
|
}
|
||||||
this.listQuery.warehouseId = this.wareInfo.warehouseId;
|
console.log(this.barData);
|
||||||
this.dataListLoading = true;
|
|
||||||
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
|
|
||||||
this.tableData = response.data.list;
|
|
||||||
this.listQuery.total = response.data.total;
|
|
||||||
this.dataListLoading = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
buttonClick(val) {
|
|
||||||
switch (val.btnName) {
|
|
||||||
case 'search':
|
|
||||||
this.listQuery.pageNo = 1;
|
|
||||||
this.listQuery.pageSize = 10;
|
|
||||||
this.listQuery.name = val.name;
|
|
||||||
this.listQuery.code = val.code;
|
|
||||||
this.getDataList();
|
|
||||||
break;
|
|
||||||
case 'reset':
|
|
||||||
this.$refs.searchBarForm.resetForm();
|
|
||||||
this.listQuery = {
|
|
||||||
pageSize: 10,
|
|
||||||
pageNo: 1,
|
|
||||||
total: 1,
|
|
||||||
};
|
|
||||||
this.getDataList();
|
|
||||||
break;
|
|
||||||
case 'add':
|
|
||||||
this.addOrEditTitle = '新增库位';
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.addOrUpdateHandle();
|
|
||||||
break;
|
|
||||||
case 'export':
|
|
||||||
this.handleExport();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
console.log(val);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getWareArr() {
|
|
||||||
this.urlOptions.getWareListURL().then((response) => {
|
|
||||||
this.wareArr = response.data;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
addWare() {
|
|
||||||
this.addOrEditTitle = '新增仓库';
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.addOrUpdate = 'addOrUpdate1';
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.addOrUpdate1.init();
|
this.$refs.barChart.initChart();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//dropdown点击
|
|
||||||
dropdown(val, id, name) {
|
|
||||||
if (val === 1) {
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.addOrEditTitle = '编辑仓库';
|
|
||||||
this.addOrUpdate = 'addOrUpdate1';
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.addOrUpdate1.init(id);
|
|
||||||
});
|
|
||||||
} else if (val === 2) {
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.addOrEditTitle = '仓库详情';
|
|
||||||
this.addOrUpdate = 'addOrUpdate1';
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.addOrUpdate1.init(id, true);
|
|
||||||
});
|
|
||||||
} else if (val === 3) {
|
|
||||||
this.deleteWare(id, name);
|
|
||||||
} else {
|
|
||||||
console.log(val);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 删除仓库
|
|
||||||
deleteWare(id, name) {
|
|
||||||
this.$confirm(`确定对仓库[${name}]进行删除操作?`, '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
type: 'warning',
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
this.urlOptions.deleteWareURL(id).then(({ data }) => {
|
|
||||||
this.$message({
|
|
||||||
message: '操作成功',
|
|
||||||
type: 'success',
|
|
||||||
duration: 1500,
|
|
||||||
onClose: () => {
|
|
||||||
this.getWareArr();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(() => {});
|
|
||||||
},
|
|
||||||
//tableBtn点击
|
|
||||||
handleClick(val) {
|
|
||||||
if (val.type === 'edit') {
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.addOrEditTitle = '编辑';
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.addOrUpdate.init(val.data.id, this.wareInfo);
|
|
||||||
});
|
|
||||||
} else if (val.type === 'delete') {
|
|
||||||
this.deleteHandle(val.data.id, val.data.name, val.data._pageIndex);
|
|
||||||
} else if (val.type === 'change') {
|
|
||||||
this.changeStatus(val.data.id);
|
|
||||||
} else {
|
|
||||||
this.otherMethods(val);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 新增 / 修改
|
|
||||||
addOrUpdateHandle(id) {
|
|
||||||
this.addOrUpdateVisible = true;
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.addOrUpdate.init(id, this.wareInfo);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
successSubmit1() {
|
|
||||||
this.handleCancel();
|
|
||||||
this.getWareArr();
|
|
||||||
},
|
|
||||||
setWareInfo(info) {
|
|
||||||
this.wareInfo.warehouseName = info.name;
|
|
||||||
this.wareInfo.warehouseCode = info.code;
|
|
||||||
this.wareInfo.warehouseId = info.id;
|
|
||||||
this.getDataList();
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.ware-card {
|
.flexDiv {
|
||||||
margin-bottom: 10px;
|
display: flex;
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
.ware-card >>> .el-card__body {
|
.divClass {
|
||||||
padding: 10px;
|
width: 120px;
|
||||||
font-size: 16px;
|
height: 50px;
|
||||||
line-height: 30px;
|
line-height: 50px;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid #ededed;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #606266;
|
||||||
}
|
}
|
||||||
.el-dropdown-div {
|
.up:nth-child(n) {
|
||||||
float: right;
|
border-bottom: none;
|
||||||
padding-top: 3px;
|
border-right: none;
|
||||||
|
}
|
||||||
|
.up:last-child {
|
||||||
|
border-right: 1px solid #ededed;
|
||||||
|
}
|
||||||
|
.down:nth-child(n) {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.down:last-child {
|
||||||
|
border-right: 1px solid #ededed;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
413
src/views/warehouse/warehouse-info1/index.vue
Normal file
413
src/views/warehouse/warehouse-info1/index.vue
Normal file
@ -0,0 +1,413 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
v-hasPermi="['warehouse:warehouse-info:create']"
|
||||||
|
plain
|
||||||
|
size="mini"
|
||||||
|
@click="addWare">
|
||||||
|
新增仓库
|
||||||
|
</el-button>
|
||||||
|
<el-divider content-position="left">仓库列表</el-divider>
|
||||||
|
<el-card
|
||||||
|
v-for="item in wareArr"
|
||||||
|
:key="item.id"
|
||||||
|
shadow="hover"
|
||||||
|
@click.native="setWareInfo(item)"
|
||||||
|
:style="{
|
||||||
|
background: item.id === wareInfo.warehouseId ? '#37D97F' : '',
|
||||||
|
color: item.id === wareInfo.warehouseId ? 'white' : '',
|
||||||
|
}"
|
||||||
|
class="ware-card">
|
||||||
|
{{ item.name }}
|
||||||
|
<el-dropdown class="el-dropdown-div">
|
||||||
|
<span class="el-dropdown-link">
|
||||||
|
<i
|
||||||
|
class="el-icon-s-tools"
|
||||||
|
style="color: #409eff; cursor: pointer; font-size: 25px" />
|
||||||
|
</span>
|
||||||
|
<el-dropdown-menu slot="dropdown">
|
||||||
|
<el-dropdown-item
|
||||||
|
v-hasPermi="['warehouse:warehouse-info:update']"
|
||||||
|
@click.native="dropdown(1, item.id)">
|
||||||
|
编辑
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item @click.native="dropdown(2, item.id)">
|
||||||
|
详情
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item
|
||||||
|
v-hasPermi="['warehouse:warehouse-info:delete']"
|
||||||
|
@click.native="dropdown(3, item.id, item.name)">
|
||||||
|
删除
|
||||||
|
</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</el-dropdown>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="20">
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
|
<search-bar
|
||||||
|
:formConfigs="formConfig"
|
||||||
|
ref="searchBarForm"
|
||||||
|
@headBtnClick="buttonClick" />
|
||||||
|
|
||||||
|
<!-- 列表 -->
|
||||||
|
<base-table
|
||||||
|
v-loading="dataListLoading"
|
||||||
|
:table-props="tableProps"
|
||||||
|
:page="listQuery.pageNo"
|
||||||
|
:limit="listQuery.pageSize"
|
||||||
|
:table-data="tableData">
|
||||||
|
<method-btn
|
||||||
|
v-if="tableBtn.length"
|
||||||
|
slot="handleBtn"
|
||||||
|
:width="80"
|
||||||
|
label="操作"
|
||||||
|
:method-list="tableBtn"
|
||||||
|
@clickBtn="handleClick" />
|
||||||
|
</base-table>
|
||||||
|
<pagination
|
||||||
|
:limit.sync="listQuery.pageSize"
|
||||||
|
:page.sync="listQuery.pageNo"
|
||||||
|
:total="listQuery.total"
|
||||||
|
@pagination="getDataList" />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 对话框(添加 / 修改) -->
|
||||||
|
<base-dialog
|
||||||
|
:dialogTitle="addOrEditTitle"
|
||||||
|
:dialogVisible="addOrUpdateVisible"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
@confirm="handleConfirm"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
:destroy-on-close="true"
|
||||||
|
width="40%">
|
||||||
|
<add-or-update
|
||||||
|
ref="addOrUpdate"
|
||||||
|
@refreshDataList="successSubmit"></add-or-update>
|
||||||
|
<add-or-update1
|
||||||
|
ref="addOrUpdate1"
|
||||||
|
@refreshDataList="successSubmit1"></add-or-update1>
|
||||||
|
</base-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import AddOrUpdate from './add-or-updata';
|
||||||
|
import AddOrUpdate1 from './add-or-updata1';
|
||||||
|
import basicPage from '../mixins/basic-page';
|
||||||
|
import { parseTime } from '../mixins/code-filter';
|
||||||
|
import codeFilter from '../mixins/code-filter';
|
||||||
|
import {
|
||||||
|
deleteWarehouse,
|
||||||
|
getWarehouseList,
|
||||||
|
} from '@/api/warehouse/warehouse-info';
|
||||||
|
import {
|
||||||
|
deleteWarehouseLocation,
|
||||||
|
getWarehouseLocationPage,
|
||||||
|
} from '@/api/warehouse/warehouseLocation';
|
||||||
|
import { BackgroundClass } from 'quill';
|
||||||
|
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'warehouseCode',
|
||||||
|
label: '仓库编码',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'warehouseName',
|
||||||
|
label: '仓库名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'code',
|
||||||
|
label: '库位编码',
|
||||||
|
width: 180
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'name',
|
||||||
|
label: '库位名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'arrange',
|
||||||
|
label: '排',
|
||||||
|
width: 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'col',
|
||||||
|
label: '列',
|
||||||
|
width: 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'layer',
|
||||||
|
label: '层',
|
||||||
|
width: 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'type',
|
||||||
|
label: '库位类型',
|
||||||
|
filter: codeFilter('wareType'),
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'enabled',
|
||||||
|
label: '是否可用',
|
||||||
|
filter: codeFilter('deactivate'),
|
||||||
|
width: 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'remark',
|
||||||
|
label: '备注',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default {
|
||||||
|
mixins: [basicPage],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
urlOptions: {
|
||||||
|
getDataListURL: getWarehouseLocationPage,
|
||||||
|
deleteURL: deleteWarehouseLocation,
|
||||||
|
getWareListURL: getWarehouseList,
|
||||||
|
deleteWareURL: deleteWarehouse,
|
||||||
|
},
|
||||||
|
tableProps,
|
||||||
|
tableBtn: [
|
||||||
|
this.$auth.hasPermi(`extend:warehouse-location:update`)
|
||||||
|
? {
|
||||||
|
type: 'edit',
|
||||||
|
btnName: '编辑',
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
this.$auth.hasPermi(`extend:warehouse-location:delete`)
|
||||||
|
? {
|
||||||
|
type: 'delete',
|
||||||
|
btnName: '删除',
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
].filter((v) => v),
|
||||||
|
tableData: [],
|
||||||
|
formConfig: [
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
label: '库位名称',
|
||||||
|
placeholder: '库位名称',
|
||||||
|
param: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
label: '库位编码',
|
||||||
|
placeholder: '库位编码',
|
||||||
|
param: 'code',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'button',
|
||||||
|
btnName: '查询',
|
||||||
|
name: 'search',
|
||||||
|
color: 'primary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'separate',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: this.$auth.hasPermi('extend:warehouse-location:create')
|
||||||
|
? 'button'
|
||||||
|
: '',
|
||||||
|
btnName: '新增',
|
||||||
|
name: 'add',
|
||||||
|
color: 'success',
|
||||||
|
plain: true,
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// type: 'button',
|
||||||
|
// btnName: '重置',
|
||||||
|
// name: 'reset',
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// type: this.$auth.hasPermi('extend:warehouse-location:create') ? 'separate' : '',
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// type: this.$auth.hasPermi('extend:warehouse-location:export') ? 'button' : '',
|
||||||
|
// btnName: '导出',
|
||||||
|
// name: 'export',
|
||||||
|
// color: 'warning',
|
||||||
|
// },
|
||||||
|
],
|
||||||
|
wareArr: [],
|
||||||
|
listQuery: {
|
||||||
|
pageSize: 10,
|
||||||
|
pageNo: 1,
|
||||||
|
total: 1,
|
||||||
|
warehouseId: '',
|
||||||
|
},
|
||||||
|
wareInfo: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
AddOrUpdate,
|
||||||
|
AddOrUpdate1,
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.urlOptions.getWareListURL().then((response) => {
|
||||||
|
this.wareArr = response.data;
|
||||||
|
if (this.wareArr) {
|
||||||
|
this.wareInfo.warehouseId = this.wareArr[0].id;
|
||||||
|
this.wareInfo.warehouseName = this.wareArr[0].name;
|
||||||
|
this.wareInfo.warehouseCode = this.wareArr[0].code;
|
||||||
|
this.getDataList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取数据列表
|
||||||
|
getDataList() {
|
||||||
|
if (!this.wareInfo.warehouseId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.listQuery.warehouseId = this.wareInfo.warehouseId;
|
||||||
|
this.dataListLoading = true;
|
||||||
|
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
|
||||||
|
this.tableData = response.data.list;
|
||||||
|
this.listQuery.total = response.data.total;
|
||||||
|
this.dataListLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
buttonClick(val) {
|
||||||
|
switch (val.btnName) {
|
||||||
|
case 'search':
|
||||||
|
this.listQuery.pageNo = 1;
|
||||||
|
this.listQuery.pageSize = 10;
|
||||||
|
this.listQuery.name = val.name;
|
||||||
|
this.listQuery.code = val.code;
|
||||||
|
this.getDataList();
|
||||||
|
break;
|
||||||
|
case 'reset':
|
||||||
|
this.$refs.searchBarForm.resetForm();
|
||||||
|
this.listQuery = {
|
||||||
|
pageSize: 10,
|
||||||
|
pageNo: 1,
|
||||||
|
total: 1,
|
||||||
|
};
|
||||||
|
this.getDataList();
|
||||||
|
break;
|
||||||
|
case 'add':
|
||||||
|
this.addOrEditTitle = '新增库位';
|
||||||
|
this.addOrUpdateVisible = true;
|
||||||
|
this.addOrUpdateHandle();
|
||||||
|
break;
|
||||||
|
case 'export':
|
||||||
|
this.handleExport();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.log(val);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getWareArr() {
|
||||||
|
this.urlOptions.getWareListURL().then((response) => {
|
||||||
|
this.wareArr = response.data;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addWare() {
|
||||||
|
this.addOrEditTitle = '新增仓库';
|
||||||
|
this.addOrUpdateVisible = true;
|
||||||
|
this.addOrUpdate = 'addOrUpdate1';
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addOrUpdate1.init();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//dropdown点击
|
||||||
|
dropdown(val, id, name) {
|
||||||
|
if (val === 1) {
|
||||||
|
this.addOrUpdateVisible = true;
|
||||||
|
this.addOrEditTitle = '编辑仓库';
|
||||||
|
this.addOrUpdate = 'addOrUpdate1';
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addOrUpdate1.init(id);
|
||||||
|
});
|
||||||
|
} else if (val === 2) {
|
||||||
|
this.addOrUpdateVisible = true;
|
||||||
|
this.addOrEditTitle = '仓库详情';
|
||||||
|
this.addOrUpdate = 'addOrUpdate1';
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addOrUpdate1.init(id, true);
|
||||||
|
});
|
||||||
|
} else if (val === 3) {
|
||||||
|
this.deleteWare(id, name);
|
||||||
|
} else {
|
||||||
|
console.log(val);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 删除仓库
|
||||||
|
deleteWare(id, name) {
|
||||||
|
this.$confirm(`确定对仓库[${name}]进行删除操作?`, '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.urlOptions.deleteWareURL(id).then(({ data }) => {
|
||||||
|
this.$message({
|
||||||
|
message: '操作成功',
|
||||||
|
type: 'success',
|
||||||
|
duration: 1500,
|
||||||
|
onClose: () => {
|
||||||
|
this.getWareArr();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
},
|
||||||
|
//tableBtn点击
|
||||||
|
handleClick(val) {
|
||||||
|
if (val.type === 'edit') {
|
||||||
|
this.addOrUpdateVisible = true;
|
||||||
|
this.addOrEditTitle = '编辑';
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addOrUpdate.init(val.data.id, this.wareInfo);
|
||||||
|
});
|
||||||
|
} else if (val.type === 'delete') {
|
||||||
|
this.deleteHandle(val.data.id, val.data.name, val.data._pageIndex);
|
||||||
|
} else if (val.type === 'change') {
|
||||||
|
this.changeStatus(val.data.id);
|
||||||
|
} else {
|
||||||
|
this.otherMethods(val);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 新增 / 修改
|
||||||
|
addOrUpdateHandle(id) {
|
||||||
|
this.addOrUpdateVisible = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.addOrUpdate.init(id, this.wareInfo);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
successSubmit1() {
|
||||||
|
this.handleCancel();
|
||||||
|
this.getWareArr();
|
||||||
|
},
|
||||||
|
setWareInfo(info) {
|
||||||
|
this.wareInfo.warehouseName = info.name;
|
||||||
|
this.wareInfo.warehouseCode = info.code;
|
||||||
|
this.wareInfo.warehouseId = info.id;
|
||||||
|
this.getDataList();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.ware-card {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.ware-card >>> .el-card__body {
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
.el-dropdown-div {
|
||||||
|
float: right;
|
||||||
|
padding-top: 3px;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user