From 7bb4635dff502d78ff82768c1e6f68e88b2c291b Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期五, 29 八月 2025 16:10:57 +0800
Subject: [PATCH] 排产计划生成页面增加物料、计划生产数量筛选输入框;修复日历组件展示超出错位问题

---
 /dev/null                                                     |  566 -----------------------------------------------
 src/views/mes/modules/MesProductionWorkOrderScheduleModal.vue |  122 ++++++++-
 src/views/mes/modules/MesProductionWeekCalendar.vue           |   15 +
 3 files changed, 116 insertions(+), 587 deletions(-)

diff --git a/src/views/mes/MesProductionWorkOrderList.vue b/src/views/mes/MesProductionWorkOrderList.vue
deleted file mode 100644
index 2e2d49d..0000000
--- a/src/views/mes/MesProductionWorkOrderList.vue
+++ /dev/null
@@ -1,566 +0,0 @@
-<template>
-  <a-row :gutter="{ xs: 4, sm: 8, md: 16}">
-    <a-col :span="12">
-      <a-card :bordered="false">
-        <!-- 鏌ヨ鍖哄煙 -->
-        <div class="table-page-search-wrapper">
-          <a-form layout="inline" @keyup.enter.native="searchQuery">
-            <a-row :gutter="24">
-              <a-col :span="12">
-                <a-form-item label="浜х嚎">
-                  <j-tree-select dict="base_factory,factory_name,id" pid-field="parent_id"
-                                 v-model="queryParam.factoryId"></j-tree-select>
-                </a-form-item>
-              </a-col>
-              <a-col :span="12">
-                <a-form-item label="璧锋鏃ユ湡">
-                  <a-range-picker
-                    style="width: 100%"
-                    @change="dateRangeChange"
-                    :value="dateRange"
-                    :disabledDate="disabledDate"
-                    @openChange="onOpenChange"
-                  />
-                </a-form-item>
-              </a-col>
-              <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
-              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              <a-button type="primary" @click="productionSchedule" icon="retweet"
-                        style="margin-left: 8px">鎺掍骇</a-button>
-            </span>
-              </a-col>
-            </a-row>
-          </a-form>
-        </div>
-
-        <div class="table-operator">
-          <a-dropdown v-if="selectedRowKeys.length > 0">
-            <a-menu slot="overlay">
-              <a-menu-item key="1" @click="batchDel">
-                <a-icon type="delete" />
-                鍒犻櫎
-              </a-menu-item>
-            </a-menu>
-            <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
-              <a-icon type="down" />
-            </a-button>
-          </a-dropdown>
-        </div>
-        <div>
-          <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-            <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a
-            style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
-            <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
-          </div>
-
-          <a-table
-            ref="table"
-            size="middle"
-            :scroll="{x:true}"
-            bordered
-            rowKey="id"
-            :columns="columns"
-            :dataSource="dataSource"
-            :pagination="ipagination"
-            :loading="loading"
-            :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-            class="j-table-force-nowrap"
-            @change="handleTableChange">
-
-            <template slot="htmlSlot" slot-scope="text">
-              <div v-html="text"></div>
-            </template>
-            <template slot="imgSlot" slot-scope="text,record">
-              <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>
-              <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt=""
-                   style="max-width:80px;font-size: 12px;font-style: italic;" />
-            </template>
-            <template slot="fileSlot" slot-scope="text">
-              <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
-              <a-button
-                v-else
-                :ghost="true"
-                type="primary"
-                icon="download"
-                size="small"
-                @click="downloadFile(text)">
-                涓嬭浇
-              </a-button>
-            </template>
-
-            <span slot="action" slot-scope="text, record">
-              <span v-if="record.workOrderStatus === 'NEW'">
-                <a-popconfirm title="纭畾鍙戝竷鍚�?" @confirm="() => handlePublish(record.id)">
-                  <a>鍙戝竷</a>
-                </a-popconfirm>
-                <a-divider type="vertical" />
-              </span>
-              <span v-if="record.workOrderStatus === 'PUBLISHED'">
-                <a @click="handleRePublish(record)">閲嶅彂甯�</a>
-                <a-divider type="vertical" />
-              </span>
-              <span>
-                <a-dropdown v-if="record.workOrderStatus === 'NEW'">
-                  <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-                    <a-menu slot="overlay">
-                    <a-menu-item>
-                      <a @click="handleDetail(record)">璇︽儏</a>
-                    </a-menu-item>
-                    <a-menu-item>
-                      <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
-                        <a>鍒犻櫎</a>
-                      </a-popconfirm>
-                    </a-menu-item>
-                    </a-menu>
-                </a-dropdown>
-              </span>
-              <span v-if="record.workOrderStatus !== 'NEW'">
-                <a @click="handleDetail(record)">璇︽儏</a>
-              </span>
-        </span>
-          </a-table>
-        </div>
-
-        <mes-production-work-order-list-modal ref="modal" @ok="modalFormOk"></mes-production-work-order-list-modal>
-        <mes-production-work-order-modal ref="modalForm"></mes-production-work-order-modal>
-        <mes-production-work-order-republish-modal ref="republishModal" @ok="modalFormOk"></mes-production-work-order-republish-modal>
-      </a-card>
-    </a-col>
-    <a-col :span="12">
-      <a-card>
-        <MesProductionWeekCalendar
-          ref="weekCalendar"
-          :start-date="calendarStartDate"
-          @select="onDateSelect"
-          @change="onCalendarChange"
-        >
-          <!-- 浣跨敤鎻掓Ы鑷畾涔夋棩鏈熷崟鍏冩牸鍐呭 -->
-          <template #dateCell="{ date, isSelected, isToday }">
-            <div class="custom-date-content">
-              <!-- 绀轰緥锛氬湪鏃ユ湡鍗曞厓鏍间腑鏄剧ず宸ュ崟淇℃伅 -->
-              <div
-                v-for="workOrder in getWorkOrdersForDate(date)"
-                :key="workOrder.id"
-                class="work-order-item"
-                :class="{ 'urgent': isUrgent(workOrder) }"
-              >
-                <span class="work-order-shift">{{ workOrder.groupName }}</span>
-                <span class="work-order-material">{{ workOrder.materialName }}</span>
-                <span class="work-order-quantity">{{ workOrder.planQuantity }}</span>
-              </div>
-            </div>
-          </template>
-        </MesProductionWeekCalendar>
-      </a-card>
-    </a-col>
-  </a-row>
-</template>
-
-<script>
-
-import '@/assets/less/TableExpand.less'
-import { mixinDevice } from '@/utils/mixin'
-import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-import MesProductionWorkOrderModal from './modules/MesProductionWorkOrderModal'
-import MesProductionWeekCalendar from '@views/mes/modules/MesProductionWeekCalendar.vue'
-import MesProductionWorkOrderListModal from '@views/mes/modules/MesProductionWorkOrderListModal.vue'
-import MesProductionWorkOrderRepublishModal from '@views/mes/modules/MesProductionWorkOrderRepublishModal.vue'
-import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
-import moment from 'moment'
-import { getAction, postAction, requestPut } from '@api/manage'
-
-export default {
-  name: 'MesProductionWorkOrderList',
-  mixins: [JeecgListMixin, mixinDevice],
-  components: {
-    MesProductionWorkOrderModal,
-    MesProductionWeekCalendar,
-    MesProductionWorkOrderListModal,
-    MesProductionWorkOrderRepublishModal
-  },
-  data() {
-    return {
-      description: '鎺掍骇宸ュ崟绠$悊椤甸潰',
-      // 琛ㄥご
-      columns: [
-        {
-          title: '#',
-          dataIndex: '',
-          key: 'rowIndex',
-          width: 60,
-          align: 'center',
-          customRender: function(t, r, index) {
-            return parseInt(index) + 1
-          }
-        },
-        {
-          title: '宸ュ崟鍙�(浠诲姟鍙�)',
-          align: 'center',
-          dataIndex: 'workOrderCode'
-        },
-        {
-          title: '鐗╂枡缂栫爜',
-          align: 'center',
-          dataIndex: 'materialNumber'
-        },
-        {
-          title: '鐗╂枡鍚嶇О',
-          align: 'center',
-          dataIndex: 'materialName'
-        },
-        {
-          title: '璁″垝鐢熶骇鏁伴噺',
-          align: 'center',
-          dataIndex: 'planQuantity'
-        },
-        {
-          title: '浜х嚎',
-          align: 'center',
-          dataIndex: 'factoryId_dictText'
-        },
-        {
-          title: '鐝粍',
-          align: 'center',
-          dataIndex: 'groupId_dictText'
-        },
-        {
-          title: '鐝',
-          align: 'center',
-          dataIndex: 'shiftId_dictText'
-        },
-        {
-          title: '鎺掍骇鏃ユ湡',
-          align: 'center',
-          dataIndex: 'workOrderDate'
-        },
-        {
-          title: '宸ュ崟鐘舵��',
-          align: 'center',
-          dataIndex: 'workOrderStatus_dictText'
-        },
-        {
-          title: '瀹為檯鎶ュ伐鏁伴噺',
-          align: 'center',
-          dataIndex: 'actualQuantity'
-        },
-        {
-          title: '鍙戝竷浜�',
-          align: 'center',
-          dataIndex: 'publisher'
-        },
-        {
-          title: '鍙戝竷鏃堕棿',
-          align: 'center',
-          dataIndex: 'publishTime'
-        },
-        {
-          title: '閲嶅彂甯冧汉',
-          align: 'center',
-          dataIndex: 'republisher'
-        },
-        {
-          title: '閲嶅彂甯冩椂闂�',
-          align: 'center',
-          dataIndex: 'republishTime'
-        },
-        {
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          align: 'center',
-          fixed: 'right',
-          width: 147,
-          scopedSlots: { customRender: 'action' }
-        }
-      ],
-      url: {
-        list: '/mes/mesProductionWorkOrder/list',
-        delete: '/mes/mesProductionWorkOrder/delete',
-        deleteBatch: '/mes/mesProductionWorkOrder/deleteBatch',
-        exportXlsUrl: '/mes/mesProductionWorkOrder/exportXls',
-        importExcelUrl: 'mes/mesProductionWorkOrder/importExcel',
-        listProductionLinesOption: '/base/factory/queryIdTree',
-        schedule: '/mes/mesProductionWorkOrder/schedule',
-        publish: '/mes/mesProductionWorkOrder/publish'
-      },
-      dictOptions: {},
-      superFieldList: [],
-      // 鐢ㄤ簬婕旂ず鐨勫伐鍗曟暟鎹�
-      workOrdersByDate: {},
-      // 鏃ュ巻璧峰鏃ユ湡
-      calendarStartDate: moment(),
-      productionLineData: [],
-      dateRange: [],
-      tempStartDate: null, // 涓存椂瀛樺偍寮�濮嬫棩鏈�
-      hoveredDate: null,    // 瀛樺偍榧犳爣鎮仠鐨勬棩鏈�
-    }
-  },
-  created() {
-    this.getSuperFieldList()
-    this.initDictConfig()
-  },
-  computed: {
-    importExcelUrl: function() {
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
-    }
-  },
-  methods: {
-    modalFormOk() {
-      this.onClearSelected()
-      this.loadData(1).then(() => {
-        if (this.queryParam.factoryId) {
-          // 鍚屾椂鏇存柊鏃ュ巻涓殑宸ュ崟鏁版嵁
-          this.updateCalendarWorkOrders()
-        }
-      }).catch(error => {
-        console.error('鏁版嵁鍔犺浇澶辫触:', error)
-      })
-    },
-    loadData(arg) {
-      return new Promise((resolve, reject) => {
-        if (!this.url.list) {
-          this.$message.error("璇疯缃畊rl.list灞炴��!")
-          reject(new Error("璇疯缃畊rl.list灞炴��!"))
-          return
-        }
-        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-        if (arg === 1) {
-          this.ipagination.current = 1;
-        }
-        var params = this.getQueryParams();//鏌ヨ鏉′欢
-        console.log('params', params)
-        if (!params) {
-          reject(new Error("鏌ヨ鍙傛暟鏃犳晥"))
-          return false;
-        }
-        this.loading = true;
-        getAction(this.url.list, params).then((res) => {
-          if (res.success) {
-            // console.log(res)
-            //update-begin---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
-            this.dataSource = res.result.records || res.result;
-            if (res.result.total) {
-              this.ipagination.total = res.result.total;
-            } else {
-              this.ipagination.total = 0;
-            }
-            //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
-            resolve(res)
-          } else {
-            this.$message.warning(res.message)
-            reject(new Error(res.message))
-          }
-        }).catch(error => {
-          reject(error)
-        }).finally(() => {
-          this.loading = false
-        })
-      })
-    },
-    searchQuery() {
-      this.queryParam = Object.assign(this.queryParam, this.dateRange)
-      this.loadData(1).then(() => {
-        if (this.queryParam.factoryId) {
-          // 鍚屾椂鏇存柊鏃ュ巻涓殑宸ュ崟鏁版嵁
-          this.updateCalendarWorkOrders()
-        }
-      }).catch(error => {
-        console.error('鏁版嵁鍔犺浇澶辫触:', error)
-      })
-    },
-    searchReset() {
-      this.queryParam = {}
-      this.dateRange = []
-      this.workOrdersByDate = {}
-      this.loadData(1);
-    },
-    handlePublish(id) {
-      requestPut(this.url.publish, null, { ids: id }).then(res => {
-        if (res.success) {
-          this.$message.success(res.message)
-          this.loadData(1).then(() => {
-            if (this.queryParam.factoryId) {
-              // 鍚屾椂鏇存柊鏃ュ巻涓殑宸ュ崟鏁版嵁
-              this.updateCalendarWorkOrders()
-            }
-          }).catch(error => {
-            console.error('鏁版嵁鍔犺浇澶辫触:', error)
-          })
-        } else {
-          this.$message.warning(res.message)
-        }
-      })
-    },
-    handleRePublish(record) {
-      this.$refs.republishModal.add(record)
-    },
-    initDictConfig() {
-      getAction(this.url.listProductionLinesOption, null).then(res => {
-        if (res.success) {
-          this.productionLineData = res.result
-        }
-      })
-    },
-    getSuperFieldList() {
-      let fieldList = []
-      fieldList.push({ type: 'int', value: 'delFlag', text: '鍒犻櫎鏍囪', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'workOrderCode', text: '宸ュ崟鍙�(浠诲姟鍙�)', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'materialNumber', text: '鐗╂枡缂栫爜', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'materialName', text: '鐗╂枡鍚嶇О', dictCode: '' })
-      fieldList.push({ type: 'double', value: 'planQuantity', text: '璁″垝鐢熶骇鏁伴噺', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'factoryId', text: '浜х嚎ID(鍐椾綑)', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'groupId', text: '鐝粍ID', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'shiftId', text: '鐝ID(鍐椾綑)', dictCode: '' })
-      fieldList.push({ type: 'datetime', value: 'workOrderDate', text: '鎺掍骇鏃ユ湡' })
-      fieldList.push({ type: 'string', value: 'workOrderStatus', text: '宸ュ崟鐘舵��', dictCode: 'work_order_status' })
-      fieldList.push({ type: 'double', value: 'actualQuantity', text: '瀹為檯鎶ュ伐鏁伴噺', dictCode: '' })
-      fieldList.push({ type: 'string', value: 'publisher', text: '鍙戝竷浜�', dictCode: '' })
-      fieldList.push({ type: 'datetime', value: 'publishTime', text: '鍙戝竷鏃堕棿' })
-      fieldList.push({ type: 'string', value: 'republisher', text: '閲嶅彂甯冧汉', dictCode: '' })
-      fieldList.push({ type: 'datetime', value: 'republishTime', text: '閲嶅彂甯冩椂闂�' })
-      this.superFieldList = fieldList
-    },
-    productionSchedule() {
-      if (!this.queryParam.factoryId || this.dateRange.length === 0) {
-        this.$message.warning('璇烽�夋嫨浜х嚎鍙婃帓浜ф棩鏈熻寖鍥达紒')
-        return
-      }
-      getAction(this.url.schedule, {
-        factoryId: this.queryParam.factoryId,
-        startDate: this.dateRange[0].format('YYYY-MM-DD'),
-        endDate: this.dateRange[1].format('YYYY-MM-DD')
-      }).then(res => {
-        if (res.success) {
-          this.$refs.modal.edit(res.result, this.dateRange)
-        }
-      })
-    },
-    onOpenChange(open) {
-      if (!open) {
-        // 鍏抽棴閫夋嫨鍣ㄦ椂閲嶇疆鐘舵��
-        this.tempStartDate = null
-        this.hoveredDate = null
-      }
-    },
-    disabledDate(current) {
-      // 濡傛灉鏈変复鏃跺紑濮嬫棩鏈燂紝鍒欓檺鍒剁粨鏉熸棩鏈熻寖鍥�
-      if (this.tempStartDate) {
-        const startDate = this.tempStartDate.clone().startOf('day')
-        const maxDate = startDate.clone().add(6, 'days').endOf('day') // 7澶╁寘鎷捣濮嬫棩
-        const minDate = startDate.clone().subtract(6, 'days').startOf('day') // 涔熷彲浠ュ悜鍓嶉��6澶�
-        // 绂佺敤瓒呭嚭7澶╄寖鍥寸殑鏃ユ湡
-        return current && (current < minDate || current > maxDate)
-      }
-      // 榛樿涓嶇鐢�
-      return false
-    },
-    dateRangeChange(dates, dateStrings) {
-      this.dateRange = dates
-      if (dates && dates.length > 0) {
-        if (dates.length === 1) {
-          // 閫夋嫨浜嗗紑濮嬫棩鏈燂紝淇濆瓨鍒颁复鏃跺彉閲�
-          this.tempStartDate = dates[0]
-          this.hoveredDate = dates[0]
-        } else if (dates.length === 2) {
-          // 閫夋嫨浜嗙粨鏉熸棩鏈燂紝楠岃瘉鑼冨洿
-          const startDate = dates[0]
-          const endDate = dates[1]
-          const diffDays = endDate.diff(startDate, 'days') + 1
-
-          if (diffDays > 7) {
-            this.$message.warning('鏃ユ湡鑼冨洿涓嶈兘瓒呰繃7澶�')
-            // 鑷姩璋冩暣涓�7澶╄寖鍥�
-            const adjustedEndDate = startDate.clone().add(6, 'days')
-            this.dateRange = [startDate, adjustedEndDate]
-            this.queryParam.startDate = startDate.format('YYYY-MM-DD')
-            this.queryParam.endDate = adjustedEndDate.format('YYYY-MM-DD')
-          } else {
-            this.queryParam.startDate = dateStrings[0]
-            this.queryParam.endDate = dateStrings[1]
-          }
-          // 閲嶇疆涓存椂鐘舵��
-          this.tempStartDate = null
-          this.hoveredDate = null
-        }
-      } else {
-        // 娓呴櫎浜嗛�夋嫨
-        this.queryParam.startDate = null
-        this.queryParam.endDate = null
-        this.tempStartDate = null
-        this.hoveredDate = null
-      }
-    },
-    // 澶勭悊鏃ユ湡閫夋嫨浜嬩欢
-    onDateSelect(date) {
-      console.log('Selected date:', date.format('YYYY-MM-DD'))
-    },
-    // 澶勭悊鏃ュ巻鍛ㄥ彉鍖栦簨浠�
-    onCalendarChange(date) {
-      console.log('Calendar week changed:', date.format('YYYY-MM-DD'))
-    },
-    // 鏇存柊鏃ュ巻涓殑宸ュ崟鏁版嵁
-    updateCalendarWorkOrders() {
-      // 灏嗗綋鍓嶈〃鏍兼暟鎹寜鏃ユ湡鍒嗙粍鏄剧ず鍦ㄦ棩鍘嗕腑
-      const workOrdersByDate = {}
-      this.dataSource.filter(workOrder => workOrder.workOrderStatus !== 'NEW').forEach(workOrder => {
-        const workOrderDate = workOrder.workOrderDate
-        if (workOrderDate) {
-          if (!workOrdersByDate[workOrderDate]) {
-            workOrdersByDate[workOrderDate] = []
-          }
-          workOrdersByDate[workOrderDate].push({
-            id: workOrder.id,
-            groupName: workOrder.groupId_dictText || '',
-            materialName: workOrder.materialName || '',
-            planQuantity: workOrder.planQuantity || 0
-          })
-        }
-      })
-      this.workOrdersByDate = workOrdersByDate
-    },
-    // 鑾峰彇鎸囧畾鏃ユ湡鐨勫伐鍗�
-    getWorkOrdersForDate(date) {
-      const dateStr = date.format('YYYY-MM-DD')
-      console.log(dateStr)
-      return this.workOrdersByDate[dateStr] || []
-    },
-    // 鍒ゆ柇宸ュ崟鏄惁绱ф��
-    isUrgent(workOrder) {
-      return workOrder.status === 'urgent'
-    }
-  }
-}
-</script>
-<style scoped>
-@import '~@assets/less/common.less';
-
-.work-order-item {
-  font-size: 12px;
-  padding: 2px 4px;
-  margin-bottom: 2px;
-  background-color: #f0f0f0;
-  border-radius: 2px;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.work-order-item.urgent {
-  background-color: #ffccc7;
-  border-left: 2px solid #ff4d4f;
-}
-
-.work-order-shift {
-  font-weight: bold;
-  margin-right: 4px;
-}
-
-.work-order-material {
-  margin-right: 4px;
-}
-
-.work-order-quantity {
-  float: right;
-}
-</style>
\ No newline at end of file
diff --git a/src/views/mes/modules/MesProductionWeekCalendar.vue b/src/views/mes/modules/MesProductionWeekCalendar.vue
index d902bae..c22eb44 100644
--- a/src/views/mes/modules/MesProductionWeekCalendar.vue
+++ b/src/views/mes/modules/MesProductionWeekCalendar.vue
@@ -44,7 +44,7 @@
           }"
           @click="selectDay(day)"
         >
