| src/pages/inspectionUpload/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/operationScheduling/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/operationScheduling/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/productionDispatching/components/DispatchModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/productionDispatching/components/autoDispatchDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/productionDispatching/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/productionOrder/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/productionManagement/productionReporting/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/pages/inspectionUpload/index.vue
@@ -702,10 +702,8 @@ // 获取当前分类的文件列表 const getCurrentFiles = () => { console.log('currentUploadType',currentUploadType.value) switch (currentUploadType.value) { case 'before': console.log('beforeModelValue',beforeModelValue.value) return beforeModelValue.value case 'after': return afterModelValue.value @@ -817,7 +815,6 @@ infoData.value.storageBlobDTO = arr; // 添加异常状态信息 infoData.value.hasException = hasException.value; const result = await uploadInspectionTask({...infoData.value}); // 检查提交结果 @@ -940,7 +937,19 @@ const getAttachmentsByType = (typeValue) => { return attachmentList.value.filter(file => file.type === typeValue) || [] } // 获取type值 const getTabType = () => { switch (currentUploadType.value) { case 'before': return 0 case 'after': return 1 case 'issue': return 2 default: return 0 } } // 获取当前查看类型的附件 const getCurrentViewAttachments = () => { switch (currentViewType.value) { @@ -1299,13 +1308,12 @@ filePath: filePath, name: 'files', formData: { type: uploadStatusType.value || 0 type: getTabType() || 0 }, header: { 'Authorization': `Bearer ${token}` } }; console.log('uploadParams',uploadParams) const uploadTask = uni.uploadFile({ ...uploadParams, success: (res) => { @@ -1385,7 +1393,6 @@ // 上传成功回调 const handleUploadSuccess = (res, file) => { console.log(res,file) if (res.code === 200 && res.data && Array.isArray(res.data) && res.data.length > 0) { const uploadedFile = res.data[0]; src/pages/productionManagement/operationScheduling/components/formDia.vue
@@ -26,22 +26,38 @@ <up-input v-model="row.type" placeholder="请输入" /> </up-form-item> <up-form-item label="排产数量" label-width="80"> <up-input v-model.number="row.schedulingNum" type="number" placeholder="请输入" /> <uni-number-box v-model="row.schedulingNum" :min="0" :step="0.1" style="width: 100%;" background="#2979FF" color="#fff" /> </up-form-item> <up-form-item label="工时定额" label-width="80"> <up-input v-model.number="row.workHours" type="number" placeholder="请输入" /> <uni-number-box v-model="row.workHours" :min="0" :step="0.1" style="width: 100%;" background="#2979FF" color="#fff" /> </up-form-item> <up-form-item label="排产日期" label-width="80" @click="openDatePicker(index)"> <up-input v-model="row.schedulingDate" placeholder="选择日期" readonly @click="openDatePicker(index)" /> <up-form-item label="排产日期" label-width="80"> <view class="select-box" @click.stop="openDatePicker(index)"> <view class="label" :class="[row.schedulingDate?'':'un-value']"> {{row.schedulingDate||'选择日期'}} </view> <view class="value"> <up-icon name="calendar"></up-icon> </view> </view> <!-- <up-input v-model="row.schedulingDate" placeholder="选择日期" :border="false" readonly @click="openDatePicker(index)" /> <template #right> <up-icon name="calendar" @click="openDatePicker(index)"></up-icon> </template> </template> --> </up-form-item> <up-form-item label="排产人" label-width="80" @click="openUserPicker(index)"> <up-input v-model="row.schedulingUserName" placeholder="选择人员" readonly @click="openUserPicker(index)" /> <up-form-item label="排产人" label-width="80"> <view class="select-box" @click.stop="openUserPicker(index)"> <view class="label" :class="[row.schedulingUserName?'':'un-value']"> {{row.schedulingUserName||'选择人员'}} </view> <view class="value"> <up-icon name="arrow-right"></up-icon> </view> </view> <!-- <up-input v-model="row.schedulingUserName" placeholder="选择人员" readonly @click="openUserPicker(index)" /> <template #right> <up-icon name="arrow-right" @click="openUserPicker(index)"></up-icon> </template> </template> --> </up-form-item> <up-form-item label="备注" label-width="80"> <up-input v-model="row.remark" placeholder="请输入备注" /> @@ -252,10 +268,13 @@ min-height: 0; } .row-card { background: #fff; background: #f5f5f5; border-radius: 10px; padding: 8px; padding: 20rpx; box-shadow: 0 2px 8px rgba(0,0,0,0.05); box-sizing: border-box; // border: 1px solid #f5f5f5; margin-bottom: 20rpx; } .row-header { display: flex; @@ -279,4 +298,26 @@ justify-content: flex-end; padding-top: 8px; } .select-box{ display: flex; flex-direction: row; align-items: center; justify-content: space-between; flex: 1; border-radius: 4px; box-sizing: border-box; padding: 6px 9px; border-width: 0.5px !important; border-color: #dadbde !important; border-style: solid; height: 100%; .label{ min-height: 1.4em; color: rgb(48, 49, 51); font-size: 15px; } .un-value{ color: #999; } } </style> src/pages/productionManagement/operationScheduling/index.vue
@@ -6,15 +6,13 @@ <u-form> <view class="form-row"> <u-form-item label="客户名称" label-width="80"> <up-input v-model="searchForm.customerName" placeholder="请输入" clearable @change="handleQuery" /> </u-form-item> <u-form-item label="项目名称" label-width="80"> <up-input v-model="searchForm.projectName" placeholder="请输入" clearable @change="handleQuery" /> <up-input v-model="searchForm.customerName" placeholder="请输入" clearable /> </u-form-item> </view> <view class="form-row"> <u-form-item label="状态" label-width="80"> <up-input v-model="statusDisplay" placeholder="请选择状态" readonly @click="showStatusPicker = true" /> <u-form-item label="状态" label-width="80" style="flex:1"> <uni-data-select v-model="searchForm.status" :localdata="statusList"></uni-data-select> <!-- <up-input v-model="statusDisplay" placeholder="请选择状态" readonly @click="showStatusPicker = true" /> --> </u-form-item> </view> <view class="form-actions"> @@ -39,11 +37,12 @@ <view class="row"><text class="label">派工日期</text><text class="value">{{ item.schedulingDate }}</text></view> <view class="row"><text class="label">派工人</text><text class="value">{{ item.schedulingUserName }}</text></view> <view class="row"><text class="label">合同号</text><text class="value">{{ item.salesContractNo }}</text></view> <view class="row"><text class="label">客户合同号</text><text class="value">{{ item.customerContractNo }}</text></view> <!-- <view class="row"><text class="label">客户合同号</text><text class="value">{{ item.customerContractNo }}</text></view> --> <view class="row"><text class="label">客户名称</text><text class="value">{{ item.customerName }}</text></view> <view class="row"><text class="label">产品大类</text><text class="value">{{ item.productCategory }}</text></view> <view class="row"><text class="label">规格型号</text><text class="value">{{ item.specificationModel }}</text></view> <view class="row"><text class="label">绑定机器</text><text class="value">{{ item.speculativeTradingName }}</text></view> <view class="row"><text class="label">产线</text><text class="value">{{ item.productionLine }}</text></view> <view class="row inline"> <view class="col"><text class="label">单位</text><text class="value">{{ item.unit }}</text></view> <view class="col"><text class="label">排产总数</text><text class="value">{{ item.schedulingNum }}</text></view> @@ -94,6 +93,17 @@ import dayjs from 'dayjs' import { listPageProcess, productionDispatchDelete } from '@/api/productionManagement/operationScheduling.js' const statusList = reactive([{ text:'待排产', value: 1 },{ text:'排产中', value: 2 },{ text:'已排产', value: 3 }]) const data = reactive({ searchForm: { staffName: "", src/pages/productionManagement/productionDispatching/components/DispatchModal.vue
@@ -1,7 +1,7 @@ <template> <up-popup v-model:show="show" mode="bottom" <uni-popup ref="popupRef" type="bottom" :round="20" :safeAreaInsetBottom="true" @close="handleClose" @@ -26,19 +26,33 @@ > <!-- 项目基本信息 --> <view class="form-section"> <text class="section-title">项目信息</text> <up-form-item label="项目名称" prop="projectName"> <text class="section-title">产品信息</text> <!-- <up-form-item label="项目名称" prop="projectName"> <up-input v-model="form.projectName" disabled placeholder="项目名称" /> </up-form-item> </up-form-item> --> <up-form-item label="产品大类" prop="productCategory"> <up-input v-model="form.productCategory" disabled placeholder="产品大类" /> </up-form-item> <up-form-item label="规格型号" prop="specificationModel"> <up-input v-model="form.specificationModel" disabled placeholder="规格型号" /> </up-form-item> <up-form-item label="绑定机器" prop="speculativeTradingName"> <up-input v-model="form.speculativeTradingName" disabled placeholder="绑定机器" /> </up-form-item> </view> @@ -76,22 +90,14 @@ <view class="form-section"> <text class="section-title">派工信息</text> <up-form-item label="派工人" prop="schedulingUserId" required> <up-input v-model="selectedUserName" placeholder="请选择派工人" readonly @click="showUserPicker = true" suffixIcon="arrow-down" /> <uni-data-select v-model="form.schedulingUserId" :localdata="userColumns" :clear="false"></uni-data-select> </up-form-item> <up-form-item label="派工日期" prop="schedulingDate" required> <up-input v-model="form.schedulingDate" placeholder="请选择派工日期" readonly @click="showDatePicker = true" suffixIcon="calendar" /> <uni-datetime-picker type="date" :clear-icon="false" v-model="form.schedulingDate"> <view class="datetime-picker-value"> {{form.schedulingDate}} </view> </uni-datetime-picker> </up-form-item> </view> </up-form> @@ -115,23 +121,7 @@ /> </view> </view> <!-- 人员选择器 --> <up-picker v-model="showUserPicker" :columns="userColumns" @confirm="handleUserSelect" @cancel="showUserPicker = false" /> <!-- 日期选择器 --> <up-datetime-picker v-model="showDatePicker" mode="date" @confirm="handleDateSelect" @cancel="showDatePicker = false" /> </up-popup> </uni-popup> </template> <script setup> @@ -146,26 +136,16 @@ const emit = defineEmits(['confirm']); // 弹窗显示状态 const show = ref(false); const popupRef = ref(); const submitting = ref(false); // 选择器显示状态 const showUserPicker = ref(false); const showDatePicker = ref(false); // 用户列表 const userList = ref([]); const userColumns = computed(() => [ userList.value.map(user => ({ label: user.nickName, const userColumns = computed(() => { return userList.value.map(user => ({ text: user.nickName, value: user.userId })) ]); // 选中的用户名称(用于显示) const selectedUserName = computed(() => { const user = userList.value.find(u => u.userId === form.schedulingUserId); return user ? user.nickName : ''; }); // 表单数据 @@ -182,15 +162,15 @@ // 表单验证规则 const rules = reactive({ schedulingNum: [ { required: true, message: "请输入排产数量", trigger: "blur" } ], schedulingUserId: [ { required: true, message: "请选择派工人", trigger: "change" } ], schedulingDate: [ { required: true, message: "请选择派工日期", trigger: "change" } ] // schedulingNum: [ // { required: true, message: "请输入排产数量", trigger: "blur" } // ], // schedulingUserId: [ // { required: true, message: "请选择派工人", trigger: "change" } // ], // schedulingDate: [ // { required: true, message: "请选择派工日期", trigger: "change" } // ] }); // 表单引用 @@ -210,9 +190,9 @@ schedulingUserId: userStore.id, schedulingDate: dayjs().format("YYYY-MM-DD") }); show.value = true; popupRef.value.open() } catch (error) { console.log(error) uni.showToast({ title: '加载用户列表失败', icon: 'error' @@ -231,29 +211,30 @@ } }; // 处理用户选择 const handleUserSelect = (params) => { if (params.value && params.value.length > 0) { form.schedulingUserId = params.value[0]; } showUserPicker.value = false; }; // 处理日期选择 const handleDateSelect = (params) => { if (params.value) { form.schedulingDate = dayjs(params.value).format("YYYY-MM-DD"); } showDatePicker.value = false; }; // 确认派工 const handleConfirm = async () => { if(!form.schedulingNum){ uni.showToast({ title: '请输入排产数量', icon:'none' }) return } if(!form.schedulingUserId){ uni.showToast({ title: '请选择派工人', icon:'none' }) return } if(!form.schedulingDate){ uni.showToast({ title: '请选择派工日期', icon:'none' }) return } try { // 表单验证 const valid = await formRef.value?.validate(); if (!valid) return; if (form.schedulingNum <= 0) { uni.showToast({ title: '排产数量必须大于0', @@ -292,10 +273,7 @@ // 关闭弹窗 const handleClose = () => { show.value = false; showUserPicker.value = false; showDatePicker.value = false; popupRef.value.close() // 重置表单 Object.assign(form, { projectName: "", @@ -353,6 +331,24 @@ flex: 1; padding: 0 20px; overflow-y: auto; .datetime-picker-value{ font-size: 14px; border: 1px solid #e5e5e5; box-sizing: border-box; border-radius: 4px; padding: 0 5px; padding-left: 10px; position: relative; display: flex; -webkit-user-select: none; -moz-user-select: none; user-select: none; flex-direction: row; align-items: center; width: 100%; flex: 1; height: 35px; } } .form-section { src/pages/productionManagement/productionDispatching/components/autoDispatchDia.vue
@@ -34,12 +34,12 @@ </view> <view class="info-row"> <text class="info-label">客户:</text> <text class="info-label">客户名称:</text> <text class="info-value">{{ item.customerName }}</text> </view> <view class="info-row"> <text class="info-label">产品类别:</text> <text class="info-label">产品大类:</text> <text class="info-value">{{ item.productCategory }}</text> </view> src/pages/productionManagement/productionDispatching/index.vue
@@ -142,18 +142,18 @@ </view> <view class="item-details"> <view class="detail-row"> <!-- <view class="detail-row"> <text class="detail-label">客户合同号</text> <text class="detail-value">{{ item.customerContractNo }}</text> </view> </view> --> <view class="detail-row"> <text class="detail-label">客户名称</text> <text class="detail-value">{{ item.customerName }}</text> </view> <view class="detail-row"> <!-- <view class="detail-row"> <text class="detail-label">项目名称</text> <text class="detail-value">{{ item.projectName }}</text> </view> </view> --> <view class="detail-row"> <text class="detail-label">产品大类</text> <text class="detail-value">{{ item.productCategory }}</text> @@ -171,7 +171,11 @@ <text class="detail-value">{{ item.unit }}</text> </view> <view class="detail-row"> <text class="detail-label">总数量</text> <text class="detail-label">录入日期</text> <text class="detail-value">{{ item.entryDate }}</text> </view> <view class="detail-row"> <text class="detail-label">数量</text> <text class="detail-value">{{ item.quantity }}</text> </view> <view class="detail-row"> src/pages/productionManagement/productionOrder/index.vue
@@ -40,17 +40,29 @@ <text class="detail-label">录入日期</text> <text class="detail-value">{{ item.entryDate }}</text> </view> <view class="detail-row"> <!-- <view class="detail-row"> <text class="detail-label">客户合同号</text> <text class="detail-value">{{ item.customerContractNo }}</text> </view> </view> --> <view class="detail-row"> <text class="detail-label">客户名称</text> <text class="detail-value">{{ item.customerName }}</text> </view> <view class="detail-row"> <!-- <view class="detail-row"> <text class="detail-label">项目名称</text> <text class="detail-value">{{ item.projectName }}</text> </view> --> <view class="detail-row"> <text class="detail-label">付款状态</text> <view v-if="item.status=='已完成'" class="detail-value"> <uni-tag :inverted="true" text="已完成" type="success" size="mini" /> </view> <view v-else-if="item.status=='未完成'" class="detail-value"> <uni-tag :inverted="true" text="未完成" type="error" size="mini" /> </view> <view v-else class="detail-value"> <uni-tag :inverted="true" :text="item.status" type="primary" size="mini" /> </view> </view> <view class="detail-row"> <text class="detail-label">产品大类</text> @@ -145,7 +157,6 @@ schedulingListPage(params).then((res) => { loading.value = false; closeToast(); tableData.value = res.data.records || []; }).catch(() => { loading.value = false; src/pages/productionManagement/productionReporting/index.vue
@@ -8,13 +8,11 @@ <u-form-item label="客户名称" label-width="80"> <up-input v-model="searchForm.customerName" placeholder="请输入" clearable @change="handleQuery" /> </u-form-item> <u-form-item label="项目名称" label-width="80"> <up-input v-model="searchForm.projectName" placeholder="请输入" clearable @change="handleQuery" /> </u-form-item> </view> <view class="form-row"> <u-form-item label="状态" label-width="80"> <up-input v-model="statusDisplay" placeholder="请选择状态" readonly @click="showStatusPicker = true" /> <u-form-item label="状态" label-width="80" style="flex:1"> <uni-data-select v-model="searchForm.status" :localdata="statusList"></uni-data-select> <!-- <up-input v-model="statusDisplay" placeholder="请选择状态" readonly @click="showStatusPicker = true" /> --> </u-form-item> </view> <view class="form-actions"> @@ -37,7 +35,7 @@ <view class="row"><text class="label">排产日期</text><text class="value">{{ item.schedulingDate }}</text></view> <view class="row"><text class="label">排产人</text><text class="value">{{ item.schedulingUserName }}</text></view> <view class="row"><text class="label">合同号</text><text class="value">{{ item.salesContractNo }}</text></view> <view class="row"><text class="label">客户合同号</text><text class="value">{{ item.customerContractNo }}</text></view> <!-- <view class="row"><text class="label">客户合同号</text><text class="value">{{ item.customerContractNo }}</text></view> --> <view class="row"><text class="label">客户名称</text><text class="value">{{ item.customerName }}</text></view> <view class="row"><text class="label">产品大类</text><text class="value">{{ item.productCategory }}</text></view> <view class="row"><text class="label">规格型号</text><text class="value">{{ item.specificationModel }}</text></view> @@ -70,6 +68,18 @@ import PageHeader from '@/components/PageHeader.vue' import FormDia from './components/formDia.vue' import { workListPage } from "@/api/productionManagement/productionReporting.js"; const statusList = reactive([{ text:'待生产', value: 1 },{ text:'排产中', value: 2 },{ text:'生产中', value: 3 }]) const data = reactive({ searchForm: { customerName: "",