projects/mes-test #133

Merged
gtz217 merged 281 commits from projects/mes-test into projects/mes 2023-11-30 09:11:34 +08:00
31 changed files with 3698 additions and 351 deletions
Showing only changes of commit 3bf8150764 - Show all commits

View File

@@ -1,8 +1,8 @@
###
# @Author: Do not edit
# @Date: 2023-08-29 09:40:39
# @LastEditTime: 2023-10-17 09:51:48
# @LastEditors: zhp
# @LastEditTime: 2023-10-27 16:17:13
# @LastEditors: DY
# @Description:
###
# 开发环境配置
@@ -13,11 +13,11 @@ VUE_APP_TITLE = MES系统
# 芋道管理系统/开发环境
VUE_APP_BASE_API = 'http://192.168.0.33:48082'
# VUE_APP_BASE_API = 'http://192.168.0.33:48082'
# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
# VUE_APP_BASE_API = 'http://192.168.1.49:48080'
# VUE_APP_BASE_API = 'http://192.168.1.8:48080'
# VUE_APP_BASE_API = 'http://192.168.1.56:48080'
VUE_APP_BASE_API = 'http://192.168.1.56:48080'
# VUE_APP_BASE_API = 'http://192.168.1.188:48080'

View File

@@ -26,12 +26,3 @@ export function autoSet(query) {
params: query
})
}
// 获得排班信息分页 建议size 150
export function groupTeamSchedulingPage(query) {
return request({
url: '/base/group-team-scheduling/page',
method: 'get',
params: query
})
}

121
src/api/base/material.js Normal file
View File

@@ -0,0 +1,121 @@
/*
* @Author: Do not edit
* @Date: 2023-10-21 11:50:46
* @LastEditTime: 2023-10-24 11:22:28
* @LastEditors: DY
* @Description:
*/
import request from '@/utils/request'
// 创建物料
export function createMaterial(data) {
return request({
url: '/base/material/create',
method: 'post',
data: data
})
}
// 更新物料
export function updateMaterial(data) {
return request({
url: '/base/material/update',
method: 'put',
data: data
})
}
// 删除物料
export function deleteMaterial(id) {
return request({
url: '/base/material/delete?id=' + id,
method: 'delete'
})
}
// 获得物料
export function getMaterial(id) {
return request({
url: '/base/material/get?id=' + id,
method: 'get'
})
}
// 获得物料code
export function getCode() {
return request({
url: '/base/material/getMaterialCode',
method: 'get'
})
}
// 获得物料分页
export function getMaterialPage(query) {
return request({
url: '/base/material/page',
method: 'get',
params: query
})
}
// 获得物料列表
export function getMaterialList(query) {
return request({
url: '/base/material/listbyfilter',
method: 'get',
params: query
})
}
// 获得供应商所有列表
export function getSupplierList(query) {
return request({
url: '/base/core-supplier/listAll',
method: 'get',
params: query
})
}
// 获得物料属性列表
export function getMaterialAttrList(query) {
return request({
url: '/base/material-attr/page',
method: 'get',
params: query
})
}
// 创建物料属性
export function createMaterialAttr(data) {
return request({
url: '/base/material-attr/create',
method: 'post',
data: data
})
}
// 更新物料属性
export function updateMaterialAttr(data) {
return request({
url: '/base/material-attr/update',
method: 'put',
data: data
})
}
// 删除物料属性
export function deleteMaterialAttr(id) {
return request({
url: '/base/material-attr/delete?id=' + id,
method: 'delete'
})
}
// 获得物料属性
export function getMaterialAttr(query) {
return request({
url: '/base/material-attr/get',
method: 'get',
params: query
})
}

View File

@@ -0,0 +1,68 @@
/*
* @Author: Do not edit
* @Date: 2023-10-21 11:50:46
* @LastEditTime: 2023-10-24 17:09:59
* @LastEditors: DY
* @Description:
*/
import request from '@/utils/request'
// 创建物料批次
export function createMaterialDate(data) {
return request({
url: '/base/material-date/create',
method: 'post',
data: data
})
}
// 更新物料批次
export function updateMaterialDate(data) {
return request({
url: '/base/material-date/update',
method: 'put',
data: data
})
}
// 删除物料批次
export function deleteMaterialDate(id) {
return request({
url: '/base/material-date/delete?id=' + id,
method: 'delete'
})
}
// 获得物料批次
export function getMaterialDate(id) {
return request({
url: '/base/material-date/getDetail?id=' + id,
method: 'get'
})
}
// 获得物料批次code
export function getCode() {
return request({
url: '/base/material-date/getMaterialDateCode',
method: 'get'
})
}
// 获得物料批次分页
export function getMaterDatePage(query) {
return request({
url: '/base/material-date/page',
method: 'get',
params: query
})
}
// 获得物料批次列表
export function getMaterDateList(query) {
return request({
url: '/base/material-date/listbyfilter',
method: 'get',
params: query
})
}

View File

@@ -0,0 +1,112 @@
/*
* @Author: Do not edit
* @Date: 2023-10-21 11:50:46
* @LastEditTime: 2023-10-26 20:06:29
* @LastEditors: DY
* @Description:
*/
import request from '@/utils/request'
// 创建产品Bom
export function createMaterialPB(data) {
return request({
url: '/base/material-product-bom/create',
method: 'post',
data: data
})
}
// 更新产品Bom
export function updateMaterialPB(data) {
return request({
url: '/base/material-product-bom/update',
method: 'put',
data: data
})
}
// 删除产品Bom
export function deleteMaterialPB(id) {
return request({
url: '/base/material-product-bom/delete?id=' + id,
method: 'delete'
})
}
// 获得产品Bom
export function getMaterialPB(id) {
return request({
url: '/base/material-product-bom/get?id=' + id,
method: 'get'
})
}
// 获得产品Bomcode
export function getCode() {
return request({
url: '/base/material-product-bom/getMaterialProductBomCode',
method: 'get'
})
}
// 获得产品Bom分页
export function getMaterialPBPage(query) {
return request({
url: '/base/material-product-bom/page',
method: 'get',
params: query
})
}
// 获得产品Bom列表
export function getMaterialPBList(query) {
return request({
url: '/base/material-product-bom/listbyfilter',
method: 'get',
params: query
})
}
// 获得产品列表
export function getProList(query) {
return request({
url: '/base/core-product/listAll',
method: 'get',
params: query
})
}
// 获得产品Bom详细分页
export function getProBomList(query) {
return request({
url: '/base/material-product-bom-det/page',
method: 'get',
params: query
})
}
// 创建产品Bom详细
export function createMaterialPBDet(data) {
return request({
url: '/base/material-product-bom-det/create',
method: 'post',
data: data
})
}
// 更新产品Bom详细
export function updateMaterialPBDet(data) {
return request({
url: '/base/material-product-bom-det/update',
method: 'put',
data: data
})
}
// 删除产品Bom详细
export function deleteMaterialPBDet(id) {
return request({
url: '/base/material-product-bom-det/delete?id=' + id,
method: 'delete'
})
}

View File

@@ -0,0 +1,69 @@
/*
* @Author: Do not edit
* @Date: 2023-10-21 11:50:46
* @LastEditTime: 2023-10-26 09:32:21
* @LastEditors: DY
* @Description:
*/
import request from '@/utils/request'
// 创建物料使用记录
export function createMaterialLog(data) {
return request({
url: '/base/material-use-log/create',
method: 'post',
data: data
})
}
// 更新物料使用记录
export function updateMaterialLog(data) {
return request({
url: '/base/material-use-log/update',
method: 'put',
data: data
})
}
// 获得物料使用记录
export function getMaterialLog(id) {
return request({
url: '/base/material-use-log/getDetail?id=' + id,
method: 'get'
})
}
// 获得物料使用记录分页
export function getMaterialLogPage(query) {
return request({
url: '/base/material-use-log/page',
method: 'get',
params: query
})
}
// 获得所有设备列表
export function getEqListAll(query) {
return request({
url: '/base/core-equipment/listAll',
method: 'get',
params: query
})
}
// 获得所有员工列表
export function getworkerAll(query) {
return request({
url: '/base/core-worker/listAll',
method: 'get',
params: query
})
}
// 删除物料使用记录
export function deleteMaterialLog(id) {
return request({
url: '/base/material-use-log/delete?id=' + id,
method: 'delete'
})
}

View File

@@ -34,6 +34,14 @@ export function getOrderCode() {
})
}
// 获取工单code
export function getWorkOrderCode() {
return request({
url: '/base/order/getWorkOrderCode',
method: 'get'
})
}
// 获得订单
export function getOrderById(query) {
return request({
@@ -41,4 +49,48 @@ export function getOrderById(query) {
method: 'get',
params: query
})
}
}
// 获得工艺流程列表
export function getProcessFlowList() {
return request({
url: '/extend/process-flow/listAll',
method: 'get'
})
}
// 创建订单
export function orderCreate(data) {
return request({
url: '/base/order/create',
method: 'post',
data: data
})
}
// 更新订单
export function orderUpdate(data) {
return request({
url: '/base/order/update',
method: 'put',
data: data
})
}
// 删除订单
export function orderDelete(query) {
return request({
url: '/base/order/delete',
method: 'delete',
params: query
})
}
// 下发订单绑定的穿工单id新建不传
export function orderIssue(data) {
return request({
url: '/base/order/issue',
method: 'post',
data: data
})
}

View File