-          <div class="cell-content">
+          <div class="cell-content" style="height: 100%; overflow: hidden">
             <!-- 鎻掓Ы鐢ㄤ簬娓叉煋鏃ユ湡鍐呭 -->
             <slot
               name="dateCell"
@@ -106,7 +106,7 @@
       // 褰撳墠鏄剧ず鐨勮捣濮嬫棩鏈�
       currentStartDate: this.startDate ? moment(this.startDate) : moment(),
       // 閫変腑鐨勬棩鏈�
-      selectedDate: this.startDate ? moment(this.startDate) : moment()
+      selectedDate: null
     }
   },
   computed: {
@@ -208,6 +208,9 @@
   text-align: center;
   padding: 8px 0;
   border-right: 1px solid #e8e8e8;
+  min-width: 0;
+  flex-basis: 100px;
+  box-sizing: border-box;
 }
 
 .header-cell:last-child {
@@ -255,6 +258,9 @@
   border-right: 1px solid #e8e8e8;
   cursor: pointer;
   padding: 4px;
+  min-width: 0;
+  flex-basis: 100px;
+  box-sizing: border-box;
 }
 
 .day-cell:last-child {
@@ -265,6 +271,11 @@
   background-color: #e6f7ff;
 }
 
+.day-cell.first-day-highlight {
+  background-color: transparent !important;
+  border-left: none !important;
+}
+
 .day-cell.selected {
   background-color: #bae7ff;
 }
