移动端新增绑定维护页面

master
zhangdi 4 days ago
parent 52580cae6b
commit b6d29c78be
  1. 70
      api/product.js
  2. 6
      pages.json
  3. 12
      pages/index/menu.js
  4. 4
      pages/login/login-account.vue
  5. 582
      pages/production/bindingMaintenance.vue
  6. BIN
      static/images/menus/bindingMaintenance.png

@ -75,6 +75,67 @@ const saveAfterPlatIn = (data) => {
})
}
// 绑定维护 根据流程卡号查询信息
const bindingQuery = (params) => {
return http.request({
url: '/blade-desk/workProcess/getCurrentWorkPlan',
method: 'GET',
params
})
}
// 根据流程卡号查询 绑定信息
const getMacToolUseByWpId = (params) => {
return http.request({
url: '/blade-desk/workProcess/getMacToolUseByWpId',
method: 'GET',
params
})
}
// 删除 绑定记录
const bindingRemove = (params) => {
return http.request({
url: '/blade-desk/workProcess/remove',
method: 'POST',
params
})
}
// 绑定记录查询 根据挂具查询绑定记录
const getMacToolUseByToolId = (params) => {
return http.request({
url: '/blade-desk/workProcess/getBindMacToolUseByRsCode',
method: 'GET',
params
})
}
// 绑定记录查询 根据飞靶查询绑定记录
const getBindMacToolUseByFsCode = (params) => {
return http.request({
url: '/blade-desk/workProcess/getBindMacToolUseByFsCode',
method: 'GET',
params
})
}
// 绑定记录查询 根据设备查询绑定记录
const getBindMacToolUseByDeviceCode = (params) => {
return http.request({
url: '/blade-desk/workProcess/getBindMacToolUseByDeviceCode',
method: 'GET',
params
})
}
// 绑定记录 新增
const addMacToolUse = (data) => {
return http.request({
url: '/blade-desk/workProcess/saveMacToolUse',
method: 'POST',
data: data
})
}
export default {
loadNotReceived,
workPlanReceive,
@ -84,5 +145,12 @@ export default {
dictionaryNew,
saveProCheck,
getAfterPlatInCardNo,
saveAfterPlatIn
saveAfterPlatIn,
bindingQuery,
getMacToolUseByWpId,
bindingRemove,
addMacToolUse,
getBindMacToolUseByDeviceCode,
getBindMacToolUseByFsCode,
getMacToolUseByToolId
}

@ -284,6 +284,12 @@
"style": {
"navigationBarTitleText": "站点管理"
}
},
{
"path": "pages/production/bindingMaintenance",
"style": {
"navigationBarTitleText": "绑定维护"
}
}
],
"globalStyle": {

@ -217,6 +217,18 @@ const menus = {
type: ''
}
},
{
key: "bindingMaintenance",
title: "绑定维护",
url: "../production/bindingMaintenance",
bgColor: '',
limit: 'RB2314',
icon: {
size: 20,
color: '#31b26b',
type: ''
}
},
],
},

@ -261,9 +261,9 @@ export default {
}
})
.catch((err) => {
console.log(err);
// console.log(err);
this.loading = false;
// this.$u.func.showToast({ title: "" });
this.$u.func.showToast({ title: "用户名或密码错误" });
});
}
},

