From bd89204dcacc9ba0948295a441cd939953b581dd Mon Sep 17 00:00:00 2001
From: lixiangyu <lixiangyu@xalxzn.com>
Date: 星期四, 07 八月 2025 18:05:21 +0800
Subject: [PATCH] style(UserMenu): 调整搜索框文字颜色以适应主题- 将搜索框输入文字颜色设置为白色 - 将搜索框占位符文字颜色设置为白色 - 这些更改解决google浏览器中了无法看到搜索框输入文字

---
 src/views/mes/MesProductionWorkOrderList.vue |  776 +++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 543 insertions(+), 233 deletions(-)

diff --git a/src/views/mes/MesProductionWorkOrderList.vue b/src/views/mes/MesProductionWorkOrderList.vue
index 46029a3..8d1fe7d 100644
--- a/src/views/mes/MesProductionWorkOrderList.vue
+++ b/src/views/mes/MesProductionWorkOrderList.vue
@@ -1,256 +1,566 @@
 <template>
-  <a-card :bordered="false">
-    <!-- 鏌ヨ鍖哄煙 -->
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline" @keyup.enter.native="searchQuery">
-        <a-row :gutter="24">
-        </a-row>
-      </a-form>
-    </div>
-    <!-- 鏌ヨ鍖哄煙-END -->
+  <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-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
-      <a-button type="primary" icon="download" @click="handleExportXls('鎺掍骇宸ュ崟')">瀵煎嚭</a-button>
-      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
-        <a-button type="primary" icon="import">瀵煎叆</a-button>
-      </a-upload>
-      <!-- 楂樼骇鏌ヨ鍖哄煙 -->
-      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
-      <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>
-
-    <!-- table鍖哄煙-begin -->
-    <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">
-          <a @click="handleEdit(record)">缂栬緫</a>
-
-          <a-divider type="vertical" />
-          <a-dropdown>
-            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+        <div class="table-operator">
+          <a-dropdown v-if="selectedRowKeys.length > 0">
             <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 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>
 
-      </a-table>
-    </div>
-
-    <mes-production-work-order-modal ref="modalForm" @ok="modalFormOk"></mes-production-work-order-modal>
-  </a-card>
+        <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 {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
+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
-    },
-    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: 'delFlag'
-          },
-          {
-            title:'宸ュ崟鍙�(浠诲姟鍙�)',
-            align:"center",
-            dataIndex: 'workOrderCode'
-          },
-          {
-            title:'鐗╂枡缂栫爜',
-            align:"center",
-            dataIndex: 'materialNumber'
-          },
-          {
-            title:'鐗╂枡鍚嶇О',
-            align:"center",
-            dataIndex: 'materialName'
-          },
-          {
-            title:'璁″垝鐢熶骇鏁伴噺',
-            align:"center",
-            dataIndex: 'planQuantity'
-          },
-          {
-            title:'浜х嚎ID(鍐椾綑)',
-            align:"center",
-            dataIndex: 'factoryId'
-          },
-          {
-            title:'鐝粍ID',
-            align:"center",
-            dataIndex: 'groupId'
-          },
-          {
-            title:'鐝ID(鍐椾綑)',
-            align:"center",
-            dataIndex: 'shiftId'
-          },
-          {
-            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' }
+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
           }
-        ],
-        url: {
-          list: "/mesproductionworkorder/mesProductionWorkOrder/list",
-          delete: "/mesproductionworkorder/mesProductionWorkOrder/delete",
-          deleteBatch: "/mesproductionworkorder/mesProductionWorkOrder/deleteBatch",
-          exportXlsUrl: "/mesproductionworkorder/mesProductionWorkOrder/exportXls",
-          importExcelUrl: "mesproductionworkorder/mesProductionWorkOrder/importExcel",
-          
         },
-        dictOptions:{},
-        superFieldList:[],
+        {
+          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: '/mesproductionworkorder/mesProductionWorkOrder/list',
+        delete: '/mesproductionworkorder/mesProductionWorkOrder/delete',
+        deleteBatch: '/mesproductionworkorder/mesProductionWorkOrder/deleteBatch',
+        exportXlsUrl: '/mesproductionworkorder/mesProductionWorkOrder/exportXls',
+        importExcelUrl: 'mesproductionworkorder/mesProductionWorkOrder/importExcel',
+        listProductionLinesOption: '/base/factory/queryIdTree',
+        schedule: '/mesproductionworkorder/mesProductionWorkOrder/schedule',
+        publish: '/mesproductionworkorder/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
       }
     },
-    created() {
-    this.getSuperFieldList();
-    },
-    computed: {
-      importExcelUrl: function(){
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
-      },
-    },
-    methods: {
-      initDictConfig(){
-      },
-      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
+    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';
+@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

--
Gitblit v1.9.3