diff --git a/src/views/mes/modules/MesProductionWorkOrderScheduleModal.vue b/src/views/mes/modules/MesProductionWorkOrderScheduleModal.vue
index 27a6bbe..6a43c88 100644
--- a/src/views/mes/modules/MesProductionWorkOrderScheduleModal.vue
+++ b/src/views/mes/modules/MesProductionWorkOrderScheduleModal.vue
@@ -17,14 +17,15 @@
           <div class="table-page-search-wrapper">
             <a-form layout="inline" @keyup.enter.native="searchQuery">
               <a-row :gutter="12">
-                <a-col :span="7">
+                <a-col :span="10">
                   <a-form-item label="浜х嚎" :label-col="{span: 6}" :wrapper-col="{span: 18}">
                     <j-search-select-tag placeholder="璇烽�夋嫨" v-model="queryParam.factoryId"
                                          dict="base_factory,factory_name,id,del_flag=0 and factory_category = '3'"
+                                         @change="handleFactoryChange"
                     ></j-search-select-tag>
                   </a-form-item>
                 </a-col>
-                <a-col :span="9">
+                <a-col :span="10">
                   <a-form-item label="鏃ユ湡" :label-col="{span: 4}" :wrapper-col="{span: 20}">
                     <a-range-picker
                       style="width: 100%"
