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