# Conflicts:
#	mes-ui/mes-ui-admin-vue3/src/views/heli/storagein/detail.vue
This commit is contained in:
BinBin Song 2025-08-03 22:44:52 +08:00
commit f5195b96c6
22 changed files with 1536 additions and 144 deletions

View File

@ -149,7 +149,15 @@ public class TaskDispatchController {
}
}
@GetMapping("/task-dispatch-detail/list-by-dispatch-id-assembly")
@Operation(summary = "获得派工明细列表")
@Parameter(name = "dispatchId", description = "派工单id",required = true)
@Parameter(name = "dispatchType", description = "派工单类型",required = false)
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
public CommonResult<List<TaskDispatchDetailDO>> getTaskDispatchDetailListByDispatchIdAssembly(@RequestParam("dispatchId") Long dispatchId) {
return success(taskDispatchService.getTaskDispatchDetailListByDispatchIdAssembly(dispatchId));
}
@DeleteMapping("/task-dispatch-detail/delete")
@Operation(summary = "删除派工单")
@Parameter(name = "id", description = "编号", required = true)

View File

@ -104,6 +104,8 @@ public class TaskDispatchDetailDO extends BaseDO {
* 工序状态 默认 已提交 已完成 0 1 2
*/
private Integer procedureStatus;
private Integer reportProcess;
private String matPlanProcess;
@TableField(exist = false)
private String projectName;
@ -236,6 +238,7 @@ public class TaskDispatchDetailDO extends BaseDO {
private String nickname;
@TableField(exist = false)
private BigDecimal workingHours;
@TableField(exist = false)
private LocalDateTime reportTime;
private Integer reportStatus;
@ -243,4 +246,10 @@ public class TaskDispatchDetailDO extends BaseDO {
private Integer flag;
//是否泡沫 -Y -N
private String isFoam;
@TableField(exist = false)
private BigDecimal workingHour;
@TableField(exist = false)
private Long users;
@TableField(exist = false)
private BigDecimal bgWorkTimes;
}

View File

@ -388,7 +388,28 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
.eq(TaskDispatchDetailDO::getDispatchId, dispatchId);
return selectList(query);
}
default List<TaskDispatchDetailDO> selectListByDispatchIdAssembly(Long dispatchId) {
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDetailDO.class)
.select("a.is_report as is_report,a.code as procedure_code")
.select("count(b.amount) as numAmount")
.select("sum(CASE WHEN b.work_type = 1 THEN b.work_time ELSE 0 END) as workingHours")
// .select("sum(bg.work_time) as bgWorkTime")
.select("(SELECT SUM(bg.work_time) \n" +
" FROM quality_zj_pg_master_line p\n" +
" LEFT JOIN quality_zj_bg_master_line bg ON bg.zj_mx_id = p.id and p.deleted = 0 AND p.tenant_id = 2\n" +
" WHERE p.dispatch_detail_id = t.id) AS bgWorkTime")
.leftJoin(ProcedureDO.class,"a",ProcedureDO::getId,TaskDispatchDetailDO::getProcedureId)
.leftJoin(TaskReportDO.class,"b",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
// .leftJoin(PgMasterLineDO.class,"p",PgMasterLineDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
// .leftJoin("quality_pg_master_line p on p.dispatch_detail_id=t.id and p.deleted=0")
// .leftJoin("quality_bg_master_line bg on bg.zj_mx_id = p.id and bg.deleted=0")
// .leftJoin(BgMasterLineDO.class,"bg",BgMasterLineDO::getZjMxId,PgMasterLineDO::getId)
.disableSubLogicDel()
.groupBy(TaskDispatchDetailDO::getId)
.eq(TaskDispatchDetailDO::getDispatchId, dispatchId);
return selectList(query);
}
default List<TaskDispatchDetailDO> selectListByDispatchIdNew(Long dispatchId) {
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDetailDO.class)

View File

@ -251,6 +251,7 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getProjectMaterialPlanNo, null);
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getPlanStatus,0);
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getProjectMaterialPlanDetailId,null);
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getMatPlanProcess,"N");
taskDispatchDetailMapper.update(lambdaUpdateWrapper);
}
materialPlanBoomMapper.delete(queryWrapper1);
@ -306,6 +307,7 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
materialPlanBoomDOList.add(boomDO);
taskDispatchDetailDO.setProjectMaterialPlanDetailId(boomDO.getId());
taskDispatchDetailDO.setPlanStatus(1);
taskDispatchDetailDO.setMatPlanProcess("Y");
taskDispatchDetailDO.setProjectMaterialPlanNo(planDO.getProjectMaterialPlanNo());
}
// materialPlanBoomMapper.insertBatch(materialPlanBoomDOList);

View File