@@ -35,9 +36,24 @@
                     />
                   </a-form-item>
                 </a-col>
-                <a-col :span="8">
+                <a-col :span="4">
                   <span style="float: left;overflow: hidden;white-space: nowrap;" class="table-page-search-submitButtons">
-                    <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+                    <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 8px">鏌ヨ</a-button>
+                  </span>
+                </a-col>
+                <a-col :span="10">
+                  <a-form-item label="鐗╂枡" :label-col="{span: 6}" :wrapper-col="{span: 18}">
+                    <a-select placeholder="璇烽�夋嫨" v-model="queryParam.materialNumber"
+                              :options="materialSelectOptions"></a-select>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="10">
+                  <a-form-item label="璁″垝鐢熶骇鏁伴噺" :label-col="{span: 6}" :wrapper-col="{span: 18}">
+                    <a-input-number :min="1" v-model="queryParam.planQuantity" style="width: 100%" placeholder="璇疯緭鍏ヨ鍒掔敓浜ф暟閲�" />
+                  </a-form-item>
+                </a-col>
+                <a-col :span="4">
+                  <span style="float: left;overflow: hidden;white-space: nowrap;" class="table-page-search-submitButtons">
                     <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
                   </span>
                 </a-col>
@@ -173,16 +189,33 @@
             @change="onCalendarChange"
           >
             <template #dateCell="{ date, isSelected, isToday }">