@ -0,0 +1,582 @@
<template>
<ifrm ref="ifrm">
<!-- 解绑 -->
<uni-forms ref="wrForm" class="formBox">
<uni-forms-item label="模式:" label-width="100px" class="label-left">
<template #label>
<view class="required-label">
<text>扫描模式</text>
</view>
</template>
<view class="mode-switch">
<view class="switch-btn" :class="{ active: scanMode === 'add' }" @click="handleModeChange('add')">
新增
</view>
<view class="switch-btn" :class="{ active: scanMode === 'del' }" @click="handleModeChange('del')">
删除
</view>
</view>
</uni-forms-item>
<uni-forms-item>
<input type="text" :focus="cardNoFcous" @confirm="cardNoBlur" v-model="cardNoInfo" class="uni-input-border"
placeholder="流程卡" />
</uni-forms-item>
<div v-if="scanMode === 'del'">
</div>
<div v-if="scanMode === 'add'">
<uni-forms-item name="allegation"><input type="text" :focus="oneInputFcous" @confirm="oneInputData"
v-model="oneInput" class="uni-input-border" placeholder="挂具" /></uni-forms-item>
<uni-forms-item name="allegation"><input type="text" :focus="twoInputFcous" v-model="twoInput"
@confirm="twoInputData" class="uni-input-border" placeholder="飞靶" /></uni-forms-item>
<uni-forms-item name="allegation"><input type="text" :focus="therrInputFcous" v-model="therrInput"
@confirm="therrInputData" class="uni-input-border" placeholder="设备" /></uni-forms-item>
</div>
</uni-forms>
<view class="tableBox" v-if="scanMode === 'add'">
<uni-card title="工序信息" v-if="Object.keys(processSet).length > 0">
<t-table>
<t-tr>
<t-td>车间订单号</t-td>
<t-td>{{ processSet.woCode }}</t-td>
</t-tr>
<t-tr>
<t-td>零件号</t-td>
<t-td>{{ processSet.partCode }}</t-td>
</t-tr>
<t-tr>
<t-td>批次号</t-td>
<t-td>{{ processSet.batchNo }}</t-td>
</t-tr>
<t-tr>
<t-td>加工数量</t-td>
<t-td>{{ processSet.makeQty }}</t-td>
</t-tr>
<t-tr>
<t-td>班组</t-td>
<t-td>{{ processSet.makeTeam }}</t-td>
</t-tr>
<t-tr>
<t-td>当前工序号</t-td>
<t-td>{{ processSet.orders }}</t-td>
</t-tr>
<t-tr>
<t-td>当前工序名称</t-td>
<t-td>{{ processSet.ppsName }}</t-td>
</t-tr>
</t-table>
</uni-card>
<uni-card title="挂具信息" v-if="Object.keys(bsRackSet).length > 0">
<t-table>
<t-tr>
<t-td>同槽编号</t-td>
<t-td>{{ bsRackSet.code }}</t-td>
</t-tr>
<t-tr>
<t-td>挂具编号</t-td>
<t-td>{{ bsRackSet.rsCode }}</t-td>
</t-tr>
<t-tr>
<t-td>飞靶编号</t-td>
<t-td>{{ bsRackSet.fsCode }}</t-td>
</t-tr>
<t-tr>
<t-td>设备编号</t-td>
<t-td>{{ bsRackSet.deviceCode }}</t-td>
</t-tr>
<t-tr>
<t-td>挂次号</t-td>
<t-td>{{ bsRackSet.hangNum }}</t-td>
</t-tr>
<t-tr>
<t-td>绑定时间</t-td>
<t-td>{{ bsRackSet.bindTime }}</t-td>
</t-tr>
<t-tr>
<t-td>绑定人</t-td>
<t-td>{{ bsRackSet.name }}</t-td>
</t-tr>
</t-table>
</uni-card>
<uni-card title="飞靶信息" v-if="Object.keys(feibaObj).length > 0">
<t-table>
<t-tr>
<t-td>同槽编号</t-td>
<t-td>{{ bsRackSet.code }}</t-td>
</t-tr>
<t-tr>
<t-td>挂具编号</t-td>
<t-td>{{ bsRackSet.rsCode }}</t-td>
</t-tr>
<t-tr>
<t-td>飞靶编号</t-td>
<t-td>{{ bsRackSet.fsCode }}</t-td>
</t-tr>
<t-tr>
<t-td>设备编号</t-td>
<t-td>{{ bsRackSet.deviceCode }}</t-td>
</t-tr>
<t-tr>
<t-td>挂次号</t-td>
<t-td>{{ bsRackSet.hangNum }}</t-td>
</t-tr>
<t-tr>
<t-td>绑定时间</t-td>
<t-td>{{ bsRackSet.bindTime }}</t-td>
</t-tr>
<t-tr>
<t-td>绑定人</t-td>
<t-td>{{ bsRackSet.name }}</t-td>
</t-tr>
</t-table>
</uni-card>
<uni-card title="设备信息" v-if="Object.keys(facilityObj).length > 0">
<t-table>
<t-tr>
<t-td>同槽编号</t-td>
<t-td>{{ bsRackSet.code }}</t-td>
</t-tr>
<t-tr>
<t-td>挂具编号</t-td>
<t-td>{{ bsRackSet.rsCode }}</t-td>
</t-tr>
<t-tr>
<t-td>飞靶编号</t-td>
<t-td>{{ bsRackSet.fsCode }}</t-td>
</t-tr>
<t-tr>
<t-td>设备编号</t-td>
<t-td>{{ bsRackSet.deviceCode }}</t-td>
</t-tr>
<t-tr>
<t-td>挂次号</t-td>
<t-td>{{ bsRackSet.hangNum }}</t-td>
</t-tr>
<t-tr>
<t-td>绑定时间</t-td>
<t-td>{{ bsRackSet.bindTime }}</t-td>
</t-tr>
<t-tr>
<t-td>绑定人</t-td>
<t-td>{{ bsRackSet.name }}</t-td>
</t-tr>
</t-table>
</uni-card>
</view>
<view class="tableBox" v-if="scanMode === 'del'">
<view v-if="rackList.length === 0" class="empty-tip">暂无绑定记录</view>
<view v-for="(item, index) in rackList" :key="index" class="record-card-container">
<!-- 移除 title 属性改为内部自定义头部 -->
<uni-card padding="0">
<!-- 自定义头部包含标题和删除按钮 -->
<view class="card-header">
<view class="header-title">记录 {{ index + 1 }}</view>
<button class="header-btn" size="mini" type="warn" plain @click="removeClick(item)">
删除
</button>
</view>
<!-- 分割线 -->
<view class="divider"></view>
<!-- 内容区域 -->
<view class="card-content">
<view class="info-row">
<text class="label">挂具编号</text>
<text class="value">{{ item.rsCode || '-' }}</text>
</view>
<view class="info-row">
<text class="label">飞靶编号</text>
<text class="value">{{ item.fsCode || '-' }}</text>
</view>
<view class="info-row">
<text class="label">设备编号</text>
<text class="value">{{ item.deviceCode || '-' }}</text>
</view>
<!-- 注意你之前代码里这里也是 deviceCode如果是挂次号请确认字段名 -->
<view class="info-row">
<text class="label">挂次号</text>
<text class="value">{{ item.hangNum || '-' }}</text>
</view>
</view>
</uni-card>
</view>
</view>
<view class="buttonBox" v-if="scanMode === 'add'">
<button class="button" type="primary" :disabled="((Object.keys(processSet).length <= 0) &&
Object.keys(bsRackSet).length == 0 ||
Object.keys(feibaObj).length == 0 ||
Object.keys(facilityObj).length == 0
)
" @click="submitClick">
确认
</button>
</view>
</ifrm>
</template>
<script>
import ifrm from "@/pages/index/ifrm";
import tTable from "@/components/t-table/t-table.vue";
import tTh from "@/components/t-table/t-th.vue";
import tTr from "@/components/t-table/t-tr.vue";
import tTd from "@/components/t-table/t-td.vue";
import inputBlur from "@/mixin/inputBlur.js";
export default {
// mixins: [inputBlur],
components: {
ifrm,
tTable,
tTh,
tTr,
tTd,
},
data() {
return {
scanMode: "add",
therrInput: "",
bsRackSet: {},
feibaObj: {},
facilityObj: {},
oneFlag: false,
twoFlag: false,
therrFlag: false,
cardNoFcous: true,
cardNoInfo: '',//
rackList: [],
oneInputFcous: false,
twoInputFcous: false,
therrInputFcous: false,
oneInput: '',
twoInput: '',
therrInput: '',
processSet: {}
};
},
onNavigationBarButtonTap(btn) {
this.$refs.ifrm.topMenuClick(btn);
},
onShow() {
},
methods: {
//
handleModeChange(mode) {
this.scanMode = mode;
this.hasData = false;
this.cardNoInfo = ''
uni.showToast({
title: `已切换到${mode === "add" ? "新增" : "删除"}模式`,
icon: "none",
});
},
//
cardNoBlur() {
if (this.cardNoInfo == '') {
return false
}
uni.showLoading({
title: "查询中...",
mask: true,
});
if (this.scanMode === 'add') {
this.$u.api.bindingQuery({ cardNo: this.cardNoInfo }).then((res) => {
console.log('流程卡号查询重量', res.data)
this.cardNoInfo = ''
this.processSet = res.data
uni.hideLoading();
}).catch((err) => {
this.cardNoInfo = ''
uni.hideLoading();
});
} else {
this.$u.api.getMacToolUseByWpId({ cardNo: this.cardNoInfo }).then((res) => {
console.log('流程卡号查询重量', res.data)
this.cardNoInfo = ''
this.rackList = res.data
uni.hideLoading();
}).catch((err) => {
this.cardNoInfo = ''
uni.hideLoading();
});
}
},
//
removeClick(obj) {
this.rackList.forEach((item, index) => {
if (item.rsId == obj.rsId) {
this.rackList.splice(index, 1);
}
});
this.$u.api.bindingRemove({ ids: obj.id }).then((res) => {
});
},
//
oneInputData() {
this.feibaObj = {};
this.facilityObj = {}
uni.hideKeyboard();
this.getData(this.oneInput, 1);
},
twoInputData() {
uni.hideKeyboard();
this.bsRackSet = {};
this.facilityObj = {}
this.getData(this.twoInput, 2);
},
therrInputData(code) {
uni.hideKeyboard();
this.bsRackSet = {};
this.feibaObj = {};
this.getEcByDeviceCode(code);
},
clearInput() {
this.oneInput = ''
this.oldOneInput = ''
this.twoInput = ''
this.oldTwoInput = ''
this.therrInput = ''
this.oldTherrInput = ''
this.fourInput = ''
this.oldFourInput = ''
},
clearOneInput() {
this.oneInput = ''
},
clearTwoInput() {
this.twoInput = ''
},
clearTherrInput() {
this.therrInput = ''
},
getData(code, num) {
this.bsRackSet = {};
this.feibaObj = {};
this.facilityObj = {};
this.clearInput();
if (num == 1) {
this.$u.api.getMacToolUseByToolId({ rsCode: code }).then((res) => {
let data = res.data;
this.bsRackSet = data;
this.twoFlag = true;
this.therrFlag = true;
this.clearOneInput();
uni.showToast({
title: "数据获取成功",
icon: "none",
});
});
}
if (num == 2) {
this.$u.api.getBindMacToolUseByFsCode({ fsCode: code }).then((res) => {
let data = res.data;
this.feibaObj = data;
this.oneFlag = true;
this.therrFlag = true;
this.clearTwoInput();
uni.showToast({
title: "数据获取成功",
icon: "none",
});
});
}
},
//
getEcByDeviceCode(code) {
this.therrInput = code;
this.$u.api.getBindMacToolUseByDeviceCode({ deviceCode: code }).then((res) => {
let data = res.data;
this.facilityObj = data;
this.oneFlag = true;
this.twoFlag = true;
this.clearTherrInput();
});
},
//
submitClick() {
let query = {
}
const rackId = (this.bsRackSet && Object.keys(this.bsRackSet).length > 0) ? (this.bsRackSet.id || this.bsRackSet.rsId) : null;
const feibaId = (this.feibaObj && Object.keys(this.feibaObj).length > 0) ? (this.feibaObj.id || this.feibaObj.fsId) : null;
const deviceId = (this.facilityObj && Object.keys(this.facilityObj).length > 0) ? (this.facilityObj.id || this.facilityObj.deviceId) : null;
if (!rackId && !feibaId && !deviceId) {
uni.showToast({
title: "当前查询的数据没有绑定记录(请扫描挂具/飞靶/设备)",
icon: "none",
duration: 2000
});
return;
}
const params = {
wpId: this.processSet.id,
}
if (rackId) {
params.toolId = rackId;
}
if (feibaId) {
params.toolId = feibaId;
}
if (deviceId) {
params.toolId = deviceId;
}
uni.showLoading({
title: "提交中...",
mask: true
});
this.$u.api
.addMacToolUse(params)
.then((res) => {
this.bsRackSet = {};
this.feibaObj = {};
this.facilityObj = {};
this.processSet={}
this.clearInput();
uni.showToast({
title: "解绑成功",
});
uni.hideLoading()
this.oneFlag = false;
this.twoFlag = false;
this.therrFlag = false;
});
},
},
};
</script>
<style scoped lang="scss">
.uni-forms-item {
margin-bottom: 6px !important;
}
.required-label {
display: flex;
align-items: center;
}
.mode-switch {
display: flex;
width: 140px;
height: 34px;
border-radius: 4px;
border: 1px solid rgba(21, 93, 252, 1);
overflow: hidden;
margin-left: auto;
}
.switch-btn {
flex: 1;
text-align: center;
line-height: 32px;
font-size: 14px;
color: rgba(21, 93, 252, 1);
background-color: #fff;
transition: all 0.2s;
}
.switch-btn.active {
background-color: rgba(21, 93, 252, 1);
color: #fff;
}
.label-left {
flex-direction: row !important;
margin-top: 20rpx;
}
.record-card-container {
margin-bottom: 15px;
::v-deep .uni-card {
margin: 0;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
overflow: hidden;
/* 确保圆角生效 */
}
}
/* 自定义卡片头部 */
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 15px;
background-color: #f9f9f9;
/* 浅灰色背景区分头部 */
}
.header-title {
font-size: 16px;
font-weight: bold;
color: #333;
}
.header-btn {
margin: 0;
padding: 0 10px;
height: 28px;
line-height: 26px;
font-size: 12px;
/* 覆盖 uni-button 的一些默认样式,使其更紧凑 */
&::after {
border: none;
}
}
.divider {
height: 1px;
background-color: #eee;
width: 100%;
}
.card-content {
padding: 10px 15px;
/* 给内容区域添加内边距 */
display: flex;
flex-direction: column;
}
.info-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 0;
border-bottom: 1px solid #f0f0f0;
&:last-of-type {
border-bottom: none;
}
}
.label {
color: #666;
font-size: 14px;
}
.value {
color: #333;
font-size: 14px;
font-weight: 500;
}
/* 保留原有的 empty-tip 样式 */
.empty-tip {
text-align: center;
padding: 20px;
color: #999;
font-size: 14px;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Loading…
Cancel
Save