@ -97,4 +97,6 @@ public interface TaskDispatchService {
boolean judgeHasOver(Long id);
List<TaskDispatchDO> getListJg(Long id, Long projectSubId);
List<TaskDispatchDetailDO> getTaskDispatchDetailListByDispatchIdAssembly(Long dispatchId);
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
@ -194,15 +195,23 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
for (TaskDispatchDetailDO dispatchDetailDO : list) {
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
if (isDetailChanged(taskDispatchDetailDO, dispatchDetailDO)) {
if (taskDispatchDetailDO.getPlanStatus()==1){
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId());
if ("false".equals(dispatchDetailDO.getIsOutsourcing())){
if ("Y".equals(taskDispatchDetailDO.getMatPlanProcess())){
ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
if (ObjectUtil.isNotEmpty(bomDetailDO)&&ObjectUtil.isNotEmpty(procedureDO)){
throw exception(new ErrorCode(400,bomDetailDO.getMaterialName()+" "+procedureDO.getName()+"已做物料需求计划,不能更改,请确认"));
if (ObjectUtil.isNotEmpty(procedureDO)){
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做物料需求计划,不允许去掉外协,请确认!"));
}
}
}
}
// if (isDetailChanged(taskDispatchDetailDO, dispatchDetailDO)) {
// if (taskDispatchDetailDO.getPlanStatus()==1){
// ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId());
// ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
// if (ObjectUtil.isNotEmpty(bomDetailDO)&&ObjectUtil.isNotEmpty(procedureDO)){
// throw exception(new ErrorCode(400,bomDetailDO.getMaterialName()+" "+procedureDO.getName()+"已做物料需求计划,不能更改,请确认"));
// }
// }
// }
}
}
@ -520,12 +529,15 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
@Override
public void deleteTaskDispatchDetail(Long id) {
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(id);
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&taskDispatchDetailDO.getPlanStatus()==1){
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(taskDispatchDetailDO.getDispatchId());
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&("Y".equals(taskDispatchDetailDO.getMatPlanProcess())||taskDispatchDetailDO.getReportProcess()!=0)){
ProcedureDO procedureDO = procedureMapper.selectById(taskDispatchDetailDO.getProcedureId());
if (ObjectUtil.isNotEmpty(bomDetailDO)&&ObjectUtil.isNotEmpty(procedureDO)){
throw exception(new ErrorCode(400,bomDetailDO.getMaterialName()+" "+procedureDO.getName()+"已做物料需求计划,不能更改,请确认"));
if (ObjectUtil.isNotEmpty(procedureDO)){
if ("Y".equals(taskDispatchDetailDO.getMatPlanProcess())){
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做需求计划,不允许删除"));
}else {
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做报工,不允许删除"));
}
}
}
taskDispatchDetailMapper.deleteByDispatchId(id);
@ -736,7 +748,6 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
if(operateReqVO.getOwnerId()!=null){
lastReportDO.setOwner(operateReqVO.getOwnerId());
taskDispatchDetailDO.setOwner(operateReqVO.getOwnerId());
taskDispatchDetailMapper.updateById(taskDispatchDetailDO);
}else{
lastReportDO.setOwner(taskDispatchDetailDO.getOwner());
}
@ -745,6 +756,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}else {
lastReportDO.setWorkType("1");
}
taskDispatchDetailDO.setReportProcess(1);
taskDispatchDetailMapper.updateById(taskDispatchDetailDO);
//更新生产计划单
if (planDO.getStatus() != 2 && planDO.getStatus()!=3){
planDO.setStatus(2);
@ -774,6 +787,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
case FINISH:
taskDispatchDetailDO.setProcedureStatus(TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
taskDispatchDetailDO.setReportProcess(2);
//装配看看是不是多人如果是多人判断一下
boolean allReport = true;
HashMap<Long,TaskDispatchDetailDO> dispatchDetailDOHashMap = new HashMap<>();
@ -787,27 +801,30 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}
}
if (CollUtil.isNotEmpty(dispatchDetailDOHashMap)){
List<HashMap<Long, Long>> hashMaps = taskDispatchDetailMapper.sumAssembleReport(new ArrayList<>(dispatchDetailDOHashMap.keySet()));
HashMap<Long,Long> reportMap = new HashMap<>();
for (HashMap<Long, Long> hashMap : hashMaps) {
reportMap.put(hashMap.get("detailId"),hashMap.get("amount"));
}
for (Long l : dispatchDetailDOHashMap.keySet()) {
if (!reportMap.containsKey(l)){
msg = msg + dispatchDetailDOHashMap.get(l).getOwnerName() + ",";
allReport = false;
}
}
if (!msg.equals("")){
msg = msg.substring(0,msg.length()-1) + "还没有报工,请确认";
}
// List<HashMap<Long, Long>> hashMaps = taskDispatchDetailMapper.sumAssembleReport(new ArrayList<>(dispatchDetailDOHashMap.keySet()));
// HashMap<Long,Long> reportMap = new HashMap<>();
// for (HashMap<Long, Long> hashMap : hashMaps) {
// reportMap.put(hashMap.get("detailId"),hashMap.get("amount"));
// }
// for (Long l : dispatchDetailDOHashMap.keySet()) {
// if (!reportMap.containsKey(l)){
// msg = msg + dispatchDetailDOHashMap.get(l).getOwnerName() + ",";
// allReport = false;
// }
// }
// if (!msg.equals("")){
// msg = msg.substring(0,msg.length()-1) + "还没有报工,请确认";
// }
allReport = false;
}
if (!allReport){
throw exception(new ErrorCode(1_009_019,msg));
// throw exception(new ErrorCode(1_009_019,msg));
LambdaUpdateWrapper<TaskDispatchDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TaskDispatchDetailDO::getId,taskDispatchDetailDO.getId());
updateWrapper.set(TaskDispatchDetailDO::getProcedureStatus,TaskDispatchProcedureStatusEnum.COMPLETED.getCode());
taskDispatchDetailMapper.update(updateWrapper);
}
if (allReport){
TaskDispatchDetailOwnerDO taskDispatchDetailOwnerDO = taskDispatchDetailOwnerMapper.selectById(taskDispatchDetailDO.getDetailOwnerId());
@ -1008,6 +1025,33 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
public List<TaskDispatchDO> getListJg(Long id, Long projectSubId) {
return taskDispatchMapper.getListJg(id,projectSubId);
}
@Override
public List<TaskDispatchDetailDO> getTaskDispatchDetailListByDispatchIdAssembly(Long dispatchId) {
List<TaskDispatchDetailDO> taskDispatchDetailDOS = taskDispatchDetailMapper.selectListByDispatchIdAssembly(dispatchId);
List<TaskDispatchDetailDO> result = taskDispatchDetailDOS.stream()
// 按procedureId分组
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getProcedureId))
.values().stream()
// 处理每个分组
.map(group -> {
if (group.size() >= 2) {
// 获取前两个元素
TaskDispatchDetailDO first = group.get(0);
TaskDispatchDetailDO second = group.get(1);
// 将第二个元素的属性赋值给第一个元素
first.setBgWorkTimes(second.getBgWorkTime());
first.setWorkingHour(second.getWorkingHours());
first.setUsers(second.getOwner());
}
// 始终返回每组第一个元素
return group.get(0);
})
.collect(Collectors.toList());
return result; }
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
list.forEach(o -> o.setDispatchId(dispatchId));