-              <div class="custom-date-content">
+              <div class="custom-date-content" style="overflow: hidden; max-height: 120px;">
                 <div
                   v-for="(workOrder, index) in getWorkOrdersForDate(date)"
                   :key="workOrder.id"
                   class="work-order-item"
-                  :class="getColorClass(index)"
+                  :class="getColorClass(index)" style="
+                    display: flex;
+                    flex-direction: column;
+                    align-items: flex-start;
+                    overflow: hidden;
+                    padding: 2px 4px;
+                    margin-bottom: 2px;
+                    background-color: #f0f0f0;
+                    border-radius: 2px;
+                    max-width: 100%;
+                    box-sizing: border-box;
+                    width: 100%;
+                    word-break: break-all;
+                  "
                 >
-                  <span class="work-order-shift">{{ workOrder.shiftCode }}</span>
-                  <span class="work-order-material">{{ workOrder.materialName }}</span>
-                  <span class="work-order-quantity">{{ workOrder.planQuantity }}</span>
+                  <div class="work-order-shift-quantity">
+                    <span class="work-order-shift">{{ workOrder.shiftCode }}</span>
+                    <span class="work-order-quantity">{{ workOrder.planQuantity }}</span>
+                  </div>
+                  <div class="work-order-material" :title="workOrder.materialName">
+                    {{ workOrder.materialName }}
+                  </div>
                 </div>
               </div>
             </template>