@@ -0,0 +1,19 @@
import request from '@/utils/request'
// 获得排班信息分页 建议size 150
export function groupTeamSchedulingPage(query) {
return request({
url: '/base/group-team-scheduling/page',
method: 'get',
params: query
})
}
// 获得不同产线每小时报废数据,用于班组检测 班组生产情况详情(动态结构)
export function getSchedulingMonitoringRecord(query) {
return request({
url: '/base/quality-inspection-record/getSchedulingMonitoringRecord',
method: 'get',
params: query
})
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 60 (88103) - https://sketch.com -->
<desc>Created with Sketch.</desc>
<g id="11_系统管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="11-1用户管理" transform="translate(-1822.000000, -159.000000)" fill="#FF5454" fill-rule="nonzero">
<g id="编组-10" transform="translate(1821.000000, 158.000000)">
<g id="删除">
<rect id="矩形" opacity="0" x="0" y="0" width="16" height="16"></rect>
<path d="M9.39137788,11.7149165 C9.13431614,11.7149165 8.92716929,11.5077697 8.92716929,11.2507079 L8.92716929,6.14191781 C8.92716929,5.88485607 9.13431613,5.67770922 9.39137788,5.67770922 C9.64843963,5.67770922 9.85558647,5.88485606 9.85558647,6.14191781 L9.85558647,11.2482122 C9.85558647,11.5052739 9.64843961,11.7149165 9.39137788,11.7149165 Z M6.60612639,11.7149165 C6.34906466,11.7149165 6.1419178,11.5077697 6.1419178,11.2507079 L6.1419178,6.14191781 C6.1419178,5.88485607 6.34906466,5.67770922 6.60612641,5.67770922 C6.86318814,5.67770922 7.07033499,5.88485606 7.07033499,6.14191781 L7.07033499,11.2482122 C7.07033499,11.5052739 6.86318814,11.7149165 6.60612639,11.7149165 Z M14.0359594,3.82087491 L11.7149165,3.82087491 L11.7149165,2.89245775 C11.7149165,2.12376827 11.0959718,1.499832 10.3322738,1.499832 L5.67770923,1.499832 C4.90901976,1.499832 4.28508349,2.12376827 4.28508349,2.89245775 L4.28508349,3.82087491 L1.96404059,3.82087491 C1.70697885,3.82087491 1.499832,4.02802174 1.499832,4.28508349 C1.499832,4.54214524 1.70697884,4.74929208 1.96404059,4.74929208 L14.0359594,4.74929208 C14.2930211,4.74929208 14.500168,4.54214524 14.500168,4.28508349 C14.500168,4.02802174 14.2930212,3.82087491 14.0359594,3.82087491 Z M5.21350066,2.89245775 C5.21350066,2.63789175 5.42314324,2.42824916 5.67770925,2.42824916 L10.3322738,2.42824916 C10.5868398,2.42824916 10.7864994,2.63290025 10.7864994,2.89245775 L10.7864994,3.82087491 L5.21350066,3.82087491 L5.21350066,2.89245775 L5.21350066,2.89245775 Z M11.2507079,14.500168 L4.75178782,14.500168 C3.98309834,14.500168 3.35916207,13.8762317 3.35916207,13.1075423 L3.35916207,6.13692631 C3.35916207,5.87986457 3.56630891,5.67271772 3.82337066,5.67271772 C4.08043241,5.67271772 4.28757925,5.87986456 4.28757925,6.13692631 L4.28757925,13.1075423 C4.28757925,13.364604 4.49722183,13.5717508 4.75178783,13.5717508 L11.2532037,13.5717508 C11.5102654,13.5717508 11.7174123,13.364604 11.7174123,13.1075423 L11.7174123,6.15439653 C11.7174123,5.89733479 11.9245591,5.69018794 12.1816209,5.69018794 C12.4386826,5.69018794 12.6458294,5.89733478 12.6458294,6.15439653 L12.6458294,13.1075423 C12.6433337,13.873736 12.0193974,14.500168 11.2507079,14.500168 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -89,8 +89,6 @@ export const DICT_TYPE = {
// ============== ENERGY - 能源模块 =============
ENERGY_UNIT: 'energy_unit',
// ============== ENERGY - 能源模块 =============
EQU_ALARM_LEVEL: 'equ_alarm_level',
MONITOR_INDEX_TYPE: 'monitor_index_type',
OBJECT_TYPE: 'object_type',
@@ -99,8 +97,9 @@ export const DICT_TYPE = {
// ============== ORDER - 订单模块 =============
ORDER_STATUS: 'order_status',
ORDER_ORIGIN: 'order_origin',
ORDER_PRIORITY: 'order_priority'
ORDER_ORIGIN: 'order_Origin',
ORDER_PRIORITY: 'order_priority',
PACK_SPEC: 'pack_spec'
}
/**

View File

@@ -0,0 +1,65 @@
<!--
* @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>

View File

@@ -0,0 +1,421 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-10-27 15:11:02
* @Description:
-->
<template>
<el-drawer
:visible.sync="visible"
:show-close="false"
:wrapper-closable="false"
class="drawer"
size="60%">
<small-title slot="title" :no-padding="true">
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title>
<div class="content">
<div class="visual-part">
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmit()"
label-width="100px"
label-position="top">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="物料编码" prop="code">
<el-input
v-model="dataForm.code"
clearable
:disabled="isdetail"
placeholder="请输入物料编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料名称" prop="name">
<el-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入物料名称" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="英文名称" prop="engName">
<el-input
v-model="dataForm.engName"
clearable
:disabled="isdetail"
placeholder="请输入英文名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料类型" prop="type">
<el-select
v-model="dataForm.type"
filterable
:disabled="isdetail"
placeholder="请选择物料类型">
<el-option
v-for="dict in materialList"
:key="dict.value"
:label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="规格" prop="spec">
<el-input
v-model="dataForm.spec"
clearable
:disabled="isdetail"
placeholder="请输入规格" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商" prop="supplierId">
<el-select
v-model="dataForm.supplierId"
filterable
clearable
:disabled="isdetail"
placeholder="请选择供应商">
<el-option
v-for="dict in supplierList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="单位" prop="unit">
<el-select
v-model="dataForm.unit"
filterable
:disabled="isdetail"
placeholder="请选择物料单位">
<el-option
v-for="dict in unitList"
: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>
<base-table
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:add-button-show="isdetail ? null : '添加属性'"
@emitButtonClick="addNew()"
: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 class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button v-if="isdetail" type="primary" @click="goEdit()">
编辑
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
</div>
<attr-add
v-if="addOrUpdateVisible"
ref="addOrUpdate"
:material-id="dataForm.id"
@refreshDataList="getList" />
</el-drawer>
</template>
<script>
import basicAdd from '../../core/mixins/basic-add';
import { createMaterial, updateMaterial, getMaterial, getCode, getSupplierList, getMaterialAttrList, deleteMaterialAttr } from "@/api/base/material";
import { listData } from "@/api/system/dict/data";
import SmallTitle from './SmallTitle';
import { parseTime } from '../../core/mixins/code-filter';
import attrAdd from './attr-add';
const tableBtn = [
{
type: 'edit',
btnName: '编辑',
},
{
type: 'delete',
btnName: '删除',
},
];
const tableProps = [
{
prop: 'createTime',
label: '添加时间',
filter: parseTime,
},
{
prop: 'attrName',
label: '属性名',
},
{
prop: 'attrValue',
label: '属性值',
},
];
export default {
mixins: [basicAdd],
components: { SmallTitle, attrAdd },
data() {
return {
tableBtn,
tableProps,
addOrUpdateVisible: false,
urlOptions: {
isGetCode: true,
codeURL: getCode,
createURL: createMaterial,
updateURL: updateMaterial,
infoURL: getMaterial,
},
listQuery: {
pageSize: 10,
pageNo: 1,
total: 0,
},
dataForm: {
id: undefined,
code: undefined,
name: '',
engName: '',
type: '',
spec: undefined,
supplierId: undefined,
remark: undefined,
unit: ''
},
materialList: [],
supplierList: [],
materialAttrList: [],
unitList: [],
visible: false,
isdetail: false,
idAttrShow: false,
dataRule: {
code: [{ required: true, message: "物料编码不能为空", trigger: "blur" }],
name: [{ required: true, message: "物料名称不能为空", trigger: "blur" }],
type: [{ required: true, message: "物料类型不能为空", trigger: "blur" }]
}
};
},
mounted() {
this.getDict()
},
methods: {
async getDict() {
// 物料类型列表
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
? '[名称=' + raw.data.attrName + ']'
: '[序号=' + raw.data._pageIndex + ']'
}进行删除操作?`,
'提示',
{
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;
if (id) {
this.idAttrShow = true
} else {
this.idAttrShow = false
}
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
if (this.dataForm.id) {
// 获取物料详情
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data;
});
// 获取物料的属性列表
this.getList();
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
// this.initData();
},
goEdit() {
this.isdetail = false;
},
// 新增 / 修改
addNew(id) {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});
}
}
};
</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;
}
</style>

View File

@@ -0,0 +1,141 @@
<template>
<el-dialog
:visible.sync="visible"
:width="'35%'"
: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="100px"
@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>

View File

@@ -0,0 +1,233 @@
<template>
<div class="app-container">
<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="220"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick" />
</base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
<add-or-update
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList" />
</div>
</template>
<script>
import AddOrUpdate from './add-or-updata';
import basicPage from '../../core/mixins/basic-page';
import { parseTime } from '../../core/mixins/code-filter';
import {
getMaterialPage,
deleteMaterial
} from '@/api/base/material';
import { listData } from "@/api/system/dict/data";
const tableProps = [
{
prop: 'createTime',
label: '添加时间',
filter: parseTime
},
{
prop: 'code',
label: '物料编码'
},
{
prop: 'name',
label: '物料名称'
},
{
prop: 'engName',
label: '英文名称'
},
{
prop: 'abbr',
label: '缩写'
},
{
prop: 'materialType',
label: '物料类型'
},
{
prop: 'supplierName',
label: '供应商'
},
{
prop: 'remark',
label: '备注'
}
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getMaterialPage,
deleteURL: deleteMaterial
// exportURL: exportFactoryExcel,
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:material:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:material:queryAttr`)
? {
type: 'search',
btnName: '查看属性',
}
: undefined,
this.$auth.hasPermi(`base:material:editAttr`)
? {
type: 'editAttr',
btnName: '编辑属性',
}
: undefined,
this.$auth.hasPermi(`base:material:delete`)
? {
type: 'delete',
btnName: '删除',
}
: undefined,
].filter((v)=>v),
tableData: [],
typeList: [],
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('base:material:create') ? 'button' : '',
btnName: '新增物料',
name: 'add',
color: 'success',
plain: true
},
],
};
},
components: {
AddOrUpdate,
},
created() {
this.getDict()
},
methods: {
async getDict() {
// 物料类型列表
const res = await listData({
pageNo: 1,
pageSize: 99,
dictType: 'material_type',
});
this.typeList = res.data.list.map(item => {
return {
label: item.label,
value: Number(item.value)
}
});
},
otherMethods(val) {
if (val.type === 'search') {
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) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.name = val.name ? val.name : undefined;
this.listQuery.code = val.code ? val.code : undefined;
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);
}
},
},
};
</script>

View File

@@ -0,0 +1,107 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-10-24 18:34:07
* @Description:
-->
<template>
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmit()"
label-width="80px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="物料名称" prop="materialId">
<el-select
v-model="dataForm.materialId"
placeholder="请选择物料"
@change="setMaterialCode">
<el-option
v-for="dict in materialList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="dataForm.materialCode"
disabled
placeholder="请输入物料编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="批次号" prop="code">
<el-input v-model="dataForm.code" clearable placeholder="请输入批次号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="批次名称" prop="name">
<el-input v-model="dataForm.name" clearable placeholder="请输入批次名称" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-form>
</template>
<script>
import basicAdd from '../../core/mixins/basic-add';
import { createMaterialDate, updateMaterialDate, getMaterialDate, getCode } from "@/api/base/materialDate";
import { getMaterialList } from "@/api/base/material";
export default {
mixins: [basicAdd],
data() {
return {
urlOptions: {
isGetCode: true,
codeURL: getCode,
createURL: createMaterialDate,
updateURL: updateMaterialDate,
infoURL: getMaterialDate,
},
dataForm: {
id: undefined,
code: undefined,
name: undefined,
materialId: undefined,
materialCode: undefined,
remark: undefined,
},
materialList: [],
dataRule: {
materialId: [{ required: true, message: "物料不能为空", trigger: "blur" }],
code: [{ required: true, message: "工厂编码不能为空", trigger: "blur" }],
name: [{ required: true, message: "工厂名称不能为空", trigger: "blur" }],
}
};
},
mounted() {
this.getDict()
console.log('我看看', this.dataForm)
},
methods: {
async getDict() {
// 物料列表
const res = await getMaterialList();
this.materialList = res.data;
},
setMaterialCode() {
const chooseM = this.materialList.filter(item => {
return item.id === this.dataForm.materialId
})
this.dataForm.materialCode = chooseM[0].code
}
},
};
</script>

View File

@@ -0,0 +1,169 @@
<template>
<div class="app-container">
<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="120"
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>
</template>
<script>
import AddOrUpdate from './add-or-updata';
import basicPage from '../../core/mixins/basic-page';
import { parseTime } from '../../core/mixins/code-filter';
import {
getMaterDatePage,
deleteMaterialDate
} from '@/api/base/materialDate';
const tableProps = [
{
prop: 'createTime',
label: '添加时间',
filter: parseTime
},
{
prop: 'code',
label: '批次号'
},
{
prop: 'name',
label: '批次名称'
},
{
prop: 'materialCode',
label: '物料编码'
},
{
prop: 'materialName',
label: '物料名称'
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getMaterDatePage,
deleteURL: deleteMaterialDate,
// exportURL: exportFactoryExcel,
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:material-date:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:material-date:delete`)
? {
type: 'delete',
btnName: '删除',
}
: undefined,
].filter((v)=>v),
tableData: [],
formConfig: [
{
type: 'input',
label: '批次名',
placeholder: '批次名',
param: 'name',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: 'separate',
},
{
type: this.$auth.hasPermi('base:material-date:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
},
],
};
},
components: {
AddOrUpdate,
},
created() {},
methods: {
// 获取数据列表
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
this.tableData = response.data.records;
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 ? val.name : undefined;
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);
}
},
},
};
</script>

View File

@@ -0,0 +1,469 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-10-27 16:06:44
* @Description:
-->
<template>
<el-drawer
:visible.sync="visible"
:show-close="false"
:wrapper-closable="false"
class="drawer"
size="70%">
<small-title slot="title" :no-padding="true">
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title>
<div class="content">
<div class="visual-part">
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmit()"
label-width="100px"
label-position="top">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="产品名称" prop="productId">
<el-select
v-model="dataForm.productId"
filterable
:disabled="isdetail"
placeholder="请选择产品">
<el-option
v-for="dict in productList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品BOM编码" prop="code">
<el-input v-model="dataForm.code" disabled placeholder="请输入产品Bom编码" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item>
</el-form>
</div>
<div class="attr-list" v-if="idAttrShow">
<small-title
style="margin: 16px 0; padding-left: 8px"
:no-padding="true">
BOM明细
</small-title>
<!-- <base-table
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:add-button-show="isdetail ? null : '添加属性'"
@emitButtonClick="addNew()"
:table-data="materialAttrList">
<method-btn
v-if="!isdetail"
slot="handleBtn"
:width="120"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick" />
</base-table> -->
<el-button v-show="!isdetail" type="success" size="small" style="float: right" @click="addRow()">添加一行</el-button>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column type="index" label="序号" />
<el-table-column prop="createTime" label="添加时间">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column prop="materialId" label="物料名称">
<template slot-scope="scope">
<el-select
v-model="scope.row.materialId"
filterable
:disabled="!scope.row.isEdit"
placeholder="请选择物料"
@change="setCode(scope.row)">
<el-option
v-for="dict in materialList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</template>
</el-table-column>
<el-table-column prop="materialCode" label="物料编码" />
<el-table-column prop="mUnit" label="单位" />
<el-table-column prop="num" label="数量">
<template slot-scope="scope">
<el-input v-model="scope.row.num" :disabled="!scope.row.isEdit"></el-input>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注">
<template slot-scope="scope">
<el-input v-model="scope.row.remark" :disabled="!scope.row.isEdit"></el-input>
</template>
</el-table-column>
<el-table-column v-if="!isdetail" label="操作">
<template slot-scope="scope">
<el-tooltip v-if="!scope.row.isEdit" placement="top" content="编辑">
<el-button
type="text"
:style="{color:'#0B58FF'}"
size="mini"
@click="edit(scope.row)"
>
<!-- 此处的icon的名字命名为'table_'加上按钮的type -->
<svg-icon style="width: 18px; height: 18px" class="item-icon" icon-class="edit" />
<!-- <span>{{ item.btnName | i18nFilter }}</span> -->
</el-button>
</el-tooltip>
<el-button v-else type="primary" size="small" @click="saveData(scope.row)">保存</el-button>
<el-tooltip placement="top" content="删除">
<el-button
type="text"
:style="{color:'#FF5454'}"
size="mini"
@click="deleteDetail(scope.row)"
>
<!-- 此处的icon的名字命名为'table_'加上按钮的type -->
<svg-icon style="width: 18px; height: 18px" class="item-icon" icon-class="table_delete" />
<!-- <span>{{ item.btnName | i18nFilter }}</span> -->
</el-button>
</el-tooltip>
</template>
</el-table-column>
</el-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 class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button v-if="isdetail" type="primary" @click="goEdit()">
编辑
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
</div>
<!-- <attr-add
v-if="addOrUpdateVisible"
ref="addOrUpdate"
:material-id="dataForm.id"
@refreshDataList="getList" /> -->
</el-drawer>
</template>
<script>
import basicAdd from '../../core/mixins/basic-add';
import { createMaterialPB, updateMaterialPB, getMaterialPB, getCode, getProList, getProBomList, createMaterialPBDet, updateMaterialPBDet, deleteMaterialPBDet } from "@/api/base/materialProductBom";
import { getMaterialList } from "@/api/base/material";
import { listData } from "@/api/system/dict/data";
import SmallTitle from '../material/SmallTitle';
import { parseTime } from '../../core/mixins/code-filter';
// import attrAdd from './attr-add';
const tableBtn = [
{
type: 'edit',
btnName: '编辑',
},
{
type: 'delete',
btnName: '删除',
},
];
const tableProps = [
{
prop: 'createTime',
label: '添加时间',
filter: parseTime,
},
{
prop: 'attrName',
label: '属性名',
},
{
prop: 'attrValue',
label: '属性值',
},
];
export default {
mixins: [basicAdd],
components: { SmallTitle },
data() {
return {
tableBtn,
tableProps,
addOrUpdateVisible: false,
urlOptions: {
isGetCode: true,
codeURL: getCode,
createURL: createMaterialPB,
updateURL: updateMaterialPB,
infoURL: getMaterialPB,
},
listQuery: {
pageSize: 10,
pageNo: 1,
total: 0,
},
dataForm: {
id: undefined,
code: undefined,
productId: '',
remark: undefined,
},
productList: [],
materialAttrList: [],
materialList: [],
tableData: [],
unitList: [],
visible: false,
isdetail: false,
idAttrShow: false,
dataRule: {
productId: [{ required: true, message: "产品不能为空", trigger: "blur" }]
}
};
},
mounted() {
this.getDict()
},
methods: {
async getDict() {
// 产品列表
const proRes = await getProList();
this.productList = proRes.data;
// 物料列表
const res = await getMaterialList();
this.materialList = res.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;
},
deleteDetail(raw) {
this.$confirm(
`确定删除关于物料编码为${
raw.materialCode}的数据?`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
deleteMaterialPBDet(raw.id).then(({ data }) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.getList();
},
});
});
})
.catch(() => {});
},
setCode(row) {
this.materialList.filter(item => {
if (row.materialId === item.id) {
row.materialCode = item.code
}
this.unitList.filter(u => {
if (item.unit === u.value) {
row.unit = u.value
row.mUnit = u.label
}
})
// return row.materialId === item.id
})
// row.materialCode = tempList[0].code
// row.unit = tempList[0].unit
console.log('row', row)
},
edit(row) {
row.isEdit = true
},
saveData(row) {
// this.$refs['dataForm'].validate((valid) => {
// if (valid) {
// 修改的提交
if (row.id) {
updateMaterialPBDet({
...row
}).then((response) => {
this.$modal.msgSuccess('修改成功');
// this.visible = false;
this.getList();
});
return;
}
// 添加的提交
createMaterialPBDet({
...row
}).then((response) => {
this.$modal.msgSuccess('新增成功');
// this.visible = false;
this.getList();
});
// }
// });
},
getList() {
// 获取产品Bom详细列表
getProBomList({
...this.listQuery,
bomId: this.dataForm.id,
createTime: ['2023-10-26 00:00:00', '2023-10-27 12:00:00']
}).then((response) => {
this.tableData = response.data.records.map(item => {
this.unitList.filter(u => {
if (item.unit === u.value) {
item.mUnit = u.label
}
})
item.isEdit = false
return item
});
this.listQuery.total = response.data.total;
});
},
// 构造一行
addRow() {
const row = {
bomId: this.dataForm.id,
materialId: '',
num: 0,
materialCode: undefined,
unit: undefined,
remark: '',
isEdit: true
}
this.tableData.push(row)
},
init(id, isdetail) {
this.initData();
this.isdetail = isdetail || false;
this.dataForm.id = id || undefined;
this.visible = true;
if (id) {
this.idAttrShow = true
} else {
this.idAttrShow = false
}
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
if (this.dataForm.id) {
// 获取物料详情
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data;
});
// 获取Bom明细
this.getList();
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
// this.initData();
},
goEdit() {
this.isdetail = false;
},
// 新增 / 修改
addNew(id) {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});
}
}
};
</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;
}
</style>

View File

@@ -0,0 +1,187 @@
<template>
<div class="app-container">
<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="220"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick" />
</base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
<add-or-update
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList" />
</div>
</template>
<script>
import AddOrUpdate from './add-or-updata';
import basicPage from '../../core/mixins/basic-page';
// import { parseTime } from '../../core/mixins/code-filter';
import {
getMaterialPBPage,
deleteMaterialPB
} from '@/api/base/materialProductBom';
const tableProps = [
{
prop: 'productName',
label: '产品名称'
},
{
prop: 'code',
label: '产品BOM编码'
},
{
prop: 'remark',
label: '备注'
}
];
export default {
mixins: [basicPage],
components: {
AddOrUpdate,
},
data() {
return {
urlOptions: {
getDataListURL: getMaterialPBPage,
deleteURL: deleteMaterialPB
// exportURL: exportFactoryExcel,
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:material-product-bom:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:material-product-bom:queryMaterial`)
? {
type: 'search',
btnName: '查看物料',
}
: undefined,
this.$auth.hasPermi(`base:material-product-bom:editMaterial`)
? {
type: 'editMaterial',
btnName: '编辑物料',
}
: undefined,
this.$auth.hasPermi(`base:material-product-bom: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('base:material:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
},
],
};
},
created() {},
methods: {
otherMethods(val) {
if (val.type === 'search') {
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;
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 ? val.name : undefined;
this.listQuery.code = val.code ? val.code : undefined;
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);
}
},
},
};
</script>

View File

@@ -0,0 +1,258 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-10-26 09:43:51
* @Description:
-->
<template>
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmit()"
label-width="80px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="物料名称" prop="materialId">
<el-select
v-model="dataForm.materialId"
placeholder="请选择物料"
clearable
filterable
@change="setCode"
>
<el-option
v-for="dict in materialList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="dataForm.materialCode"
clearable
disabled
placeholder="请输入物料编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="批次号" prop="materialDateId">
<el-select
v-model="dataForm.materialDateId"
clearable
filterable
placeholder="请选择物料批次"
>
<el-option
v-for="dict in materialDateList"
:key="dict.id"
:label="dict.code"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用设备" prop="equipmentId">
<el-select
v-model="dataForm.equipmentId"
clearable
filterable
placeholder="请选择使用设备">
<el-option
v-for="dict in eqList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="使用时间" prop="useTime">
<el-date-picker
v-model="dataForm.useTime"
type="datetime"
format='yyyy-MM-dd HH:mm:ss'
value-format='timestamp'
placeholder="选择日期时间" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="操作员" prop="userNames">
<el-select
v-model="dataForm.userNames"
clearable
filterable
multiple
placeholder="请选择操作员">
<el-option
v-for="dict in workersList"
:key="dict.id"
:label="dict.name"
:value="dict.name" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="使用数量" prop="num">
<el-input-number v-model="dataForm.num" clearable placeholder="请输入使用数量" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="数据来源" prop="source">
<el-select
v-model="dataForm.source"
clearable
placeholder="请选择数据来源">
<el-option
v-for="dict in this.dataSourceList"
:key="dict.id"
:label="dict.name"
:value="dict.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-form>
</template>
<script>
import basicAdd from '../../core/mixins/basic-add';
import { createMaterialLog, updateMaterialLog, getMaterialLog, getEqListAll, getworkerAll } from "@/api/base/materialUseLog";
import { getMaterialList } from "@/api/base/material"
import { getMaterDateList } from "@/api/base/materialDate"
export default {
mixins: [basicAdd],
data() {
return {
urlOptions: {
createURL: createMaterialLog,
updateURL: updateMaterialLog,
infoURL: getMaterialLog
},
dataForm: {
id: undefined,
materialId: undefined,
materialCode: undefined,
materialDateId: undefined,
equipmentId: undefined,
userName: undefined,
userNames: [],
useTime: undefined,
address: undefined,
num: 0,
source: undefined,
remark: undefined
},
dataSourceList: [
{
id: 1,
name: '手动'
},
{
id: 2,
name: '自动'
}
],
materialList: [],
materialDateList: [],
eqList: [],
workersList: [],
dataRule: {
materialId: [{ required: true, message: "物料不能为空", trigger: "blur" }],
materialDateId: [{ required: true, message: "批次号不能为空", trigger: "blur" }],
useTime: [{ required: true, message: "使用时间不能为空", trigger: "blur" }],
userNames: [{ required: true, message: "操作员不能为空", trigger: "blur" }],
num: [{ required: true, message: "使用数量不能为空", trigger: "blur" }]
}
};
},
mounted() {
this.getDictData()
},
methods: {
async getDictData() {
const materRes = await getMaterialList()
this.materialList = materRes.data
console.log('你好', this.materialList)
const dateRes = await getMaterDateList()
this.materialDateList = dateRes.data
const eqRes = await getEqListAll()
this.eqList = eqRes.data
const workerRes = await getworkerAll()
this.workersList = workerRes.data
},
// 表单提交
dataFormSubmit() {
this.dataForm.userName = this.dataForm.userNames.join(',')
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.visible = false;
this.$emit("refreshDataList");
});
});
},
init(id) {
this.dataForm.id = id || undefined;
this.visible = true;
this.$nextTick(() => {
this.$refs["dataForm"].resetFields();
if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => {
this.dataForm.id = response.data.id
this.dataForm.materialCode = response.data.materialCode
this.dataForm.materialId = response.data.materialId
this.dataForm.materialDateId = response.data.materialDateId
this.dataForm.equipmentId = response.data.equipmentId
this.dataForm.useTime = response.data.useTime
// this.dataForm.userName = response.data.userName
this.dataForm.num = response.data.num
this.dataForm.source = response.data.source
this.dataForm.remark = response.data.remark
this.dataForm.userNames = response.data.userName.split(',')
console.log('打印', this.dataForm)
});
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
setCode() {
const tempMaterial = this.materialList.filter(item =>{
return item.id === this.dataForm.materialId
})
this.dataForm.materialCode = tempMaterial[0].code
}
},
};
</script>

View File

@@ -0,0 +1,212 @@
<template>
<div class="app-container">
<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="120"
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>
</template>
<script>
import AddOrUpdate from './add-or-updata';
import basicPage from '../../core/mixins/basic-page';
import { parseTime } from '../../core/mixins/code-filter';
import {
getMaterialLogPage,
deleteMaterialLog
} from '@/api/base/materialUseLog';
const tableProps = [
{
prop: 'materialName',
label: '物料名称'
},
{
prop: 'materialCode',
label: '物料编码'
},
{
prop: 'materialDateId',
label: '物料批次'
},
{
prop: 'equipName',
label: '使用设备'
},
{
prop: 'num',
label: '使用数量'
},
{
prop: 'useTime',
label: '使用时间',
filter: parseTime
},
{
prop: 'userName',
label: '操作人'
},
{
prop: 'source',
label: '数据来源',
filter: (val) => ['未知', '手动', '自动'][val]
},
{
prop: 'remark',
label: '备注'
}
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getMaterialLogPage,
deleteURL: deleteMaterialLog,
// exportURL: exportFactoryExcel,
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:material-use-log:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:material-use-log:delete`)
? {
type: 'delete',
btnName: '删除',
}
: undefined,
].filter((v)=>v),
tableData: [],
listQuery: {
pageSize: 10,
pageNo: 1,
total: 1,
materialName: undefined,
useTime: []
},
formConfig: [
{
type: 'input',
label: '物料名称',
placeholder: '物料名称',
param: 'name',
},
{
type: 'datePicker',
label: '使用时间段',
dateType: 'datetimerange',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
width: 350,
param: 'time',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary'
},
{
type: 'separate',
},
{
type: this.$auth.hasPermi('base:material-use-log:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
},
],
};
},
components: {
AddOrUpdate,
},
created() {},
methods: {
// 获取数据列表
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
this.tableData = response.data.records;
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.materialName = val.name ? val.name : undefined;
if (val.time) {
this.listQuery.useTime[0] = val.time[0]
this.listQuery.useTime[1] = val.time[1]
} else {
this.listQuery.useTime = []
}
console.log('222', this.listQuery, val.time)
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);
}
},
},
};
</script>

View File

@@ -96,7 +96,7 @@ const tableProps = [
}
]
import { getEnergyTypeListAll } from '@/api/base/energyType'
import { orderList, workOrderList } from '@/api/base/orderManage'
import { workOrderList } from '@/api/base/orderManage'
import { getWorkOrderMsg, getOrderEnergyData } from '@/api/monitoring/orderEnergy'
import BarChart from "./components/barChart"
export default {
@@ -104,25 +104,21 @@ export default {
data() {
return {
formConfig: [
{
type: 'select',
label: '订单',
selectOptions: [],
param: 'energyTypeId'
},
{
type: 'select',
label: '工单',
selectOptions: [],
param: 'energyTypeId1'
param: 'workOrderId',
clearable: false
},
{
type: 'select',
label: '能源类型',
selectOptions: [],
param: 'energyTypeId2',
param: 'objType',
filterable: true,
width: 120
width: 120,
clearable: false
},
{
type: 'select',
@@ -130,8 +126,9 @@ export default {
selectOptions: this.getDictDatas(this.DICT_TYPE.OBJECT_TYPE),
labelField: 'label',
valueField: 'value',
param: 'energyTypeId3',
width: 100
param: 'energyTypeId',
width: 100,
clearable: false
},
{
type: 'button',
@@ -145,8 +142,9 @@ export default {
tableH: this.tableHeight(400),
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10000
workOrderId: '',
objType: '',
energyTypeId: ''
},
orderMsg: {},
chartData: [],
@@ -162,34 +160,38 @@ export default {
},
methods: {
getListArr() {
getEnergyTypeListAll().then(res => {
this.formConfig[2].selectOptions = res.data || []
})
orderList().then(res => {
console.log(res)
})
workOrderList().then(res => {
console.log(res)
this.formConfig[0].selectOptions = res.data || []
})
getEnergyTypeListAll().then(res => {
this.formConfig[1].selectOptions = res.data || []
})
},
buttonClick() {
getWorkOrderMsg({
"workOrderId": 1,
"objType": "3",
"energyTypeId": '1681183397517406210'
}).then(res => {
console.log(res)
buttonClick(val) {
if (!val.workOrderId) {
this.$modal.msgWarning('工单不能为空')
return false
}
if (!val.objType) {
this.$modal.msgWarning('能源类型不能为空')
return false
}
if (!val.energyTypeId) {
this.$modal.msgWarning('对象维度不能为空')
return false
}
this.queryParams.workOrderId = val.workOrderId
this.queryParams.objType = val.objType
this.queryParams.energyTypeId = val.energyTypeId
getWorkOrderMsg({ ...this.queryParams }).then(res => {
this.orderMsg = res.data || {}
getOrderEnergyData({
"workOrderId": 1,
"objType": "3",
"energyTypeId": '1681183397517406210',
"startProduceTime": "1694239523000",
"finishProduceTime": "1694498723000"
}).then(res => {
console.log(res)
this.tableData = res.data || []
this.chartData = res.data || []
...this.queryParams,
startProduceTime: res.data.startProduceTime || '',
finishProduceTime: res.data.finishProduceTime || ''
}).then(result => {
this.tableData = result.data || []
this.chartData = result.data || []
})
})
},

View File

@@ -1,46 +0,0 @@
<template>
<div>
<el-drawer title="查看详情" :visible.sync="visible" size="70%">
<div class="box">
<base-table
:table-props="tableProps"
:table-data="tableData"
:max-height="tableH"
/>
</div>
</el-drawer>
</div>
</template>
<script>
import { getByScheduling } from '@/api/monitoring/groupTeamView'
export default {
name: 'schedulingMonitoringDetail',
data() {
return {
visible: false,
tableProps: [],
tableData: [],
tableH: this.tableHeight(200)
}
},
created() {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(200)
})
},
methods: {
init(id) {
this.visible = true
console.log(id)
getByScheduling({id}).then(res => {
console.log(res)
})
}
}
}
</script>
<style lang="scss" scoped>
.box {
padding: 0 32px;
}
</style>

View File

@@ -64,14 +64,12 @@ export default {
},
methods: {
init(params) {
console.log(params)
this.visible = true
this.queryParams = params
getByTeam({
teamId: this.queryParams.teamId,
workOrderId: this.queryParams.workOrderId
}).then(res => {
console.log(res)
this.tableData = res.data || []
})
}

View File

@@ -61,10 +61,11 @@ export default {
return {
formConfig: [
{
type: 'input',
label: '工单名称',
placeholder: '工单名称',
param: 'cnName'
type: 'select',
label: '工单',
selectOptions: [],
param: 'workOrderId',
clearable: false
},
{
type: 'button',
@@ -79,7 +80,8 @@ export default {
pageSize: 1000,
workOrderId: ''
},
workOrderName: '工单名称ddd',
workOrderList: [],
workOrderName: '',
tableBtn,
tableProps,
tableH: this.tableHeight(220),
@@ -92,33 +94,42 @@ export default {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(220)
})
this.getOrderList()
},
methods: {
// 获取工单list
getOrderList() {
workOrderList().then(res => {
console.log(res)
this.formConfig[0].selectOptions = res.data || []
this.workOrderList = res.data || []
})
},
// 查询
buttonClick(val) {
// this.queryParams.workOrderId = val.id
this.queryParams.workOrderId = 1
if (!val.workOrderId) {
this.$modal.msgWarning('工单不能为空')
return false
}
this.queryParams.workOrderId = val.workOrderId
this.getList()
},
// 获取table数据
getList() {
getByWorkOrder({ id: this.queryParams.workOrderId }).then(res => {
console.log(res)
this.list = res.data
this.list = res.data || []
})
},
handleClick(val) {
console.log(val)
this.paramVisible = true
let params = {}
params.teamId = val.data.id
params.teamName = val.data.name
this.workOrderList.map(item => {
if (this.queryParams.workOrderId === item.id) {
this.workOrderName = item.name
}
})
params.workOrderId = this.queryParams.workOrderId
params.workOrderName = this.workOrderName
this.$nextTick(() => {

View File

@@ -0,0 +1,162 @@
<template>
<div>
<el-drawer title="查看详情" :visible.sync="visible" size="70%" :wrapperClosable='false' @closed="closeDrawer">
<div class="box">
<base-table
:table-props="tableProps"
:table-data="tableData"
:max-height="tableH"
/>
</div>
</el-drawer>
</div>
</template>
<script>
import { getByScheduling } from '@/api/monitoring/groupTeamView'
import { getSchedulingMonitoringRecord } from '@/api/monitoring/teamProduction'
export default {
name: 'TeamProductionDetail',
data() {
return {
visible: false,
tableProps: [
{
prop: 'lineName',
label: '产线',
minWidth: 120
},
{
prop: 'startTime',
label: '上班时间',
minWidth: 150
},
{
prop: 'endTime',
label: '下班时间',
minWidth: 150
},
{
prop: 'workOrderList',
label: '生产工单'
}
],
tableData: [],
tableH: this.tableHeight(200)
}
},
created() {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(200)
})
},
methods: {
init(params) {
this.visible = true
// console.log(params)
getByScheduling({id:params.id}).then(res => {
let dataList1 = []
let dataList2 = []
if (res.data.nameData && res.data.nameData.length > 0) {
dataList1 = res.data
// 下一个接口的参数&&表头
let timeArr = []
res.data.nameData.map(item => {
let tablePropsObj = {
prop: '',
label: '',
children: [
{
prop: '',
label: '上片数据'
},
{
prop: '',
label: '下片数据'
},
{
prop: '',
label: '良品面积'
},
{
prop: '',
label: '报废数据'
},
{
prop: '',
label: '报废比例'
}
]
}
timeArr.push(this.parseTime(item.name))
tablePropsObj.prop = item.name
tablePropsObj.label = this.parseTime(item.name)
tablePropsObj.children[0].prop = item.name+'sumInput'
tablePropsObj.children[1].prop = item.name+'sumOutput'
tablePropsObj.children[2].prop = item.name+'goodArea'
tablePropsObj.children[3].prop = item.name+'dynamicValue'
tablePropsObj.children[4].prop = item.name+'dynamicRatio'
this.tableProps.push(tablePropsObj)
})
getSchedulingMonitoringRecord({
checkTime: timeArr
}).then(result => {
dataList2 = result.data
// console.log(dataList1)
// console.log(dataList2)
for (let i = 0; i < dataList1.data.length; i++) {
let obj = {}
obj.lineName = dataList1.data[i].lineName
obj.startTime = this.parseTime(params.startTime)
obj.endTime = this.parseTime(params.endTime)
obj.workOrderList = dataList1.data[i].workOrderList
let subData1 = dataList1.data[i].data
for (let ii = 0; ii < subData1.length; ii++) {
obj[subData1[ii].dynamicName+'sumInput'] = subData1[ii].dynamicValue.sumInput
obj[subData1[ii].dynamicName+'sumOutput'] = subData1[ii].dynamicValue.sumOutput
obj[subData1[ii].dynamicName+'goodArea'] = subData1[ii].dynamicValue.goodArea
}
for (let j = 0; j < dataList2.data.length; j++) {
let subData2 = dataList2.data[j].data
for (let jj = 0; jj < subData2.length; jj++) {
obj[subData2[jj].dynamicName+'dynamicValue'] = subData2[jj].dynamicValue
obj[subData2[jj].dynamicName+'dynamicRatio'] = obj[subData2[jj].dynamicName+'dynamicValue'] / obj[subData2[jj].dynamicName+'sumOutput']
}
}
this.tableData.push(obj)
}
})
}
})
},
closeDrawer() {
this.tableData = []
this.tableProps = [
{
prop: 'lineName',
label: '产线',
minWidth: 120
},
{
prop: 'startTime',
label: '上班时间',
minWidth: 150
},
{
prop: 'endTime',
label: '下班时间',
minWidth: 150
},
{
prop: 'workOrderList',
label: '生产工单'
}
]
}
}
}
</script>
<style lang="scss" scoped>
.box {
padding: 0 32px;
}
</style>

View File

@@ -30,13 +30,13 @@
@pagination="getList"
/>
<!-- 查看生产情况 -->
<scheduling-monitoring-detail v-if='paramVisible' ref='schedulingMonitoringDetail'/>
<team-production-detail v-if='paramVisible' ref='schedulingMonitoringDetail'/>
</div>
</template>
<script>
import { groupTeamSchedulingPage } from '@/api/base/groupTeamScheduling'
import { groupTeamSchedulingPage } from '@/api/monitoring/teamProduction'
import { parseTime } from '@/utils/ruoyi'
import SchedulingMonitoringDetail from './components/schedulingMonitoringDetail'
import TeamProductionDetail from './components/teamProductionDetail'
const tableProps = [
{
prop: 'createTime',
@@ -122,7 +122,7 @@ export default {
paramVisible: false
}
},
components: { SchedulingMonitoringDetail },
components: { TeamProductionDetail },
mounted() {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(220)
@@ -141,12 +141,15 @@ export default {
this.list = res.data.list || []
this.total = res.data.total || 0
})
},
getGroupClass() {
},
handleClick(val) {
console.log(val)
this.paramVisible = true
this.$nextTick(() => {
this.$refs.schedulingMonitoringDetail.init(val.data.id)
this.$refs.schedulingMonitoringDetail.init(val.data)
})
}
}

View File

@@ -0,0 +1,289 @@
<template>
<el-form ref="addWorkOrder" :rules="rules" label-width="130px" :model="form">
<el-row>
<el-col :span='12'>
<el-form-item label="工单名称" prop="name" v-if='!isBind'>
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="产品名称" prop="orderId" v-if='isBind'>
<el-select v-model="form.orderId" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in workOrderList"
: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="code">
<el-input v-model="form.code" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="产品名称" prop="planProductId">
<el-select v-model="form.planProductId" placeholder="请选择" style="width: 100%;" @change="selectProduct">
<el-option
v-for="item in productList"
: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="productSpec">
<el-input v-model="form.productSpec" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="计划开始时间">
<el-date-picker
v-model="planStartTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%;"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="计划完成时间">
<el-date-picker
v-model="planFinishTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%;"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="计划投入数量" prop="planAssignQuantity">
<el-input-number v-model="form.planAssignQuantity" :min="0" :max="9999999999999" style="width: 100%;"></el-input-number>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="计划生产数量" prop="planQuantity">
<el-input-number v-model="form.planQuantity" :min="0" :max="9999999999999" style="width: 100%;"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="关联工艺" prop="processFlowId">
<el-select v-model="form.processFlowId" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in processFlowList"
: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="materialMethod">
<el-radio-group v-model="form.materialMethod">
<el-radio :label="1">产品基础</el-radio>
<el-radio :label="2">工艺扩展</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="优先级" prop="priority">
<el-select v-model="form.priority" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in getDictDatas(DICT_TYPE.ORDER_PRIORITY)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="工单类型" prop="type">
<el-select v-model="form.type" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in workOrderTypeList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="关联产线" prop="productLineId">
<el-select v-model="form.productLineId" placeholder="请选择" multiple style="width: 100%;">
<el-option
v-for="item in productLineList"
: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="workers">
<el-input v-model="form.workers"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="计划分配订单量" prop="planAssignmentQuantity">
<el-input-number v-model="form.planAssignmentQuantity" :min="0" :max="9999999999999" style="width: 100%;"></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
import { getProductAll } from '@/api/base/product'
import { getProcessFlowList, getWorkOrderCode, orderIssue, workOrderList } from '@/api/base/orderManage'
import { getLineAll } from '@/api/base/productionLine'
export default {
name: 'AddWorkOrder',
data() {
return {
form: {
workOrderId: '',
orderId: '',
name: '',
code: '',
planProductId: '',
productSpec: '',
planStartTime: '',
planFinishTime: '',
planAssignQuantity: 0,
planQuantity: 0,
processFlowId: '',
materialMethod: 1,
priority: '',
productLineId: [],
type: '',
workers: '',
planAssignmentQuantity: ''
},
rules: {
name: [{ required: true, message: "工单名称不能为空", trigger: "blur" }],
planProductId: [{ required: true, message: "产品名称不能为空", trigger: "change" }],
planAssignQuantity: [{ required: true, message: "计划投入数量不能为空", trigger: "blur" }],
planQuantity: [{ required: true, message: "计划生产数量不能为空", trigger: "blur" }],
productLineId: [{ required: true, message: "产品不能为空", trigger: "change" }]
},
productList: [],
processFlowList: [],
productLineList: [],
workOrderTypeList: [
{id: 1,name:'标准工单'},
{id: 2, name:'特殊工单'}
],
planStartTime: '',
planFinishTime: '',
isBind: false,
workOrderList: []
}
},
methods: {
init(id, param) {
console.log(id)
this.form.orderId = id
this.getList()
if (param === 'add') {
this.isBind = false
getWorkOrderCode().then(res => {
this.form.code = res.data || ''
})
}else{//绑定
this.isBind = true
}
},
getList() {
// 产品
getProductAll().then(res => {
this.productList = res.data || []
})
// 产线
getLineAll().then(res => {
this.productLineList = res.data || []
})
// 工艺
getProcessFlowList().then(res => {
this.processFlowList = res.data || []
})
// 工单list
workOrderList({
status: 1
}).then(res => {
this.workOrderList = res.data || []
})
},
// 选产品带出规格
selectProduct(val) {
if (val) {
this.productList.map(item => {
if (val === item.id) {
this.form.productSpec = item.specifications
}
})
} else {
this.form.productSpec = ''
}
},
addWorkOrderSubmit() {
this.$refs['addWorkOrder'].validate((valid) => {
if (valid) {
this.form.planStartTime = this.planStartTime ? new Date(this.planStartTime).valueOf() : ''
this.form.planFinishTime = this.planFinishTime ? new Date(this.planFinishTime).valueOf() : ''
console.log(this.form)
orderIssue({ ...this.form }).then(res => {
if (res.code === 0) {
this.$modal.msgSuccess("操作成功")
this.$emit('addWorkOrderSubmit')
}
})
// if (this.isEdit) {
// //编辑
// orderUpdate({ ...this.form }).then((res) => {
// if (res.code === 0) {
// this.$modal.msgSuccess("操作成功");
// this.$emit('successSubmit')
// }
// })
// } else {
// this.form.status = 1
// this.form.triggerOrigin = 1
// orderCreate({ ...this.form }).then((res) => {
// if (res.code === 0) {
// this.$modal.msgSuccess("操作成功");
// this.$emit('successSubmit')
// }
// })
// }
} else {
return false
}
})
},
formClear() {
this.$refs.addWorkOrder.resetFields()
}
}
}
</script>

View File

@@ -0,0 +1,11 @@
<template>
<div>111</div>
</template>
<script>
export default {
name: 'BindWorkOrder',
data() {
return {}
}
}
</script>

View File

@@ -20,7 +20,7 @@
</el-col>
<el-col :span='12'>
<el-form-item label="产品名称" prop="planProductId">
<el-select v-model="form.planProductId" placeholder="请选择" style="width: 100%;">
<el-select v-model="form.planProductId" placeholder="请选择" style="width: 100%;" @change="selectProduct">
<el-option
v-for="item in productList"
:key="item.id"
@@ -49,9 +49,9 @@
<el-select v-model="form.customerId" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in customerList"
:key="item.value"
:label="item.label"
:value="item.value">
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
@@ -72,7 +72,14 @@
<el-row>
<el-col :span='12'>
<el-form-item label="包装规格" prop="packSpec">
<el-input v-model="form.packSpec" disabled></el-input>
<el-select v-model="form.packSpec" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in getDictDatas(DICT_TYPE.PACK_SPEC)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='12'>
@@ -86,7 +93,7 @@
<el-form-item label="关联工艺" prop="processFlowId">
<el-select v-model="form.processFlowId" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in customerList"
v-for="item in processFlowList"
:key="item.id"
:label="item.name"
:value="item.id">
@@ -105,20 +112,24 @@
</el-row>
<el-row>
<el-col :span='12'>
<el-form-item label="订单计划开始时间" prop="planStartTime">
<el-form-item label="订单计划开始时间">
<el-date-picker
v-model="form.planStartTime"
v-model="planStartTime"
type="date"
format='yyyy-MM-dd'
value-format="yyyy-MM-dd"
style="width: 100%;"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="订单计划完成时间" prop="planFinishTime">
<el-form-item label="订单计划完成时间">
<el-date-picker
v-model="form.planFinishTime"
v-model="planFinishTime"
type="date"
format='yyyy-MM-dd'
value-format="yyyy-MM-dd"
style="width: 100%;"
placeholder="选择日期">
</el-date-picker>
@@ -142,9 +153,10 @@
</el-form>
</template>
<script>
import { getOrderCode, getOrderById } from '@/api/base/orderManage'
import { getOrderCode, getOrderById, getProcessFlowList, orderUpdate, orderCreate } from '@/api/base/orderManage'
import { getProductAll } from '@/api/base/product'
import { getCustomerList } from '@/api/base/customer'
import moment from 'moment'
export default {
name: 'OrderAdd',
data() {
@@ -162,12 +174,14 @@ export default {
packSpec: '',
workers: '',
processFlowId: '',
materialMethod: '1',
planStartTime: '',
planFinishTime: '',
materialMethod: 1,
remark: '',
description: ''
description: '',
planStartTime: '',
planFinishTime: ''
},
planStartTime: '',
planFinishTime: '',
rules: {
name: [{ required: true, message: "订单名称不能为空", trigger: "blur" }],
planQuantity: [{ required: true, message: "计划加工数量不能为空", trigger: "blur" }],
@@ -175,6 +189,7 @@ export default {
},
productList: [],
customerList: [],
processFlowList: [],
isEdit: false //是否是编辑
}
},
@@ -184,10 +199,24 @@ export default {
if (id) {
this.isEdit = true
this.form.id = id
getOrderById(id).then(res => {
getOrderById({id: this.form.id}).then(res => {
if (res.code === 0) {
this.form = res.data
// this.selectLeader()
this.form.name = res.data.name
this.form.code = res.data.code
this.form.planQuantity = res.data.planQuantity
this.form.planProductId = res.data.planProductId
this.selectProduct(this.form.planProductId)
this.form.price = res.data.price
this.form.customerId = res.data.customerId
this.form.priority = res.data.priority ? res.data.priority + '' : ''
this.planStartTime = res.data.planStartTime ? moment(res.data.planStartTime).format('YYYY-MM-DD') : null
this.form.packSpec = res.data.packSpec ? res.data.packSpec+'' : ''
this.form.workers = res.data.workers
this.form.processFlowId = res.data.processFlowId
this.form.materialMethod = res.data.materialMethod
this.planFinishTime = res.data.planFinishTime ? moment(res.data.planFinishTime).format('YYYY-MM-DD') : null
this.form.remark = res.data.remark
this.form.description = res.data.description
}
})
} else {
@@ -209,20 +238,40 @@ export default {
this.customerList = res.data || []
})
// 工艺
getProcessFlowList().then(res => {
this.processFlowList = res.data || []
})
},
// 选产品带出规格
selectProduct(val) {
if (val) {
this.productList.map(item => {
if (val === item.id) {
this.form.productSpec = item.specifications
}
})
} else {
this.form.productSpec = ''
}
},
submitForm() {
this.$refs['orderAddForm'].validate((valid) => {
if (valid) {
this.form.planStartTime = this.planStartTime ? new Date(this.planStartTime).valueOf() : ''
this.form.planFinishTime = this.planFinishTime ? new Date(this.planFinishTime).valueOf() : ''
console.log(this.form)
if (this.isEdit) {
//编辑
updateGroupTeam({ ...this.form }).then((res) => {
orderUpdate({ ...this.form }).then((res) => {
if (res.code === 0) {
this.$modal.msgSuccess("操作成功");
this.$emit('successSubmit')
}
})
} else {
createGroupTeam({ ...this.form }).then((res) => {
this.form.status = 1
this.form.triggerOrigin = 1
orderCreate({ ...this.form }).then((res) => {
if (res.code === 0) {
this.$modal.msgSuccess("操作成功");
this.$emit('successSubmit')
@@ -236,6 +285,13 @@ export default {
},
formClear() {
this.$refs.orderAddForm.resetFields()
this.form.materialMethod = 1
this.form.price = 0.00
this.form.planQuantity = 0
this.planFinishTime = ''
this.planStartTime = ''
this.form.planFinishTime = ''
this.form.planStartTime = ''
this.isEdit = false
}
}

View File

@@ -17,7 +17,7 @@
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="80"
:width="250"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick"
@@ -41,12 +41,37 @@
<order-add ref="orderAdd" @successSubmit="successSubmit" />
</base-dialog>
<!-- 查看详情 -->
<!-- 新增工单 -->
<base-dialog
:dialogTitle="workIssueTitle"
:dialogVisible="addWorkOrdervisible"
@cancel="addWorkOrderCancel"
@confirm="addWorkOrderConfirm"
:before-close="addWorkOrderCancel"
width='70%'
>
<add-work-order ref="addWorkOrder" @successSubmit="addWorkOrderSubmit" />
</base-dialog>
<!-- 绑定工单 -->
<!-- <base-dialog
dialogTitle="绑定工单"
:dialogVisible="bindWorkOrdervisible"
@cancel="bindWorkOrderCancel"
@confirm="bindWorkOrderConfirm"
:before-close="bindWorkOrderCancel"
width='70%'
>
<bind-work-order ref="bindWorkOrder" @successSubmit="bindWorkOrderSubmit" />
</base-dialog> -->
</div>
</template>
<script>
import { parseTime } from '@/utils/ruoyi'
import { getOrderPage } from '@/api/base/orderManage'
import OrderAdd from './components/orderAdd.vue'
import { getOrderPage, orderDelete } from '@/api/base/orderManage'
import OrderAdd from './components/orderAdd'
import AddWorkOrder from './components/addWorkOrder'
import BindWorkOrder from './components/bindWorkOrder'
import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'createTime',
@@ -61,46 +86,49 @@ const tableProps = [
{
prop: 'code',
label: '订单编码',
minWidth: 220
minWidth: 180
},
{
prop: 'num',
label: '客户'
prop: 'customerId',
label: '客户(?)'
},
{
prop: 'leaderName',
label: '来源'
prop: 'triggerOrigin',
label: '来源',
filter: publicFormatter('order_Origin')
},
{
prop: 'leaderName1',
label: '优先级'
prop: 'priority',
label: '优先级',
filter: publicFormatter('order_priority')
},
{
prop: 'leaderNam1e',
label: '订单状态'
prop: 'status',
label: '订单状态',
filter: publicFormatter('order_status')
},
{
prop: 'leaderName3',
prop: 'planQuantity',
label: '计划加工量'
},
{
prop: 'leaderName9',
prop: 'actualQuantity',
label: '实际加工量'
},
{
prop: 'leaderN4ame',
label: '产品'
prop: 'planProductId',
label: '产品(?)'
},
{
prop: 'leade2rName',
label: '单位'
prop: 'unit',
label: '单位(?)'
},
{
prop: 'leaderN11ame',
prop: 'price',
label: '单价(元)'
},
{
prop: 'leaderName22',
prop: 'workOrderNum',
label: '工单数量'
}
]
@@ -166,6 +194,24 @@ export default {
list: [],
tableH: this.tableHeight(260),
tableBtn: [
this.$auth.hasPermi('base:group-team:update')
? {
type: 'add',
btnName: '新增工单'
}
: undefined,
this.$auth.hasPermi('base:group-team:update')
? {
type: 'bind',
btnName: '绑定工单'
}
: undefined,
this.$auth.hasPermi('base:group-team:update')
? {
type: 'detail',
btnName: '详情'
}
: undefined,
this.$auth.hasPermi('base:group-team:update')
? {
type: 'edit',
@@ -180,20 +226,29 @@ export default {
: undefined
].filter((v) => v),
addOrEditTitle: '',
centervisible: false
centervisible: false,
priorityList: this.getDictDatas(this.DICT_TYPE.ORDER_PRIORITY),
workIssueTitle: '',
addWorkOrdervisible: false
// bindWorkOrdervisible: false
}
},
components: { OrderAdd },
components: { OrderAdd, AddWorkOrder, BindWorkOrder },
created() {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260)
})
this.getSelectList()
this.getList();
},
methods: {
getSelectList() {
console.log(this.getDictDatas(this.DICT_TYPE.ORDER_PRIORITY))
},
getList() {
getOrderPage({...this.queryParams}).then(res => {
console.log(res)
this.list = res.data.records || []
this.total = res.data.total || 0
})
},
buttonClick(val) {
@@ -211,21 +266,52 @@ export default {
} else {
this.addOrEditTitle = '新增'
this.centervisible = true
this.$nextTick(() => {
this.$refs.orderAdd.init()
})
}
},
handleClick(val) {
console.log(val)
switch (val.type) {
case 'edit':
this.addOrEditTitle = '编辑'
this.$nextTick(() => {
this.$refs.groupList.init(val.data.id)
})
this.centervisible = true
this.$nextTick(() => {
this.$refs.orderAdd.init(val.data.id)
})
break
case 'delete':
this.handleDelete(val.data)
break
case 'detail':
break
case 'add':
this.workIssueTitle = '新增工单'
this.addWorkOrdervisible = true
this.$nextTick(() => {
this.$refs.addWorkOrder.init(val.data.id, 'add')
})
break
case 'bind':
this.workIssueTitle = '绑定工单'
this.addWorkOrdervisible = true
this.$nextTick(() => {
this.$refs.addWorkOrder.init(val.data.id, 'bind')
})
break
default:
this.handleDelete(val.data)
}
},
// 删除
handleDelete(val) {
this.$modal.confirm('是否确认删除"' + val.name + '"的数据项?').then(function() {
return orderDelete({ id: val.id })
}).then(() => {
this.getList();
this.$modal.msgSuccess("操作成功");
}).catch(() => {});
},
// 新增
handleCancel() {
this.$refs.orderAdd.formClear()
@@ -239,6 +325,29 @@ export default {
this.handleCancel()
this.getList()
},
// 下发新增
addWorkOrderCancel() {
this.$refs.addWorkOrder.formClear()
this.addWorkOrdervisible = false
},
addWorkOrderConfirm() {
this.$refs.addWorkOrder.addWorkOrderSubmit()
},
addWorkOrderSubmit() {
this.addWorkOrderCancel()
this.getList()
}
// bindWorkOrderCancel() {
// this.$refs.bindWorkOrder.formClear()
// this.bindWorkOrdervisible = false
// },
// bindWorkOrderConfirm() {
// this.$refs.bindWorkOrder.bindWorkOrderSubmit()
// },
// bindWorkOrderSubmit() {
// this.bindWorkOrderCancel()
// this.getList()
// }
}
}
</script>

414
yarn.lock
View File

@@ -2001,15 +2001,20 @@
"resolved" "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz"
"version" "7.2.0"
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.1", "acorn@^7.4.0":
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^6.4.1":
"integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
"resolved" "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz"
"version" "6.4.2"
"acorn@^7.1.1":
"integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
"resolved" "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz"
"version" "7.4.1"
"acorn@^6.4.1":
"integrity" "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ=="
"resolved" "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz"
"version" "6.4.2"
"acorn@^7.4.0":
"integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
"resolved" "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz"
"version" "7.4.1"
"acorn@^8.8.2":
"integrity" "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw=="
@@ -2031,7 +2036,7 @@
"resolved" "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz"
"version" "1.3.1"
"aes-decrypter@^4.0.1", "aes-decrypter@4.0.1":
"aes-decrypter@^4.0.1":
"integrity" "sha512-H1nh/P9VZXUf17AA5NQfJML88CFjVBDuGkp5zDHa7oEhYN9TTpNLJknRY1ie0iSKWlDf6JRnJKaZVDSQdPy6Cg=="
"resolved" "https://registry.npmmirror.com/aes-decrypter/-/aes-decrypter-4.0.1.tgz"
"version" "4.0.1"
@@ -2058,6 +2063,16 @@
"global" "^4.4.0"
"pkcs7" "^1.0.4"
"aes-decrypter@4.0.1":
"integrity" "sha512-H1nh/P9VZXUf17AA5NQfJML88CFjVBDuGkp5zDHa7oEhYN9TTpNLJknRY1ie0iSKWlDf6JRnJKaZVDSQdPy6Cg=="
"resolved" "https://registry.npmmirror.com/aes-decrypter/-/aes-decrypter-4.0.1.tgz"
"version" "4.0.1"
dependencies:
"@babel/runtime" "^7.12.5"
"@videojs/vhs-utils" "^3.0.5"
"global" "^4.4.0"
"pkcs7" "^1.0.4"
"aggregate-error@^3.0.0":
"integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="
"resolved" "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz"
@@ -2096,6 +2111,11 @@
"resolved" "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz"
"version" "3.2.4"
"ansi-colors@^4.1.1":
"integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="
"resolved" "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz"
"version" "4.1.3"
"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0":
"integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="
"resolved" "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
@@ -2133,28 +2153,21 @@
"resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz"
"version" "2.2.1"
"ansi-styles@^3.1.0":
"ansi-styles@^3.1.0", "ansi-styles@^3.2.0", "ansi-styles@^3.2.1":
"integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
"resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
"version" "3.2.1"
dependencies:
"color-convert" "^1.9.0"
"ansi-styles@^3.2.0":
"integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
"resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
"version" "3.2.1"
"ansi-styles@^4.0.0":
"integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
"resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
"version" "4.3.0"
dependencies:
"color-convert" "^1.9.0"
"color-convert" "^2.0.1"
"ansi-styles@^3.2.1":
"integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
"resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz"
"version" "3.2.1"
dependencies:
"color-convert" "^1.9.0"
"ansi-styles@^4.0.0", "ansi-styles@^4.1.0":
"ansi-styles@^4.1.0":
"integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
"resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
"version" "4.3.0"
@@ -2843,28 +2856,7 @@
"resolved" "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz"
"version" "3.1.2"
"cacache@^12.0.2":
"integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ=="
"resolved" "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz"
"version" "12.0.4"
dependencies:
"bluebird" "^3.5.5"
"chownr" "^1.1.1"
"figgy-pudding" "^3.5.1"
"glob" "^7.1.4"
"graceful-fs" "^4.1.15"
"infer-owner" "^1.0.3"
"lru-cache" "^5.1.1"
"mississippi" "^3.0.0"
"mkdirp" "^0.5.1"
"move-concurrently" "^1.0.1"
"promise-inflight" "^1.0.1"
"rimraf" "^2.6.3"
"ssri" "^6.0.1"
"unique-filename" "^1.1.1"
"y18n" "^4.0.0"
"cacache@^12.0.3":
"cacache@^12.0.2", "cacache@^12.0.3":
"integrity" "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ=="
"resolved" "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz"
"version" "12.0.4"
@@ -3357,14 +3349,7 @@
"map-visit" "^1.0.0"
"object-visit" "^1.0.0"
"color-convert@^1.9.0":
"integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
"resolved" "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz"
"version" "1.9.3"
dependencies:
"color-name" "1.1.3"
"color-convert@^1.9.3":
"color-convert@^1.9.0", "color-convert@^1.9.3":
"integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
"resolved" "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz"
"version" "1.9.3"
@@ -3378,16 +3363,16 @@
dependencies:
"color-name" "~1.1.4"
"color-name@^1.0.0", "color-name@~1.1.4":
"integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
"resolved" "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
"version" "1.1.4"
"color-name@1.1.3":
"color-name@^1.0.0", "color-name@1.1.3":
"integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
"resolved" "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz"
"version" "1.1.3"
"color-name@~1.1.4":
"integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
"resolved" "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
"version" "1.1.4"
"color-string@^1.6.0":
"integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="
"resolved" "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz"
@@ -3416,22 +3401,7 @@
dependencies:
"delayed-stream" "~1.0.0"
"commander@*", "commander@2.17.x":
"integrity" "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
"resolved" "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz"
"version" "2.17.1"
"commander@^2.18.0":
"integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
"resolved" "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
"version" "2.20.3"
"commander@^2.19.0":
"integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
"resolved" "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
"version" "2.20.3"
"commander@^2.20.0":
"commander@*", "commander@^2.18.0", "commander@^2.19.0", "commander@^2.20.0":
"integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
"resolved" "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
"version" "2.20.3"
@@ -3446,6 +3416,11 @@
"resolved" "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz"
"version" "2.19.0"
"commander@2.17.x":
"integrity" "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
"resolved" "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz"
"version" "2.17.1"
"commondir@^1.0.1":
"integrity" "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
"resolved" "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz"
@@ -4332,7 +4307,7 @@
"resolved" "https://registry.npmmirror.com/domready/-/domready-1.0.8.tgz"
"version" "1.0.8"
"domutils@^1.5.1":
"domutils@^1.5.1", "domutils@^1.7.0":
"integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="
"resolved" "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz"
"version" "1.7.0"
@@ -4340,15 +4315,16 @@
"dom-serializer" "0"
"domelementtype" "1"
"domutils@^1.7.0":
"integrity" "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="
"resolved" "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz"
"version" "1.7.0"
"domutils@^2.5.2":
"integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="
"resolved" "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz"
"version" "2.8.0"
dependencies:
"dom-serializer" "0"
"domelementtype" "1"
"dom-serializer" "^1.0.1"
"domelementtype" "^2.2.0"
"domhandler" "^4.2.0"
"domutils@^2.5.2", "domutils@^2.8.0":
"domutils@^2.8.0":
"integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="
"resolved" "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz"
"version" "2.8.0"
@@ -4532,6 +4508,14 @@
"memory-fs" "^0.5.0"
"tapable" "^1.0.0"
"enquirer@>= 2.3.0 < 3":
"integrity" "sha512-ehu97t6FTYK2I3ZYtnp0BZ9vt0mvEL/cnHBds7Ct6jo9VX1VIkiFhOvVRWh6eblQqd7KOoICIQV+syZ3neXO/Q=="
"resolved" "https://registry.npmmirror.com/enquirer/-/enquirer-2.4.0.tgz"
"version" "2.4.0"
dependencies:
"ansi-colors" "^4.1.1"
"strip-ansi" "^6.0.1"
"entities@^1.1.1":
"integrity" "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
"resolved" "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz"
@@ -4563,7 +4547,7 @@
dependencies:
"stackframe" "^1.3.4"
"es-abstract@^1.19.0", "es-abstract@^1.20.4", "es-abstract@^1.21.2":
"es-abstract@^1.17.2", "es-abstract@^1.19.0", "es-abstract@^1.20.4", "es-abstract@^1.21.2":
"integrity" "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw=="
"resolved" "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.1.tgz"
"version" "1.22.1"
@@ -5169,11 +5153,6 @@
"resolved" "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz"
"version" "2.0.5"
"file-uri-to-path@1.0.0":
"integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
"resolved" "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
"version" "1.0.0"
"filesize@^3.6.1":
"integrity" "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="
"resolved" "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz"
@@ -5516,14 +5495,7 @@
"is-glob" "^3.1.0"
"path-dirname" "^1.0.0"
"glob-parent@^5.0.0":
"integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
"resolved" "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
"version" "5.1.2"
dependencies:
"is-glob" "^4.0.1"
"glob-parent@~5.1.2":
"glob-parent@^5.0.0", "glob-parent@~5.1.2":
"integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
"resolved" "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
"version" "5.1.2"
@@ -5726,7 +5698,7 @@
"resolved" "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz"
"version" "1.0.1"
"has-symbols@^1.0.2", "has-symbols@^1.0.3":
"has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3":
"integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
"resolved" "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz"
"version" "1.0.3"
@@ -6365,7 +6337,16 @@
"is-data-descriptor" "^0.1.4"
"kind-of" "^5.0.0"
"is-descriptor@^1.0.0", "is-descriptor@^1.0.2":
"is-descriptor@^1.0.0":
"integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg=="
"resolved" "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz"
"version" "1.0.2"
dependencies:
"is-accessor-descriptor" "^1.0.0"
"is-data-descriptor" "^1.0.0"
"kind-of" "^6.0.2"
"is-descriptor@^1.0.2":
"integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg=="
"resolved" "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz"
"version" "1.0.2"
@@ -6389,11 +6370,6 @@
"resolved" "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz"
"version" "0.1.1"
"is-extendable@^0.1.1":
"integrity" "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="
"resolved" "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz"
"version" "0.1.1"
"is-extendable@^1.0.1":
"integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="
"resolved" "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz"
@@ -6595,7 +6571,7 @@
dependencies:
"is-docker" "^2.0.0"
"isarray@^1.0.0":
"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0":
"integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
"resolved" "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz"
"version" "1.0.0"
@@ -6605,16 +6581,6 @@
"resolved" "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz"
"version" "2.0.5"
"isarray@~1.0.0":
"integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
"resolved" "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz"
"version" "1.0.0"
"isarray@1.0.0":
"integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
"resolved" "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz"
"version" "1.0.0"
"isexe@^2.0.0":
"integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
"resolved" "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz"
@@ -6823,7 +6789,14 @@
"resolved" "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz"
"version" "1.0.1"
"kind-of@^3.0.2", "kind-of@^3.0.3":
"kind-of@^3.0.2":
"integrity" "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="
"resolved" "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz"
"version" "3.2.2"
dependencies:
"is-buffer" "^1.1.5"
"kind-of@^3.0.3":
"integrity" "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="
"resolved" "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz"
"version" "3.2.2"
@@ -7087,23 +7060,7 @@
"resolved" "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz"
"version" "1.1.4"
"lru-cache@^4.0.1":
"integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="
"resolved" "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz"
"version" "4.1.5"
dependencies:
"pseudomap" "^1.0.2"
"yallist" "^2.1.2"
"lru-cache@^4.1.2":
"integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="
"resolved" "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz"
"version" "4.1.5"
dependencies:
"pseudomap" "^1.0.2"
"yallist" "^2.1.2"
"lru-cache@^4.1.5":
"lru-cache@^4.0.1", "lru-cache@^4.1.2", "lru-cache@^4.1.5":
"integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="
"resolved" "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz"
"version" "4.1.5"
@@ -7422,7 +7379,18 @@
"component-query" "^0.0.3"
"domify" "^1.3.1"
"min-dom@^3.1.0", "min-dom@^3.1.3":
"min-dom@^3.1.0":
"integrity" "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA=="
"resolved" "https://registry.npmmirror.com/min-dom/-/min-dom-3.2.1.tgz"
"version" "3.2.1"
dependencies:
"component-event" "^0.1.4"
"domify" "^1.3.1"
"indexof" "0.0.1"
"matches-selector" "^1.2.0"
"min-dash" "^3.8.1"
"min-dom@^3.1.3":
"integrity" "sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA=="
"resolved" "https://registry.npmmirror.com/min-dom/-/min-dom-3.2.1.tgz"
"version" "3.2.1"
@@ -7549,22 +7517,38 @@
"for-in" "^1.0.2"
"is-extendable" "^1.0.1"
"mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@^0.5.6", "mkdirp@~0.5.1":
"mkdirp@^0.5.1":
"integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="
"resolved" "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz"
"version" "0.5.6"
dependencies:
"minimist" "^1.2.6"
"mkdirp@^1.0.3":
"mkdirp@^0.5.3":
"integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="
"resolved" "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz"
"version" "0.5.6"
dependencies:
"minimist" "^1.2.6"
"mkdirp@^0.5.6":
"integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="
"resolved" "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz"
"version" "0.5.6"
dependencies:
"minimist" "^1.2.6"
"mkdirp@^1.0.3", "mkdirp@^1.0.4":
"integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
"resolved" "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz"
"version" "1.0.4"
"mkdirp@^1.0.4":
"integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
"resolved" "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz"
"version" "1.0.4"
"mkdirp@~0.5.1":
"integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="
"resolved" "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz"
"version" "0.5.6"
dependencies:
"minimist" "^1.2.6"
"mockjs@^1.1.0":
"integrity" "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ=="
@@ -7967,7 +7951,7 @@
"define-properties" "^1.1.4"
"es-abstract" "^1.20.4"
"object.getownpropertydescriptors@^2.0.3":
"object.getownpropertydescriptors@^2.0.3", "object.getownpropertydescriptors@^2.1.0":
"integrity" "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ=="
"resolved" "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz"
"version" "2.1.6"
@@ -8037,7 +8021,14 @@
dependencies:
"mimic-fn" "^1.0.0"
"onetime@^5.1.0", "onetime@^5.1.2":
"onetime@^5.1.0":
"integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="
"resolved" "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz"
"version" "5.1.2"
dependencies:
"mimic-fn" "^2.1.0"
"onetime@^5.1.2":
"integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="
"resolved" "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz"
"version" "5.1.2"
@@ -8778,7 +8769,7 @@
"source-map" "^0.5.6"
"supports-color" "^3.2.3"
"postcss@^7.0.0", "postcss@^7.0.1", "postcss@^7.0.14", "postcss@^7.0.27", "postcss@^7.0.32", "postcss@^7.0.36", "postcss@^7.0.5", "postcss@^7.0.6", "postcss@>4 <9":
"postcss@^7.0.0":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
@@ -8786,16 +8777,63 @@
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^8.1.10":
"integrity" "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-8.4.27.tgz"
"version" "8.4.27"
"postcss@^7.0.1":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"nanoid" "^3.3.6"
"picocolors" "^1.0.0"
"source-map-js" "^1.0.2"
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^8.4.14":
"postcss@^7.0.14":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^7.0.27":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^7.0.32":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^7.0.36":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^7.0.5":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^7.0.6":
"integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz"
"version" "7.0.39"
dependencies:
"picocolors" "^0.2.1"
"source-map" "^0.6.1"
"postcss@^8.1.10", "postcss@^8.4.14", "postcss@>4 <9":
"integrity" "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-8.4.27.tgz"
"version" "8.4.27"
@@ -9377,21 +9415,7 @@
"resolved" "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz"
"version" "1.0.1"
"rimraf@^2.5.4":
"integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="
"resolved" "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz"
"version" "2.7.1"
dependencies:
"glob" "^7.1.3"
"rimraf@^2.6.1":
"integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="
"resolved" "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz"
"version" "2.7.1"
dependencies:
"glob" "^7.1.3"
"rimraf@^2.6.3":
"rimraf@^2.5.4", "rimraf@^2.6.1", "rimraf@^2.6.3":
"integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="
"resolved" "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz"
"version" "2.7.1"
@@ -9619,17 +9643,32 @@
dependencies:
"node-forge" "^0.10.0"
"semver@^5.5.0":
"semver@^5.5.0", "semver@^5.6.0", "semver@2 || 3 || 4 || 5":
"integrity" "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz"
"version" "5.7.2"
"semver@^5.6.0":
"integrity" "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz"
"version" "5.7.2"
"semver@^6.0.0":
"integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
"version" "6.3.1"
"semver@^6.0.0", "semver@^6.1.0", "semver@^6.1.2", "semver@^6.3.0", "semver@^6.3.1":
"semver@^6.1.0":
"integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
"version" "6.3.1"
"semver@^6.1.2":
"integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
"version" "6.3.1"
"semver@^6.3.0":
"integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
"version" "6.3.1"
"semver@^6.3.1":
"integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
"version" "6.3.1"
@@ -9655,11 +9694,6 @@
dependencies:
"lru-cache" "^6.0.0"
"semver@2 || 3 || 4 || 5":
"integrity" "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
"resolved" "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz"
"version" "5.7.2"
"send@0.18.0":
"integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg=="
"resolved" "https://registry.npmmirror.com/send/-/send-0.18.0.tgz"
@@ -10337,7 +10371,14 @@
dependencies:
"has-flag" "^3.0.0"
"supports-color@^7.0.0", "supports-color@^7.1.0":
"supports-color@^7.0.0":
"integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
"resolved" "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz"
"version" "7.2.0"
dependencies:
"has-flag" "^4.0.0"
"supports-color@^7.1.0":
"integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
"resolved" "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz"
"version" "7.2.0"
@@ -10990,7 +11031,17 @@
"resolved" "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz"
"version" "1.0.2"
"util.promisify@~1.0.0", "util.promisify@1.0.0":
"util.promisify@~1.0.0":
"integrity" "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA=="
"resolved" "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz"
"version" "1.0.1"
dependencies:
"define-properties" "^1.1.3"
"es-abstract" "^1.17.2"
"has-symbols" "^1.0.1"
"object.getownpropertydescriptors" "^2.1.0"
"util.promisify@1.0.0":
"integrity" "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA=="
"resolved" "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz"
"version" "1.0.0"
@@ -11516,7 +11567,7 @@
"source-list-map" "^2.0.0"
"source-map" "~0.6.1"
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.1.0 || ^5.0.0-0", "webpack@^4.36.0 || ^5.0.0", "webpack@^4.4.0", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0":
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.36.0 || ^5.0.0", "webpack@^4.4.0", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0":
"integrity" "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q=="
"resolved" "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz"
"version" "4.46.0"
@@ -11666,14 +11717,7 @@
dependencies:
"mkdirp" "^0.5.1"
"ws@^6.0.0":
"integrity" "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw=="
"resolved" "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz"
"version" "6.2.2"
dependencies:
"async-limiter" "~1.0.0"
"ws@^6.2.1":
"ws@^6.0.0", "ws@^6.2.1":
"integrity" "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw=="
"resolved" "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz"
"version" "6.2.2"