d4ff7b02a48b24aa419b2ff8be009143cee04691..8845ac3d32217b6cf765934dc29dffe0065232d8
5 天以前 周宾
海川开心-修改生产管控
8845ac 对比 | 目录
5 天以前 周宾
海川开心-修改生产管控-生产派工
20215f 对比 | 目录
5 天以前 周宾
海川开心-修改生产管控-生产订单
ad1130 对比 | 目录
已修改8个文件
333 ■■■■■ 文件已修改
src/pages/inspectionUpload/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/operationScheduling/components/formDia.vue 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/operationScheduling/index.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/productionDispatching/components/DispatchModal.vue 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/productionDispatching/components/autoDispatchDia.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/productionDispatching/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/productionOrder/index.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/productionManagement/productionReporting/index.vue 22 ●●●● 补丁 | 查看 | 原始文档 | 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: "",