完善
This commit is contained in:
@@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<contextName>nlAdmin</contextName>
|
||||
<property name="log.charset" value="utf-8"/>
|
||||
<property name="log.pattern"
|
||||
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
|
||||
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/>
|
||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||
<springProperty scope="context" name="lokiUrl" source="loki.url"/>
|
||||
<springProperty scope="context" name="systemName" source="loki.systemName"/>
|
||||
@@ -86,7 +86,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<springProfile name="dev">
|
||||
<root level="info">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="lokiAppender" />
|
||||
<appender-ref ref="lokiAppender"/>
|
||||
</root>
|
||||
<!--logmanage -->
|
||||
<logger name="org.nl.acs.log.service.impl.DeviceExecuteLogServiceImpl" level="info" additivity="false">
|
||||
|
||||
@@ -90,7 +90,7 @@ public class PadController {
|
||||
public ResponseEntity<JSONObject> point(@RequestBody JSONObject param) {
|
||||
// 参数校验
|
||||
String regionId = param.getString("region");
|
||||
if (StrUtil.isEmpty(regionId)) {
|
||||
if (StrUtil.isBlank(regionId)) {
|
||||
JSONObject resultJSON = new JSONObject();
|
||||
resultJSON.put("code", "0");
|
||||
resultJSON.put("desc", "区域不能为空");
|
||||
@@ -111,15 +111,15 @@ public class PadController {
|
||||
@ApiOperation("查询物料")
|
||||
public ResponseEntity<JSONObject> material(@RequestBody JSONObject param) {
|
||||
// 参数校验
|
||||
String point_id = param.getString("device_id");
|
||||
if (StrUtil.isEmpty(point_id)) {
|
||||
String pointId = param.getString("device_id");
|
||||
if (StrUtil.isBlank(pointId)) {
|
||||
JSONObject resultJSON = new JSONObject();
|
||||
resultJSON.put("code", "0");
|
||||
resultJSON.put("desc", "点位不能为空");
|
||||
return new ResponseEntity<>(resultJSON, HttpStatus.OK);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(padService.material(point_id), HttpStatus.OK);
|
||||
return new ResponseEntity<>(padService.material(pointId), HttpStatus.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -136,7 +136,7 @@ public class PadController {
|
||||
public ResponseEntity<JSONObject> bindPoint(@RequestBody JSONObject param) {
|
||||
// 参数校验
|
||||
String type = param.getString("type");
|
||||
if (StrUtil.isEmpty(type)) {
|
||||
if (StrUtil.isBlank(type)) {
|
||||
JSONObject resultJSON = new JSONObject();
|
||||
resultJSON.put("code", "0");
|
||||
resultJSON.put("desc", "操作类型不能为空");
|
||||
@@ -144,14 +144,14 @@ public class PadController {
|
||||
}
|
||||
String pointCode = param.getString("device_code");
|
||||
String materialType = param.getString("material_type");
|
||||
if (StrUtil.equals(type, "1")) {
|
||||
if (StrUtil.isEmpty(pointCode)) {
|
||||
if ("1".equals(type)) {
|
||||
if (StrUtil.isBlank(pointCode)) {
|
||||
JSONObject resultJSON = new JSONObject();
|
||||
resultJSON.put("code", "0");
|
||||
resultJSON.put("desc", "设备不能为空");
|
||||
return new ResponseEntity<>(resultJSON, HttpStatus.OK);
|
||||
}
|
||||
if (StrUtil.isEmpty(materialType)) {
|
||||
if (StrUtil.isBlank(materialType)) {
|
||||
JSONObject resultJSON = new JSONObject();
|
||||
resultJSON.put("code", "0");
|
||||
resultJSON.put("desc", "物料不能为空");
|
||||
|
||||
@@ -32,6 +32,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 徐工手持服务实现
|
||||
@@ -238,11 +240,14 @@ public class PadServiceImpl implements PadService {
|
||||
switch (type) {
|
||||
case "1":
|
||||
// 判断是否是限定物料
|
||||
String pointMaterialType = point.getString("material_type");
|
||||
boolean isEmptyMaterial = StrUtil.equals(materialType, "14");
|
||||
if (!isEmptyMaterial
|
||||
&& !StrUtil.equals(pointMaterialType, "14")
|
||||
&& !StrUtil.equals(pointMaterialType, materialType)) {
|
||||
List<String> materialTypes = WQLObject
|
||||
.getWQLObject("sch_base_point_material")
|
||||
.query("point_id = " + point.getLong("point_id"))
|
||||
.getResultJSONArray(0)
|
||||
.stream()
|
||||
.map(o -> ((JSONObject) o).getString("material"))
|
||||
.collect(Collectors.toList());
|
||||
if (!materialTypes.contains(materialType)) {
|
||||
resultJSON.put("code", "0");
|
||||
resultJSON.put("desc", "该点位不能存放这种物料");
|
||||
return resultJSON;
|
||||
@@ -250,7 +255,7 @@ public class PadServiceImpl implements PadService {
|
||||
|
||||
// 修改点位
|
||||
point.put("current_material_type", materialType);
|
||||
point.put("point_status", isEmptyMaterial ? "00" : "01");
|
||||
point.put("point_status", "01");
|
||||
point.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||
point.put("update_optname", SecurityUtils.getCurrentUsername());
|
||||
point.put("update_time", DateUtil.now());
|
||||
@@ -258,7 +263,7 @@ public class PadServiceImpl implements PadService {
|
||||
break;
|
||||
case "2":
|
||||
// 清空点位
|
||||
point.put("current_material_type", "14");
|
||||
point.put("current_material_type", null);
|
||||
point.put("point_status", "00");
|
||||
point.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||
point.put("update_optname", SecurityUtils.getCurrentUsername());
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
LEFT JOIN sys_dict_detail d4 ON point.point_status = d4.value and d4.name='sch_point_status'
|
||||
LEFT JOIN SCH_BASE_Region prev_region ON point.prev_region_id = prev_region.region_id
|
||||
LEFT JOIN SCH_BASE_Region next_region ON point.next_region_id = next_region.region_id
|
||||
LEFT JOIN sys_dict_detail d6 ON point.current_material_type = d6.`value` AND d6.`name` = 'current_material_type'
|
||||
LEFT JOIN sys_dict_detail d6 ON point.current_material_type = d6.`value` AND d6.`name` = 'material_type'
|
||||
WHERE
|
||||
point.is_delete = '0'
|
||||
OPTION 输入.region_id <> ""
|
||||
|
||||
Binary file not shown.
@@ -62,7 +62,7 @@ public class CallTask extends AbstractAcsTask {
|
||||
@Override
|
||||
public String createTask(JSONObject param) {
|
||||
String nextPointCode = param.getString("next_point_code");
|
||||
String materialType = param.getString("call_material_type");
|
||||
String materialType = param.getString("material_type");
|
||||
|
||||
// 判断点位是否存在
|
||||
JSONObject nextPoint = WQLObject
|
||||
@@ -73,6 +73,16 @@ public class CallTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("未找到该点位");
|
||||
}
|
||||
|
||||
// 判断点位有没有被锁定
|
||||
if (!StrUtil.equals(nextPoint.getString("lock_type"), "00")) {
|
||||
throw new BadRequestException("该点位已被锁定");
|
||||
}
|
||||
|
||||
// 判断点位是否为空位
|
||||
if (!StrUtil.equals(nextPoint.getString("point_status"), "00")) {
|
||||
throw new BadRequestException("该点位不是空位");
|
||||
}
|
||||
|
||||
// 查询点位的叫料区域
|
||||
String startRegionId = nextPoint.getString("prev_region_id");
|
||||
if (StrUtil.isEmpty(startRegionId)) {
|
||||
@@ -91,16 +101,6 @@ public class CallTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("该点位不能呼叫这种物料");
|
||||
}
|
||||
|
||||
// 判断点位有没有被锁定
|
||||
if (!StrUtil.equals(nextPoint.getString("lock_type"), "00")) {
|
||||
throw new BadRequestException("该点位已被锁定");
|
||||
}
|
||||
|
||||
// 判断点位是否为空位
|
||||
if (!StrUtil.equals(nextPoint.getString("point_status"), "00")) {
|
||||
throw new BadRequestException("该点位不是空位");
|
||||
}
|
||||
|
||||
// 查询叫料区域存放此物料的排
|
||||
JSONArray colArray = WQL
|
||||
.getWO("SEND_TASK")
|
||||
@@ -122,8 +122,10 @@ public class CallTask extends AbstractAcsTask {
|
||||
.process()
|
||||
.uniqueResult(0);
|
||||
|
||||
// 点位不为空 且 点位未锁定,则为合适的叫料点位
|
||||
if (ObjectUtil.isNotEmpty(tempPoint) && StrUtil.equals(tempPoint.getString("lock_type"), "00")) {
|
||||
// 点位不为空 且 点位未锁定 且 点位上的物料和需要的物料一致,则为合适的叫料点位
|
||||
if (ObjectUtil.isNotEmpty(tempPoint)
|
||||
&& "00".equals(tempPoint.getString("lock_type"))
|
||||
&& materialType.equals(tempPoint.getString("current_material_type"))) {
|
||||
startPoint = tempPoint;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ public class SendTask extends AbstractAcsTask {
|
||||
// 起点置空 解锁
|
||||
startPoint.put("point_status", "00");
|
||||
startPoint.put("lock_type", "00");
|
||||
startPoint.put("current_material_type", "14");
|
||||
startPoint.put("current_material_type", null);
|
||||
startPoint.put("update_optid", userId);
|
||||
startPoint.put("update_optname", username);
|
||||
startPoint.put("update_time", now);
|
||||
@@ -178,12 +178,6 @@ public class SendTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("未找到该点位");
|
||||
}
|
||||
|
||||
// 查询点位的送料区域
|
||||
String nextRegionId = startPoint.getString("next_region_id");
|
||||
if (StrUtil.isEmpty(nextRegionId)) {
|
||||
throw new BadRequestException("该点位没有送料区域");
|
||||
}
|
||||
|
||||
// 判断点位有没有被锁定
|
||||
if (!StrUtil.equals(startPoint.getString("lock_type"), "00")) {
|
||||
throw new BadRequestException("该点位已被锁定");
|
||||
@@ -194,6 +188,13 @@ public class SendTask extends AbstractAcsTask {
|
||||
throw new BadRequestException("该点位是空位");
|
||||
}
|
||||
|
||||
// 查询点位的送料区域
|
||||
String nextRegionId = startPoint.getString("next_region_id");
|
||||
if (StrUtil.isEmpty(nextRegionId)) {
|
||||
throw new BadRequestException("该点位没有送料区域");
|
||||
}
|
||||
|
||||
|
||||
// 查送料点位(出入库顺序升序)
|
||||
JSONObject nextPoint;
|
||||
String currentMaterialType = startPoint.getString("current_material_type");
|
||||
|
||||
@@ -21,7 +21,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
<charset>${log.charset}</charset>
|
||||
<!-- <charset>${log.charset}</charset>-->
|
||||
</encoder>
|
||||
|
||||
<!-- 转为JSON https://www.zoleet.com/details/328.html-->
|
||||
@@ -64,6 +64,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>${log.charset}</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
@@ -115,7 +116,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
|
||||
<!--生产环境:打印控制台和输出到文件-->
|
||||
<springProfile name="prod">
|
||||
<root level="off">
|
||||
<root level="info">
|
||||
<appender-ref ref="asyncFileAppender"/>
|
||||
</root>
|
||||
</springProfile>
|
||||
|
||||
@@ -21,6 +21,7 @@ public class PointTest {
|
||||
@Test
|
||||
public void test01() {
|
||||
WQLObject point_table = WQLObject.getWQLObject("sch_base_point");
|
||||
WQLObject pm_table = WQLObject.getWQLObject("sch_base_point_material");
|
||||
// JSONObject point = new JSONObject();
|
||||
// point.put("region_id", "1628275194667864064");
|
||||
// point.put("point_type", "00");
|
||||
@@ -49,19 +50,24 @@ public class PointTest {
|
||||
// point_table.insert(point);
|
||||
// }
|
||||
// }
|
||||
JSONArray points = point_table
|
||||
.query("region_id = 1628275194667864064")
|
||||
.getResultJSONArray(0);
|
||||
WQLObject pm_table = WQLObject.getWQLObject("sch_base_point_material");
|
||||
JSONObject pm = new JSONObject();
|
||||
String[] materials = new String[]{"08", "09", "10", "11", "12", "13"};
|
||||
// JSONArray points = point_table
|
||||
// .query("region_id = 1628275194667864064")
|
||||
// .getResultJSONArray(0);
|
||||
// WQLObject pm_table = WQLObject.getWQLObject("sch_base_point_material");
|
||||
// JSONObject pm = new JSONObject();
|
||||
// String[] materials = new String[]{"08", "09", "10", "11", "12", "13"};
|
||||
// for (Object o : points) {
|
||||
// pm.put("point_id", ((JSONObject) o).getLongValue("point_id"));
|
||||
// for (String material : materials) {
|
||||
// pm.put("pm_id", IdUtil.getSnowflake(1L, 1L).nextId());
|
||||
// pm.put("material", material);
|
||||
// pm_table.insert(pm);
|
||||
// }
|
||||
// }
|
||||
|
||||
JSONArray points = point_table.query("region_id = 1628275194667864064").getResultJSONArray(0);
|
||||
for (Object o : points) {
|
||||
pm.put("point_id", ((JSONObject) o).getLongValue("point_id"));
|
||||
for (String material : materials) {
|
||||
pm.put("pm_id", IdUtil.getSnowflake(1L, 1L).nextId());
|
||||
pm.put("material", material);
|
||||
pm_table.insert(pm);
|
||||
}
|
||||
pm_table.delete("point_id = " + ((JSONObject) o).getString("point_id") + " AND material IN ('11', '12', '13')");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.current_material_type"
|
||||
v-for="item in dict.material_type"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
@@ -352,7 +352,7 @@ import pagination from '@crud/Pagination'
|
||||
const defaultForm = { device_point_type: null, point_id: null, is_host: null, point_code: null, point_name: null, area_type: null, point_type: '00', point_status: '00', lock_type: '00', vehicle_code: null, source_id: null, remark: null, is_used: null, is_delete: null, create_id: null, create_name: null, create_time: null, update_optid: null, update_optname: null, update_time: null, material_type: [], region_id: null, prev_region_id: null, next_region_id: null, seq: 0, current_material_type: null, col: 1 }
|
||||
export default {
|
||||
name: 'Point',
|
||||
dicts: ['sch_point_type', 'sch_area_type', 'sch_point_status', 'is_used', 'd_lock_type', 'SCH_TASK_TYPE_DTL', 'storagevehicle_type', 'IS_HOST', 'device_point_type', 'material_type', 'current_material_type'],
|
||||
dicts: ['sch_point_type', 'sch_area_type', 'sch_point_status', 'is_used', 'd_lock_type', 'SCH_TASK_TYPE_DTL', 'storagevehicle_type', 'IS_HOST', 'device_point_type', 'material_type'],
|
||||
components: { pagination, crudOperation, rrOperation, udOperation },
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
cruds() {
|
||||
|
||||
@@ -122,12 +122,12 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<rrOperation />
|
||||
<rrOperation/>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
<crudOperation :permission="permission" />
|
||||
<crudOperation :permission="permission"/>
|
||||
<!--表格渲染-->
|
||||
<el-table
|
||||
ref="table"
|
||||
@@ -137,30 +137,30 @@
|
||||
style="width: 100%;"
|
||||
@selection-change="crud.selectionChangeHandler"
|
||||
>
|
||||
<el-table-column type="selection" width="50" />
|
||||
<el-table-column v-if="false" prop="taskdtl_id" label="任务标识" />
|
||||
<el-table-column prop="task_code" label="任务编码" />
|
||||
<el-table-column v-if="false" prop="task_type" label="任务类型" />
|
||||
<el-table-column prop="task_type_name" label="任务类型" />
|
||||
<el-table-column v-if="false" prop="taskdtl_type" label="任务明细" />
|
||||
<el-table-column v-if="false" prop="taskdtl_type_name" label="任务明细" />
|
||||
<el-table-column v-if="false" prop="task_status" label="任务状态" />
|
||||
<el-table-column prop="task_status_name" label="任务状态" width="95px" :formatter="formatTaskStatusName" />
|
||||
<el-table-column type="selection" width="50"/>
|
||||
<el-table-column v-if="false" prop="taskdtl_id" label="任务标识"/>
|
||||
<el-table-column prop="task_code" label="任务编码"/>
|
||||
<el-table-column v-if="false" prop="task_type" label="任务类型"/>
|
||||
<el-table-column prop="task_type_name" label="任务类型"/>
|
||||
<el-table-column v-if="false" prop="taskdtl_type" label="任务明细"/>
|
||||
<el-table-column v-if="false" prop="taskdtl_type_name" label="任务明细"/>
|
||||
<el-table-column v-if="false" prop="task_status" label="任务状态"/>
|
||||
<el-table-column prop="task_status_name" label="任务状态" width="95px" :formatter="formatTaskStatusName"/>
|
||||
<!--
|
||||
<el-table-column v-if="false" prop="finished_type" label="完成方式" />
|
||||
-->
|
||||
<!-- <el-table-column prop="finished_type_name" label="完成方式" :formatter="formatFinishTypeName"/>-->
|
||||
<el-table-column prop="start_area_name" label="起始区域" width="95" show-overflow-tooltip />
|
||||
<el-table-column prop="start_point_code" label="起点编码" width="85" />
|
||||
<el-table-column prop="start_area_name" label="起始区域" width="95" show-overflow-tooltip/>
|
||||
<el-table-column prop="start_point_code" label="起点编码" width="85"/>
|
||||
<el-table-column prop="start_point_name" label="起点名称" width="105" show-overflow-tooltip/>
|
||||
<el-table-column prop="next_area_name" label="下一区域" width="95" show-overflow-tooltip />
|
||||
<el-table-column prop="next_point_code" label="下一点编码" width="90" />
|
||||
<el-table-column prop="next_area_name" label="下一区域" width="95" show-overflow-tooltip/>
|
||||
<el-table-column prop="next_point_code" label="下一点编码" width="90"/>
|
||||
<el-table-column prop="next_point_name" label="下一点名称" width="105" show-overflow-tooltip/>
|
||||
<el-table-column v-if="false" prop="material_code" label="物料编码" />
|
||||
<el-table-column prop="remark" label="备注" width="120" show-overflow-tooltip />
|
||||
<el-table-column v-if="false" prop="update_by" label="修改者" />
|
||||
<el-table-column prop="create_time" label="创建时间" width="135" />
|
||||
<el-table-column prop="update_time" label="修改时间" width="135" />
|
||||
<el-table-column v-if="false" prop="material_code" label="物料编码"/>
|
||||
<el-table-column prop="remark" label="备注" width="120" show-overflow-tooltip/>
|
||||
<el-table-column v-if="false" prop="update_by" label="修改者"/>
|
||||
<el-table-column prop="create_time" label="创建时间" width="135"/>
|
||||
<el-table-column prop="update_time" label="修改时间" width="135"/>
|
||||
<el-table-column
|
||||
v-permission="['admin','instruction:edit','instruction:del']"
|
||||
fixed="right"
|
||||
@@ -171,21 +171,21 @@
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown trigger="click" @command="handleCommand">
|
||||
<span class="el-dropdown-link">
|
||||
<i class="el-icon-menu" />
|
||||
<i class="el-icon-menu"/>
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'d')">下发</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'a')">完成</el-dropdown-item>
|
||||
<!-- <el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'b')">取消</el-dropdown-item>-->
|
||||
<!-- <el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'b')">取消</el-dropdown-item>-->
|
||||
<!-- <el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'c')">拉回</el-dropdown-item>-->
|
||||
<!-- <el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'e')">详情</el-dropdown-item>-->
|
||||
<!-- <el-dropdown-item :command="beforeHandleCommand(scope.$index, scope.row,'e')">详情</el-dropdown-item>-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination />
|
||||
<pagination/>
|
||||
</div>
|
||||
<el-dialog
|
||||
title="任务详情"
|
||||
@@ -229,7 +229,14 @@ export default {
|
||||
sort: 'taskdtl_id,desc',
|
||||
crudMethod: { ...crudTask },
|
||||
query: {
|
||||
task_code:'',vehicle_code:'',start_point_code:'',next_point_code:'',task_type:'',taskdtl_type:'',finished_type:'',task_status:""
|
||||
task_code: '',
|
||||
vehicle_code: '',
|
||||
start_point_code: '',
|
||||
next_point_code: '',
|
||||
task_type: '',
|
||||
taskdtl_type: '',
|
||||
finished_type: '',
|
||||
task_status: '-1'
|
||||
},
|
||||
optShow: {
|
||||
add: false,
|
||||
@@ -251,9 +258,7 @@ export default {
|
||||
taskStatusList: [],
|
||||
taskTypeList: [],
|
||||
finishTypeList: [],
|
||||
permission: {
|
||||
|
||||
},
|
||||
permission: {},
|
||||
rules: {}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user