View File

@ -4,14 +4,14 @@ NODE_ENV=production
VITE_DEV=false
# 请求路径https://nxhs.cjyx.cc/admin-api http://192.168.1.87:8080 https://star.hz-hl.com
VITE_BASE_URL='https://star.hz-hl.com'
VITE_BASE_URL='https://nxhs.cjyx.cc'
# 上传路径 http://218.75.46.166:8080
VITE_UPLOAD_URL='https://star.hz-hl.com/admin-api/infra/file/upload'
VITE_UPLOAD_URL='https://nxhs.cjyx.cc/admin-api/infra/file/upload'
# 上传路径
VITE_UPLOAD_BATCH_URL='https://star.hz-hl.com/admin-api/infra/file/uploadBatch'
VITE_UPLOAD_BATCH_URL='https://nxhs.cjyx.cc/admin-api/infra/file/uploadBatch'
# 接口前缀
VITE_API_BASEPATH=

View File

@ -86,7 +86,7 @@
"source.fixAll.eslint": "explicit"
},
"[vue]": {
"editor.defaultFormatter": "stylelint.vscode-stylelint"
"editor.defaultFormatter": "octref.vetur"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",

View File

@ -6,7 +6,7 @@
"private": false,
"scripts": {
"i": "pnpm install",
"dev": "vite --mode base",
"dev": "vite --mode dev",
"front": "vite --mode front",
"ts:check": "vue-tsc --noEmit",
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",

View File

@ -84,3 +84,7 @@ export const getAssmebleDispatchPage = async() => {
export const judgeHasOver = async(id:number)=>{
return await request.get({url:`/heli/task-dispatch/task-dispatch-detail/judgeHasOver?id=`+id})
}
// 获得派工明细列表
export const getTaskDispatchDetailListByDispatchIdAssembly = async (dispatchId) => {
return await request.get({ url: `/heli/task-dispatch/task-dispatch-detail/list-by-dispatch-id-assembly?dispatchId=` + dispatchId })
}

View File

@ -296,5 +296,6 @@ export enum DICT_TYPE {
MATERIAL_PLAN_BOOM_MPLAN_STATUS='material_plan_boom_mplan_status',
HELI_PROJECT_PURCHASE_ORDER_NO_TYPE = 'heli_project_purchase_order_no_type',//采购单类型
HELI_DISPATCH_PRODUCTION_STATUS = 'heli_dispatch_production_status', // 派工单状态
HELI_STORAGE_IN_STATUS = 'heli_storage_in_status',//入库出库状态
}

View File

@ -382,9 +382,12 @@
</el-row>
</el-card>
</el-form>
<!-- <div class="hl-footer text-center">-->
<!-- -->
<!-- </div>-->
<div class="hl-footer text-center" v-if="active == 'create'">
<el-button @click="goback" size="large" style=""> </el-button>
<el-button @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"> </el-button>
</div>
</el-card>
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
<!-- 打印发货单 - 弹框-->

View File

@ -93,9 +93,10 @@
</el-row>
</el-card>
</el-form>
<!-- <div class="text-center hl-footer">-->
<!-- -->
<!-- </div>-->
<div class="text-center hl-footer" v-if="active == 'create'">
<el-button @click="goback" size="large" style=""> </el-button>
<el-button v-if="active != 'detail'" type="primary" @click="submitForm('SAVE')" :disabled="formLoading" size="large"> </el-button>
</div>
</el-card>
<ProjectSubDialog ref="projectSubDialog" @success="handleSelectedProjectOrderSub" />

View File

@ -75,7 +75,7 @@
<el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_STATUS)"
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_IN_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -153,21 +153,21 @@
:formatter="dateFormatter"
min-width="240"
/>
<el-table-column label="作废人" align="center" prop="cancel" min-width="120">
<template #default="scope">
{{ userList.find((user) => user.id == scope.row.cancel)?.nickname }}
</template>
</el-table-column>
<el-table-column
label="作废时间"
align="center"
prop="cancelTime"
:formatter="dateFormatter"
min-width="240"
/>
<!-- <el-table-column label="作废人" align="center" prop="cancel" min-width="120">-->
<!-- <template #default="scope">-->
<!-- {{ userList.find((user) => user.id == scope.row.cancel)?.nickname }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- label="作废时间"-->
<!-- align="center"-->
<!-- prop="cancelTime"-->
<!-- :formatter="dateFormatter"-->
<!-- min-width="240"-->
<!-- />-->
<el-table-column label="单据状态" align="center" prop="status" min-width="120" fixed="right">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_STORAGE_STATUS" :value="scope.row.status" />
<dict-tag :type="DICT_TYPE.HELI_STORAGE_IN_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="180" fixed="right">

View File

@ -44,7 +44,7 @@
<!-- 采购单信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">采购单信息</span>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">入库单信息</span>
</template>
<el-row>
<el-col>
@ -340,7 +340,6 @@ function doPrint() {
overflow-wrap: break-word !important;
padding: 4px 2px;
}
</style>
</head>
<body>
@ -355,6 +354,7 @@ function doPrint() {
iframe.contentWindow?.print()
setTimeout(() => document.body.removeChild(iframe), 1000)
}
StorageinApi.updateIsPrint(query.id);
}
@ -486,18 +486,18 @@ const getList = async () => {
margin: 0 auto;
border: 2px solid #000 !important;
}
.print-table th,
.print-table td {
border: 1px solid #000 !important;
-webkit-print-color-adjust: exact !important;
color-adjust: exact !important;
}
.print-table th:last-child,
.print-table td:last-child {
border-right: 2px solid #000 !important;
}
}
</style>
</style>

View File

@ -15,13 +15,13 @@
<td colspan="12">
<span style="font-size: 20px; font-weight: 700">产品工艺流程卡</span>
</td>
<td colspan="3" style="padding: 5px 0">
<td colspan="4" style="padding: 5px 0">
<div style="border-bottom: 1px solid #666; padding-bottom: 5px">项目编号</div>
<div style="padding-top: 5px">{{ formData.projectCode }}</div>
</td>
</tr>
<tr>
<td colspan="18">
<td colspan="19">
<div style="display: flex; justify-content: space-between;padding:0 5px">
<span>子项目编号{{ formData.projectSubCode}}</span>
<span>项目交期{{formatDate(new Date(formData.projectEndTime), 'YYYY-MM-DD')}}
@ -72,6 +72,7 @@
<td colspan="1">磨床</td>
<td colspan="1">数控1</td>
<td colspan="1">数控2</td>
<td colspan="1">线切割</td>
<td colspan="1">火花</td>
<td colspan="1">刻字</td>
<td colspan="1">网格</td>
@ -95,6 +96,7 @@
<td colspan="1" class="hr-dotted">{{item.polishing}}</td>
<td colspan="1" class="hr-dotted">{{item.wire}}</td>
<td colspan="1" class="hr-dotted">{{item.rough}}</td>
<td colspan="1" class="hr-dotted">{{item.cutting}}</td>
<td colspan="1" class="hr-dotted">{{item.fashioning}}</td>
<td colspan="1" class="hr-dotted">{{item.spark}}</td>
<td colspan="1" class="hr-dotted">{{item.lettering}}</td>
@ -104,7 +106,7 @@
</tbody>
<tbody>
<tr>
<td colspan="18">
<td colspan="19">
<div style="display: flex; justify-content: left;">
<span style="font-size: 16px; font-weight: 700">
各工序工艺要点
@ -114,7 +116,7 @@
</tr>
<tr v-for="item in summarylist" :key="item">
<td colspan="3" class="hr-dotted" v-if="item.name">{{item.name}}</td>
<td colspan="15" class="hr-dotted" v-if="item.data">{{item.data}}</td>
<td colspan="16" class="hr-dotted" v-if="item.data">{{item.data}}</td>
</tr>
</tbody>
<tbody>
@ -127,7 +129,7 @@
<td colspan="4">
开单人/日期
</td>
<td colspan="4">
<td colspan="5">
{{formData.userNickname}}
{{ formatDate(new Date(formData.startTime), 'YYYY-MM-DD') }}
</td>
@ -200,6 +202,14 @@ const summarylist = ref([
name: undefined,
data: undefined
},
{
name: undefined,
data: undefined
},
{
name: undefined,
data: undefined
},
{
name: undefined,
data: undefined
@ -224,7 +234,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 2,
@ -243,7 +254,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 3,
@ -262,7 +274,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 4,
@ -281,7 +294,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 5,
@ -300,7 +314,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 6,
@ -319,7 +334,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 7,
@ -339,7 +355,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 8,
@ -358,7 +375,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 9,
@ -378,7 +396,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 10,
@ -398,7 +417,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 11,
@ -418,7 +438,8 @@ const formDataprocess = ref({
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 12,
@ -645,7 +666,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 2,
@ -664,7 +686,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 3,
@ -683,7 +706,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 4,
@ -702,7 +726,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 5,
@ -721,7 +746,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 6,
@ -740,7 +766,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 7,
@ -760,7 +787,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 8,
@ -779,7 +807,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 9,
@ -799,7 +828,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 10,
@ -819,7 +849,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 11,
@ -839,7 +870,8 @@ const outopen = () => {
lettering: undefined,
electrowelding: undefined,
drill: undefined,
polishing: undefined
polishing: undefined,
cutting:undefined
},
{
index: 12,
@ -1463,6 +1495,45 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].polishing = taskitem.workingHours
}
}else if (Procedure.name == '线切割') {
console.log()
summarylist.value[13].name = Procedure.name
if (!summarylist.value[13].data) {
summarylist.value[13].data = taskitem.summary
} else if (summarylist.value[13].data && taskitem.summary) {
summarylist.value[13].data = summarylist.value[13].data + ',' + taskitem.summary
}
if (!formDataprocess.value.tablename[0].cutting) {
formDataprocess.value.tablename[0].cutting = taskitem.sort
} else if (formDataprocess.value.tablename[0].cutting && taskitem.sort) {
formDataprocess.value.tablename[0].cutting =
formDataprocess.value.tablename[0].cutting + ',' + taskitem.sort
}
Procedata.list.forEach((item: any) => {
if (item.name == Procedure.name) {
formDataprocess.value.tablename[2].cutting = item.standard1Time
formDataprocess.value.tablename[3].cutting = item.standard2Time
}
})
if(taskitem.owner){
const initialUser = await UserApi.getUser(taskitem.owner)
if (!formDataprocess.value.tablename[6].cutting) {
formDataprocess.value.tablename[6].cutting = initialUser.nickname
} else if (
formDataprocess.value.tablename[6].cutting &&
!formDataprocess.value.tablename[8].cutting
) {
formDataprocess.value.tablename[8].cutting = initialUser.nickname
} else {
}
}
if (taskitem.bgWorkTime){
formDataprocess.value.tablename[9].cutting = taskitem.bgWorkTime
}
if (taskitem.workingHours){
formDataprocess.value.tablename[5].cutting = taskitem.workingHours
}
}
})
}
@ -1478,6 +1549,7 @@ const open = async (id?: number) => {
const operateLogs = (await getOperateLogPage(logParams)).list[0]
formData.value.userNickname = operateLogs.userNickname
formData.value.startTime = operateLogs.startTime
console.log(formDataprocess.value.tablename)
}
}
defineExpose({ open }) // open