@@ -223,6 +256,7 @@
       materialOptions: [],
       materNumberNameMap: {},
       workOrderDateOptions: [],
+      materialSelectOptions: [],
       selectedRowKeys: [],
       selectionRows: [],
       /* 鍒嗛〉鍙傛暟 */
@@ -302,6 +336,21 @@
     close() {
       this.$emit('close')
       this.visible = false
+    },
+    handleFactoryChange(value) {
+      this.materialSelectOptions = []
+      if (value) {
+        getAction(this.url.queryLswMaterialByProductionType, { factoryId: value }).then(res => {
+          if (res.success) {
+            this.materialSelectOptions = res.result.map(item => {
+              return {
+                value: item.materialNumber,
+                label: item.materialName
+              }
+            })
+          }
+        })
+      }
     },
     handleOk() {
       // 琛ㄦ牸鍏ㄨ〃鏍¢獙
@@ -513,7 +562,9 @@
       getAction(this.url.schedule, {
         factoryId: this.queryParam.factoryId,
         startDate: this.dateRange[0].format('YYYY-MM-DD'),
-        endDate: this.dateRange[1].format('YYYY-MM-DD')
+        endDate: this.dateRange[1].format('YYYY-MM-DD'),
+        materialNumber: this.queryParam.materialNumber,
+        planQuantity: this.queryParam.planQuantity
       }).then(res => {
         if (res.success) {
           const record = res.result
@@ -602,11 +653,15 @@
       } else {
         factoryCode = this.dataSource[0].factoryCode
       }
+      let material
+      if (this.queryParam.materialNumber) {
+        material = this.materialSelectOptions.find(item => item.value === this.queryParam.materialNumber)
+      }
       // 鍒涘缓鏂拌鏁版嵁
       const newRow = {
         workOrderCode: factoryCode,
-        materialNumber: '',
-        materialName: '',
+        materialNumber: this.dataSource.length > 0 ? this.dataSource[0].materialNumber : this.queryParam.materialNumber ? this.queryParam.materialNumber : '',
+        materialName: this.dataSource.length > 0 ? this.dataSource[0].materialName : this.queryParam.materialNumber ? material.label : '',
         factoryId: this.dataSource.length > 0 ? this.dataSource[0].factoryId : this.queryParam.factoryId,
         factoryCode: factoryCode,
         groupId: '',
@@ -614,13 +669,14 @@
         shiftCode: '',
         shiftName: '',
         workOrderDate: '',
-        planQuantity: ''
+        planQuantity: this.dataSource.length > 0 ? this.dataSource[0].planQuantity : this.queryParam.planQuantity ? this.queryParam.planQuantity : '',
       }
       this.initDictSelectOptions(null).then(() => {
         // 鏍规嵁鏃ユ湡鑼冨洿鐢熸垚鎺掍骇鏃ユ湡閫夐」
         if (this.dateRange && this.dateRange.length === 2) {
           this.workOrderDateOptions = this.generateDateRangeOptions(this.dateRange[0], this.dateRange[1]);
         }
+        this.updateWorkOrderCode(newRow)
         this.dataSource.push(newRow)
         this.pagination.total += 1
         // 婵�娲绘柊澧炵殑琛岃繘鍏ョ紪杈戠姸鎬�
@@ -715,7 +771,7 @@
     onDateSelect(date) {
       console.log('Selected date:', date.format('YYYY-MM-DD'))
       // 鏇存柊鏃ュ巻鏄剧ず涓洪�変腑鏃ユ湡鎵�鍦ㄥ懆
-      this.calendarStartDate = date.clone().startOf('week');
+      // this.calendarStartDate = date.clone().startOf('week');
     },
 
     // 澶勭悊鏃ュ巻鍛ㄥ彉鍖栦簨浠�
@@ -759,6 +815,13 @@
   color: #999;
 }
 
+.custom-date-content {
+  overflow: hidden;
+  max-height: 120px;
+  padding: 4px 0;
+  box-sizing: border-box;
+}
+
 .work-order-item {
   font-size: 12px;
   padding: 2px 4px;
@@ -768,6 +831,9 @@
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
+  max-width: 100%;
+  box-sizing: border-box;
+  width: 100%;
 }
 
 .work-order-item.blue-item {
@@ -780,16 +846,34 @@
   border-left: 2px solid #f5222d;
 }
 
+.work-order-shift-quantity {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  width: 100%;
+  margin-bottom: 2px;
+}
+
 .work-order-shift {
   font-weight: bold;
   margin-right: 4px;
-}
-
-.work-order-material {
-  margin-right: 4px;
+  flex-shrink: 0;
 }
 
 .work-order-quantity {
-  float: right;
+  color: #666;
+  flex-shrink: 0;
+  min-width: 30px;
+  text-align: right;
+}
+
+.work-order-material {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  width: 100%;
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3