File diff suppressed because it is too large Load Diff

View File

@ -530,12 +530,8 @@ import {
import {
getOperateLogPage
} from "@/api/system/operatelog";
import ProcedureSelect from "@/views/heli/hlvuestyle/procedureSelect.vue";
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
import EquipSelect from "@/views/heli/hlvuestyle/equipSelect.vue";
import EquipmentSelect from "@/views/heli/hlvuestyle/equipmentSelect.vue";
import ProductProcessPrint from "./ProductProcessPrint.vue";
import * as EquipManufactureApi from '@/api/heli/equipmanufacture';
import {
ElDialog,
ElTable,

View File

@ -179,22 +179,22 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
<el-row>
<el-col>
<el-checkbox-group v-if="active != 'detail' && (formData.dispatchStatus == 1||formData.dispatchStatus == 0) " v-model="checkList" @change="onAddItem()">
<el-checkbox label="下料" size="large" border />
<el-checkbox label="电焊" size="large" border />
<el-checkbox label="编程" size="large" border />
<el-checkbox label="开粗" size="large" border />
<el-checkbox label="铣床" size="large" border />
<el-checkbox label="车床" size="large" border />
<el-checkbox label="热处理" size="large" border />
<el-checkbox label="磨床" size="large" border />
<el-checkbox label="数控1" size="large" border />
<el-checkbox label="数控2" size="large" border />
<el-checkbox label="线切割" size="large" border />
<el-checkbox label="火花" size="large" border />
<el-checkbox label="刻字" size="large" border />
<el-checkbox label="网格" size="large" border />
<el-checkbox label="深孔钻" size="large" border />
<el-checkbox label="钻孔" size="large" border />
<el-checkbox label="下料" size="large" border :disabled="disabledLabels.includes('下料')"/>
<el-checkbox label="电焊" size="large" border :disabled="disabledLabels.includes('电焊')"/>
<el-checkbox label="编程" size="large" border :disabled="disabledLabels.includes('编程')"/>
<el-checkbox label="开粗" size="large" border :disabled="disabledLabels.includes('开粗')"/>
<el-checkbox label="铣床" size="large" border :disabled="disabledLabels.includes('铣床')"/>
<el-checkbox label="车床" size="large" border :disabled="disabledLabels.includes('车床')"/>
<el-checkbox label="热处理" size="large" border :disabled="disabledLabels.includes('热处理')" />
<el-checkbox label="磨床" size="large" border :disabled="disabledLabels.includes('磨床')" />
<el-checkbox label="数控1" size="large" border :disabled="disabledLabels.includes('数控1')"/>
<el-checkbox label="数控2" size="large" border :disabled="disabledLabels.includes('数控2')"/>
<el-checkbox label="线切割" size="large" border :disabled="disabledLabels.includes('线切割')"/>
<el-checkbox label="火花" size="large" border :disabled="disabledLabels.includes('火花')"/>
<el-checkbox label="刻字" size="large" border :disabled="disabledLabels.includes('刻字')"/>
<el-checkbox label="网格" size="large" border :disabled="disabledLabels.includes('网格')"/>
<el-checkbox label="深孔钻" size="large" border :disabled="disabledLabels.includes('深孔钻')" />
<el-checkbox label="钻孔" size="large" border :disabled="disabledLabels.includes('钻孔')"/>
<!-- 2025 06 01 以下工序关闭 更新为上面的-->
<!-- <el-checkbox label="铣床" size="large" border />
@ -221,7 +221,7 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
<el-table-column fixed label="外协" align="center" width="60">
<template #default="{ row }">
<el-checkbox v-model="row.isOutsourcing" @change="handleOutsourcingChange(row)" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0"/>
<el-checkbox class="large-checkbox" v-model="row.isOutsourcing" @change="handleOutsourcingChange(row)" :disabled="getDisabledState2(row)"/>
</template>
</el-table-column>
<el-table-column fixed label="顺序号" align="center" prop="sort" width="120px" >
@ -236,7 +236,7 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
</el-table-column>
<el-table-column fixed label="泡沫" align="center" width="60">
<template #default="{ row }">
<el-checkbox v-model="row.isFoam" @change="handleChange(row)" :disabled="row.beginProduce != 0 || row.procedureStatus != 0" v-if="procedureList.find(p => p.id == row.procedureId)?.name == '下料'"/>
<el-checkbox class="large-checkbox" v-model="row.isFoam" @change="handleChange(row)" :disabled="getDisabledState(row)" v-if="procedureList.find(p => p.id == row.procedureId)?.name == '下料'"/>
</template>
</el-table-column>
<el-table-column fixed label="工序名称" align="center" prop="procedureId" width="130">
@ -270,13 +270,13 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
</el-table-column>
<el-table-column fixed label="过程检" align="center" prop="testYn" width="78px" >
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.testYns`" class="mb-0px!">
<el-form-item :prop="`${$index}.testYn`" class="mb-0px!">
<div
style=" display: flex;
justify-content: center;
align-items: center;
width: 100%;">
<el-checkbox v-model="row.checkYns" @change="changeChange(row)" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" />
<el-checkbox v-model="row.checkYns" class="large-checkbox" @change="changeChange(row)" :disabled="getDisabledState(row)" />
</div>
</el-form-item>
@ -285,7 +285,7 @@ style=" display: flex;
<el-table-column fixed label="派工类型" align="center" prop="dispatchType" width="145px">
<template #header>派工类型</template>
<template #default="{ row }">
<el-radio-group size="small" :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.dispatchType" @change="()=>dispatchTypeHasChange(row)">
<el-radio-group size="small" :disabled="getDisabledState(row)" v-model="row.dispatchType" @change="()=>dispatchTypeHasChange(row)">
<el-radio-button :label="1">人员</el-radio-button>
<el-radio-button :label="2">岗位</el-radio-button>
</el-radio-group>
@ -301,7 +301,7 @@ style=" display: flex;
<template #header>负责人</template>
<template #default="{ row , $index}">
<el-form-item :prop="`${$index}.owner`" class="mb-0px!">
<el-select :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" clearable filterable v-if="row.dispatchType==1 " v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px">
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==1 " v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px">
<el-option
v-for="item in ownerList1"
:key="item.index"
@ -309,7 +309,7 @@ style=" display: flex;
:value="item.id"
/>
</el-select>
<el-select :disabled="detailDisabled ||row.beginProduce != 0|| row.procedureStatus != 0" clearable filterable v-if="row.dispatchType==2 && (row.owner != '' && row.owner != null )" v-model="row.owner" placeholder="请选择岗位" style="max-width: 110px">
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner != '' && row.owner != null )" v-model="row.owner" placeholder="请选择岗位" style="max-width: 110px">
<el-option
v-for="item in ownerList1"
:key="item.index"
@ -317,7 +317,7 @@ style=" display: flex;
:value="item.id"
/>
</el-select>
<el-select :disabled="detailDisabled||row.beginProduce != 0 || row.procedureStatus != 0" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
<el-option
v-for="item in ownerList2"
:key="item.index"
@ -338,7 +338,7 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.startTime`" class="mb-0px!">
<el-date-picker
:disabled="detailDisabled " v-model="row.startTime"
:disabled="getDisabledState1(row) " v-model="row.startTime"
type="date" value-format="x" placeholder="选择预计开始日期" @change="changePrepTime('START',$index,row)" />
</el-form-item>
</template>
@ -348,7 +348,7 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.endTime`" class="mb-0px!">
<el-date-picker
:disabled=" detailDisabled" v-model="row.endTime"
:disabled=" getDisabledState1(row)" v-model="row.endTime"
type="date" value-format="x" placeholder="选择预计结束日期" @change="changePrepTime('END',$index,row)"/>
</el-form-item>
</template>
@ -359,7 +359,7 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
<el-form-item :prop="`${$index}.workTime`" class="mb-0px!">
<el-input-number
min="0" :precision="2" class="!w-240px"
:disabled="detailDisabled " v-model="row.workTime"
:disabled="getDisabledState1(row) " v-model="row.workTime"
placeholder="请输入预计工时" />
</el-form-item>
</template>
@ -370,7 +370,7 @@ min="0" :precision="2" class="!w-240px"
<el-form-item :prop="`${$index}.amount`" class="mb-0px!">
<el-input-number
min="0" :max="formData.amount" :precision="0" class="!w-240px"
:disabled="detailDisabled" v-model="row.amount"
:disabled="getDisabledState1(row)" v-model="row.amount"
placeholder="请输入派工数量" />
</el-form-item>
</template>
@ -381,7 +381,7 @@ min="0" :max="formData.amount" :precision="0" class="!w-240px"
<EquipmentSelect
v-model="row.deviceModel"
@update:new-value="handleSelectedequip($index, $event)"
:disabled="detailDisabled ||row.beginProduce != 0 || row.procedureStatus != 0" />
:disabled="getDisabledState(row)" />
</el-form-item>
</template>
</el-table-column>
@ -389,7 +389,7 @@ v-model="row.deviceModel"
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.summary`" class="mb-0px!">
<el-input
:disabled="detailDisabled ||row.beginProduce != 0 || row.procedureStatus != 0" v-model="row.summary"
:disabled="getDisabledState(row)" v-model="row.summary"
placeholder="请输入备注" />
</el-form-item>
</template>
@ -409,7 +409,7 @@ v-model="row.deviceModel"
<el-table-column fixed="right" label="操作" align="center" min-width="90">
<template #default="scope">
<el-button
v-if="'detail' != active && (scope.row.beginProduce == 0 && scope.row.procedureStatus == 0)" link type="danger"
v-if="'detail' != active && (scope.row.matPlanProcess == 'N' && scope.row.reportProcess == 0&&formData.dispatchStatus != 2)" link type="danger"
size="small" @click.prevent="onDeleteItem(scope.row,scope.$index)">
删除
</el-button>
@ -614,18 +614,41 @@ const formLoading = ref(false)
const dialogTitle = ref('')
const detailDisabled = ref(false)
const changeChange = ( row) =>{
if(row.testYn == 'N'){
row.testYn = 'Y'
row.checkYn = 1
row.checkYns = false
}else{
row.testYn = 'N'
row.checkYn = 0
row.checkYns = true
}
// if(row.testYn == 'N'){
// row.testYn = 'N'
// row.checkYn = 0
// row.checkYns = true
// }else{
// row.testYn = 'Y'
// row.checkYn = 1
// row.checkYns = false
//
// }
if(row.checkYns == false){
row.checkYn = 1
}else {
row.checkYn = 0
}
}
const getDisabledState2 = (row) => {
const isDisabled = detailDisabled.value || row.reportProcess == 2||row.matPlanProcess=='Y'
return isDisabled
}
const getDisabledState1 = (row) => {
const isDisabled = detailDisabled.value || row.reportProcess == 2
return isDisabled
}
//
const getDisabledState = (row) => {
const isDisabled = detailDisabled.value || row.reportProcess !== 0
return isDisabled
}
const changePrepTime = (type,index,row)=>{
if(index == 0){
@ -1270,6 +1293,7 @@ const queryData = async (id?: number) => {
craftInfos.value = eval( planData.craftContent)
formData.value.taskDispatchDetails = await TaskDispatchApi.getTaskDispatchDetailListByDispatchId(id)
checkList.value = [];
disabledLabels.value=[];
if(formData.value.taskDispatchDetails!=null){
formData.value.taskDispatchDetails.forEach(item=> {
if(item.checkYn == 1){
@ -1294,6 +1318,7 @@ const queryData = async (id?: number) => {
procedureList.value.forEach(items =>{
if(items.id == item.procedureId){
checkList.value.push(items.name)
disabledLabels.value.push(items.name)
}
})
dispatchListTemp.value.push(JSON.parse(JSON.stringify(item)));
@ -1313,11 +1338,11 @@ const queryData = async (id?: number) => {
}
formData.value.bomCode = formData.value.projectSubCode
if (formData.value.dispatchStatus == 2 ) {
detailDisabled.value = true
}else{
detailDisabled.value = false
}
// if (formData.value.dispatchStatus == 2 ) {
// detailDisabled.value = true
// }else{
// detailDisabled.value = false
// }
//
let logParams = {
@ -1470,6 +1495,7 @@ const submitForm = async (operate) => {
}
}
const checkList = ref([])
const disabledLabels = ref([])
const checkListTemp = ref([])
/** 新增按钮操作 */
const procedureArrary = ['下料','电焊','编程','开粗','铣床','车床','磨床','数控1','数控2','刻字','网格','深钻孔','钻孔','热处理','火花']
@ -1519,9 +1545,11 @@ const onAddItem = () => {
dispatchId: undefined,
procedureCode:'' ,
isReport:0 ,
checkYn : 0,
checkYns: true,
postId: ownerList2.value[0].id
checkYn : 1,
checkYns: false,
postId: ownerList2.value[0].id,
reportProcess:0,
matPlanProcess:"N",
}
//
// Object.keys(procedureList.value).forEach((key) => {
@ -1598,6 +1626,9 @@ const onAddItem = () => {
item1.checkYns=item.checkYns
item1.testYn=item.testYn
item1.checkYn=item.checkYn
item1.owner=item.owner
item1.isOutsourcing=item.isOutsourcing
item1.isFoam=item.isFoam
}
}
}
@ -1709,6 +1740,7 @@ const goback = () => {
var listdetail = ref([]);
/** 删除子项操作 */
const onDeleteItem = async (row,index) => {
console.log(row)
let id = row.id
if (id) await TaskDispatchApi.deleteTaskDispatchDetail(id)
var list = [];
@ -1729,15 +1761,24 @@ const onDeleteItem = async (row,index) => {
list.push(checkList.value[i]);
}
}
const procedureItem = procedureList.value.find(
item => item.id === row.procedureId
);
console.log(procedureItem)
if (procedureItem){
const newArray = disabledLabels.value.filter(item => item !== procedureItem.name)
disabledLabels.value=newArray
}
checkList.value = list;
checkListTemp.value = checkList.value;
message.success(t('common.delSuccess'))
}
const handleOutsourcingChange= async (row: any) => {
console.log('ss')
if(row.isOutsourcing == false){
row.dispatchType = 2
row.postId = ownerList2.value[0].id
row.owner = ''
row.postId = ownerList2.value[0].id
}else{
row.dispatchType = 2
row.owner = ''
@ -1833,4 +1874,21 @@ const printHandle = (id) => {
padding: 10px;
/* 调整为合适的值 */
}
.large-checkbox {
transform: scale(1.5); /* 方法1使用scale放大 */
/* 或者 */
/* 方法2通过调整字体大小 */
/* font-size: 18px; */
}
/* 或者更精确地控制内部图标 */
/* .large-checkbox .el-checkbox__inner {
width: 20px;
height: 20px;
}
.large-checkbox .el-checkbox__inner::after {
height: 10px;
left: 7px;
top: 3px;
width: 5px;
} */
</style>

View File

@ -83,7 +83,7 @@ const categoryList = ref([
path: "unqualifiedNotificationConfirm",
name: "品质异常确认",
auth: false,
imgUrl: "/static/images/unqualifiedNotification.png",
imgUrl: "/static/images/unqualifiedNotificationConfirm.png",
defaultImgUrl: "/static/images/unqualifiedNotification-default.png",
},
]);

View File

@ -3,7 +3,7 @@ import { toRaw, ref, computed } from 'vue'
import { formatDate } from '@/utils/index'
import { onLoad, onShow } from '@dcloudio/uni-app'
import { useLoginStore } from '@/stores/modules/login'
import { getNotificationDetailAPI, operateWx } from '@/services/unqualifiedNotification'
import {confirm, getNotificationDetailAPI, operateWx} from '@/services/unqualifiedNotification'
import { serviceDomain } from '@/services/constants'
const popup = ref<UniHelper.UniPopupInstance>()
const userStore = useLoginStore()
@ -173,7 +173,7 @@ const submitForm = async () => {
status: 1,
notificationStatus: 3
}
await operateWx(params);
await confirm(params);
} catch (error) {
uni.showToast({
icon: 'none',

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB