Эх сурвалжийг харах

部分内容修复2025/5/23首页表格 开关状态 仓位状态显示

pm 5 сар өмнө
parent
commit
54e52e712a

+ 1 - 1
src/views/index.vue

@@ -26,7 +26,7 @@
           <!--                    >{{scope.row.workorderCode}}</el-button>-->
           <!--                    </template>-->
           <!--                </el-table-column>-->
-          <el-table-column label="作业票名称" width="320" align="center" prop="ticketName"/>
+          <el-table-column label="作业票名称" width="370" align="center" prop="ticketName"/>
           <el-table-column label="岗位" align="center" prop="workstationName" :show-overflow-tooltip="true"/>
           <el-table-column label="设备工艺" align="center" prop="machineryName"/>
           <el-table-column label="作业类型" align="center" prop="ticketType" :show-overflow-tooltip="true">

+ 8 - 8
src/views/mes/dv/lotoStation/MapData.vue

@@ -6,14 +6,14 @@
         class="bottombtn"
         style="width: 100%; height: 35px; padding: 10px;display: flex;flex-direction: column;"
       >
-        <el-button
-          v-no-more-click
-          @click="close"
-          type="primary"
-          icon="el-icon-close"
-          style="align-self: flex-end;margin-top: 10px"
-        >关闭
-        </el-button>
+<!--        <el-button-->
+<!--          v-no-more-click-->
+<!--          @click="close"-->
+<!--          type="primary"-->
+<!--          icon="el-icon-close"-->
+<!--          style="align-self: flex-end;margin-top: 10px"-->
+<!--        >关闭-->
+<!--        </el-button>-->
 
         <el-button
           v-no-more-click

+ 4 - 32
src/views/mes/dv/lotoStation/PointList.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <el-table
-      height="800"
+      height="740"
       v-loading="loading"
       :data="isolationList"
       @selection-change="handleSelectionChange"
@@ -67,6 +67,8 @@
       </el-table-column>
       <el-table-column label="锁定站" align="center" prop="lotoName">
       </el-table-column>
+      <el-table-column label="隔离点序列号" align="center" prop="pointSerialNumber">
+      </el-table-column>
       <el-table-column label="作用" align="center" prop="remark">
       </el-table-column>
       <el-table-column
@@ -183,37 +185,7 @@ export default {
         endTime: '',
         lotoId:null,
       },
-      pickerOptions: {
-        shortcuts: [
-          {
-            text: '最近一周',
-            onClick(picker) {
-              const end = new Date()
-              const start = new Date()
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
-              picker.$emit('pick', [start, end])
-            }
-          },
-          {
-            text: '最近一个月',
-            onClick(picker) {
-              const end = new Date()
-              const start = new Date()
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
-              picker.$emit('pick', [start, end])
-            }
-          },
-          {
-            text: '最近三个月',
-            onClick(picker) {
-              const end = new Date()
-              const start = new Date()
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
-              picker.$emit('pick', [start, end])
-            }
-          }
-        ]
-      },
+
       // 表单参数
       form: {},
       //工艺树

+ 29 - 2
src/views/mes/dv/lotoStation/index.vue

@@ -103,6 +103,7 @@
       />
       <el-table-column label="岗位" align="center" prop="workstationName" />
       <el-table-column label="地图名称" align="center" prop="mapName" />
+      <el-table-column label="所属硬件序列号" align="center" prop="lotoSerialNumber"></el-table-column>
       <el-table-column
         label="锁定站详情"
         align="center"
@@ -200,6 +201,20 @@
         <el-form-item label="岗位" prop="workstationId" >
           <treeselect v-model="form.workstationId" :options="marsOptions" :normalizer="Marsnormalizer" placeholder="选择岗位"/>
         </el-form-item>
+        <el-form-item label="所属硬件" prop="lotoSerialNumber">
+          <el-select
+            v-model="form.lotoSerialNumber"
+            placeholder="请选择所属硬件"
+            clearable
+          >
+            <el-option
+              v-for="dict in this.hardWareList"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item label="地图名称" prop="mapId">
           <el-select style="width:290px" v-model="form.mapId" placeholder="地图名称">
             <el-option v-for="item in this.MapOptions" :key="item.id" :label="item.name" :value="item.id">
@@ -237,6 +252,7 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import { listMarsDept } from '@/api/system/marsdept'
 import { listTechnology } from '@/api/system/machinery'
 import { getIsMapPage } from '@/api/system/mapconfig'
+import { listHardware } from '@/api/mes/hw/hardwareinfo'
 export default {
   name: "lock",
   dicts: ["hardware_status"],
@@ -280,6 +296,7 @@ export default {
       },
       // 地图名称 下拉
       MapOptions: null,
+      hardWareList:[],//所属硬件
       // 表单校验
       rules: {
         lotoCode: [
@@ -357,7 +374,7 @@ export default {
     },
     getOtherList(){
       const data={
-        pasge:1,
+        current:1,
         size:-1
       }
       // 获取地图类型 锁定站or地图
@@ -379,6 +396,15 @@ export default {
         );
 
       });
+      listHardware(data).then((response) => {
+        this.hardWareList = response.data.records.map((item) => {
+          return {
+            value: item.serialNumber,
+            label: item.hardwareName,
+          };
+        });
+      })
+
     },
     /** 转换部门数据结构 */
     Marsnormalizer(node) {
@@ -413,7 +439,8 @@ export default {
         lotoName: null,
         workstationId: null,
         orderNum: null,
-        map:null
+        map:null,
+        lotoSerialNumber: null,
       };
 
       this.autoGenFlag = false;

+ 29 - 3
src/views/mes/dv/segregationpoint/index.vue

@@ -32,9 +32,22 @@
       </el-form-item>
       <el-form-item label="设备/工艺" prop="machineryId">
         <treeselect style="width: 200px" v-model="queryParams.machineryId" :options="machineryOptions"
-                    :normalizer="Machinerynormalizer" placeholder="选择岗位"
+                    :normalizer="Machinerynormalizer" placeholder="选择设备/工艺"
         />
       </el-form-item>
+      <el-form-item label="锁定站" prop="lotoId">
+        <el-select
+          v-model="queryParams.lotoId"
+          placeholder="请选择锁定站"
+        >
+          <el-option
+            v-for="dict in lotoOptions"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
       <!-- <el-form-item label="状态" prop="calendarType">
         <el-select v-model="queryParams.calendarType" placeholder="状态">
           <el-option>正常</el-option>
@@ -214,6 +227,8 @@
       </el-table-column>
       <el-table-column label="锁定站" align="center" prop="lotoName">
       </el-table-column>
+      <el-table-column label="隔离点序列号" align="center" prop="pointSerialNumber">
+      </el-table-column>
       <el-table-column label="作用" align="center" prop="remark">
       </el-table-column>
       <!-- <el-table-column label="状态" align="center" prop="calendarType">
@@ -472,7 +487,7 @@
           <!--              />-->
           <!--            </el-form-item>-->
           <!--          </el-col>-->
-          <el-col :span="12">
+          <el-col :span="11">
             <el-form-item label="能量源" prop="powerType">
               <el-select
                 style="width: 300px"
@@ -498,7 +513,17 @@
             <!--              />-->
             <!--            </el-form-item>-->
           </el-col>
-
+        <el-col :span="11">
+          <el-form-item label="隔离点序列号" prop="pointSerialNumber">
+            <el-input
+              style="width: 300px"
+              v-model="form.pointSerialNumber"
+              placeholder="请输入隔离点序列号"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
@@ -639,6 +664,7 @@ export default {
         size: 10,
         pointCode: '',
         pointName: '',
+        lotoId:'',
         delFlag: '',
         pointType: '',
         powerType: '',

+ 19 - 17
src/views/mes/hw/Keys/index.vue

@@ -120,11 +120,11 @@
           <span v-else>-</span>
         </template>
       </el-table-column>
-      <el-table-column label="原因" align="center" prop="exRemark" >
-        <template slot-scope="scope">
-          <dict-tag v-if="scope.row.exRemark" :options="dict.type.key_reason" :value="scope.row.exRemark"/>
-          <span v-else>-</span>
-        </template>
+      <el-table-column label="备注" align="center" prop="exRemark" >
+<!--        <template slot-scope="scope">-->
+<!--          <dict-tag v-if="scope.row.exRemark" :options="dict.type.key_reason" :value="scope.row.exRemark"/>-->
+<!--          <span v-else>-</span>-->
+<!--        </template>-->
       </el-table-column>
       <el-table-column label="所属硬件" align="center" prop="hardwareName" />
       <el-table-column
@@ -249,19 +249,21 @@
             >
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="原因" prop="exRemark" >
-          <el-select v-model="form.exRemark">
-            <el-option
-              v-for="dict in dict.type.key_reason"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
+        <el-form-item label="备注" prop="exRemark" >
+          <el-input v-model="form.exRemark" placeholder="请输入备注"/>
+          <!--          <el-select v-model="form.exRemark">-->
+          <!--            <el-option-->
+          <!--              v-for="dict in dict.type.padlock_reason"-->
+          <!--              :key="dict.value"-->
+          <!--              :label="dict.label"-->
+          <!--              :value="dict.value"-->
+          <!--            />-->
+          <!--          </el-select>-->
         </el-form-item>
+
+<!--        <el-form-item label="备注" prop="remark">-->
+<!--          <el-input v-model="form.remark" placeholder="请输入备注" />-->
+<!--        </el-form-item>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button v-no-more-click type="primary" @click="submitForm">确 定</el-button>

+ 59 - 24
src/views/mes/hw/lockCabinet/MapData.vue

@@ -1,17 +1,20 @@
 <template>
   <div>
-    <div ref="container" style="width: 900px; height: 400px;"></div>
-    <el-dialog
-      title="异常信息"
-      :visible.sync="dialogVisible"
-      width="400px"
-    >
-      <h4 style="text-align: center;font-weight: bolder">{{ errorInfo }}</h4>
+    <div class="time-card">
+      <i class="el-icon-time"></i>
+      <div class="time-content">
+        <div class="label">最后更新</div>
+        <div class="time">{{ updateTime }}</div>
+      </div>
+    </div>
+    <div ref="container" style="width: 900px; height: 400px;margin: 0 auto"></div>
+
+    <el-dialog title="异常信息" :visible.sync="dialogVisible" width="400px">
+      <h4 style="text-align: center; font-weight: bolder">{{ errorInfo }}</h4>
       <div slot="footer" class="dialog-footer">
         <el-button v-no-more-click @click="cancel">关 闭</el-button>
       </div>
     </el-dialog>
-
   </div>
 </template>
 
@@ -26,10 +29,11 @@ export default {
       stage: null,
       layer: null,
       cachedResults: {},
-      cachedImages: {}, // 缓存已加载的图片节点
+      cachedImages: {},
       slotData: [],
       dialogVisible: false,
-      errorInfo: ''
+      errorInfo: '',
+      updateTime: null
     }
   },
   mounted() {
@@ -46,9 +50,9 @@ export default {
         size: -1,
         cabinetId: this.$route.query.cabinetId
       }
-
       try {
         const res = await getIsLockCabinetSlotsPage(data)
+        this.updateTime = res.data.records[0].updateTime
         this.slotData = res.data?.records || []
 
         const icons = [
@@ -58,7 +62,6 @@ export default {
           'icon.padlock.out',
           'icon.locker.exception'
         ]
-
         const results = await Promise.all(icons.map(key => getIsSystemAttributeByKey(key)))
         this.cachedResults = icons.reduce((map, key, idx) => {
           map[key] = results[idx].data?.sysAttrValue || ''
@@ -78,8 +81,8 @@ export default {
     initKonva() {
       this.stage = new Konva.Stage({
         container: this.$refs.container,
-        width: 1800,
-        height: 400
+        width: 900,
+        height: 800
       })
       this.layer = new Konva.Layer()
       this.stage.add(this.layer)
@@ -91,19 +94,28 @@ export default {
     },
     async renderSlots() {
       this.layer.destroyChildren()
+      const grouped = {}
+      for (const slot of this.slotData) {
+        const key = `${slot.row}`
+        if (!grouped[key]) grouped[key] = []
+        grouped[key].push(slot)
+      }
 
-      const keySlots = this.slotData.filter(item => item.slotType === '0')
-      const lockSlots = this.slotData.filter(item => item.slotType === '1')
+      const rows = Object.keys(grouped).sort((a, b) => Number(a) - Number(b))
+      const startY = 20
+      const rowHeight = 120
+      const rowGap = 20
 
-      await this.renderSlotRow(keySlots, 50)
-      await this.renderSlotRow(lockSlots, 170)
+      for (let i = 0; i < rows.length; i++) {
+        const rowSlots = grouped[rows[i]]
+        await this.renderSlotRow(rowSlots, startY + i * (rowHeight + rowGap), rowHeight)
+      }
 
       this.layer.draw()
     },
-    async renderSlotRow(slots, boxTopY) {
+    async renderSlotRow(slots, boxTopY, boxHeight) {
       const padding = 20
-      const boxWidth = 700
-      const boxHeight = 120
+      const boxWidth = 860
       const centerX = this.stage.width() / 2
       const boxStartX = centerX - boxWidth / 2
 
@@ -118,7 +130,6 @@ export default {
       this.layer.add(box)
 
       const loadedImages = []
-
       for (const slot of slots) {
         const { slotType, isOccupied } = slot
         let baseKey = ''
@@ -127,7 +138,6 @@ export default {
         } else {
           baseKey = isOccupied === '1' ? 'icon.padlock.normal' : 'icon.padlock.out'
         }
-
         const baseUrl = this.cachedResults[baseKey]
         if (!baseUrl || !this.cachedImages[baseUrl]) continue
 
@@ -193,6 +203,31 @@ export default {
 }
 </script>
 
-
 <style scoped lang="scss">
+.time-card {
+  display: inline-flex;
+  align-items: center;
+  padding: 12px 20px;
+  background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
+  border-radius: 8px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+  transition: all 0.3s;
+}
+.time-card.glow {
+  box-shadow: 0 0 15px rgba(64, 158, 255, 0.5);
+}
+.time-card i {
+  font-size: 24px;
+  color: #409EFF;
+  margin-right: 12px;
+}
+.time-content .label {
+  font-size: 12px;
+  color: #909399;
+}
+.time-content .time {
+  font-size: 16px;
+  font-weight: bold;
+  color: #303133;
+}
 </style>

+ 20 - 19
src/views/mes/hw/lockCabinet/index.vue

@@ -113,7 +113,8 @@
         prop="cabinetCode"
       />
       <el-table-column label="锁柜名称" align="center" prop="cabinetName"/>
-<!--      <el-table-column label="硬件ID" align="center" prop="hardwareId"></el-table-column>-->
+      <el-table-column label="硬件ID" align="center" prop="hardwareId"></el-table-column>
+      <el-table-column label="硬件序列号" align="center" prop="serialNumber"></el-table-column>
       <el-table-column label="岗位" align="center" prop="workstationName">
 
       </el-table-column>
@@ -255,22 +256,22 @@
         <el-form-item label="岗位序号" prop="workstationId" style="width: 380px">
           <treeselect v-model="form.workstationId" :options="marsOptions"  :normalizer="Marsnormalizer" placeholder="选择岗位" />
         </el-form-item>
-<!--        <el-form-item label="硬件ID" prop="hardwareId" style="width: 380px">-->
-<!--          <el-select-->
-<!--            v-model="form.hardwareId"-->
-<!--            placeholder="请选择硬件ID"-->
-<!--            clearable-->
-<!--            style="width: 100%"-->
-<!--            @change="handleSelectHardware"-->
-<!--          >-->
-<!--            <el-option-->
-<!--              v-for="dict in this.hardwareList"-->
-<!--              :key="dict.value"-->
-<!--              :label="dict.label"-->
-<!--              :value="dict.value"-->
-<!--            />-->
-<!--          </el-select>-->
-<!--        </el-form-item>-->
+        <el-form-item label="硬件ID" prop="hardwareId" style="width: 380px">
+          <el-select
+            v-model="form.hardwareId"
+            placeholder="请选择硬件ID"
+            clearable
+            style="width: 100%"
+            @change="handleSelectHardware"
+          >
+            <el-option
+              v-for="dict in this.hardwareList"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item label="是否在线" prop="isOnline">
           <el-radio-group v-model="form.isOnline">
             <el-radio
@@ -531,7 +532,7 @@ export default {
       this.reset();
       this.open = true;
       this.EditId = null;
-      this.title = "添加工卡信息";
+      this.title = "添加锁柜信息";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
@@ -542,7 +543,7 @@ export default {
         this.form = response.data;
 
         this.open = true;
-        this.title = "编辑工卡信息";
+        this.title = "编辑锁柜信息";
       });
     },
     /** 提交按钮 */

+ 28 - 17
src/views/mes/hw/padLocks/index.vue

@@ -123,11 +123,21 @@
           <span v-else>-</span>
         </template>
       </el-table-column>
-      <el-table-column label="原因" align="center" prop="exRemark">
-        <template slot-scope="scope">
-          <dict-tag v-if="scope.row.exRemark" :options="dict.type.padlock_reason" :value="scope.row.exRemark"/>
-          <span v-else>-</span>
-        </template>
+<!--      <el-table-column-->
+<!--        label="备注"-->
+<!--        align="center"-->
+<!--        prop="createTime"-->
+<!--        width="180"-->
+<!--      >-->
+<!--        <template slot-scope="scope">-->
+<!--          <span>{{ scope.row.remark }}</span>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+      <el-table-column label="备注" align="center" prop="exRemark">
+<!--        <template slot-scope="scope">-->
+<!--          <dict-tag v-if="scope.row.exRemark" :options="dict.type.padlock_reason" :value="scope.row.exRemark"/>-->
+<!--          <span v-else>-</span>-->
+<!--        </template>-->
       </el-table-column>
       <el-table-column
         label="创建时间"
@@ -254,19 +264,20 @@
             >
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="原因" prop="exRemark" >
-          <el-select v-model="form.exRemark">
-            <el-option
-              v-for="dict in dict.type.padlock_reason"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注"/>
+        <el-form-item label="备注" prop="exRemark" >
+          <el-input v-model="form.exRemark" placeholder="请输入备注"/>
+<!--          <el-select v-model="form.exRemark">-->
+<!--            <el-option-->
+<!--              v-for="dict in dict.type.padlock_reason"-->
+<!--              :key="dict.value"-->
+<!--              :label="dict.label"-->
+<!--              :value="dict.value"-->
+<!--            />-->
+<!--          </el-select>-->
         </el-form-item>
+<!--        <el-form-item label="备注" prop="remark">-->
+<!--          <el-input v-model="form.remark" placeholder="请输入备注"/>-->
+<!--        </el-form-item>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button v-no-more-click type="primary" @click="submitForm"

+ 3 - 2
src/views/mes/hw/rfid/index.vue

@@ -260,6 +260,7 @@
             </el-radio>
           </el-radio-group>
         </el-form-item>
+
         <el-form-item label="备注" prop="remark" style="width: 380px">
           <el-input v-model="form.remark" placeholder="请输入备注"/>
         </el-form-item>
@@ -440,7 +441,7 @@ export default {
       this.reset();
       this.open = true;
       this.EditId = null;
-      this.title = "添加工卡信息";
+      this.title = "添加RFID信息";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
@@ -451,7 +452,7 @@ export default {
         this.form = response.data;
 
         this.open = true;
-        this.title = "编辑工卡信息";
+        this.title = "编辑RFID信息";
       });
     },
     /** 提交按钮 */

+ 18 - 17
src/views/mes/hw/workCard/index.vue

@@ -149,11 +149,11 @@
           <span v-else>-</span>
         </template>
       </el-table-column>
-      <el-table-column label="原因" align="center" prop="exRemark">
-        <template slot-scope="scope">
-          <dict-tag v-if="scope.row.exRemark" :options="dict.type.job_card_reason" :value="scope.row.exRemark"/>
-          <span v-else>-</span>
-        </template>
+      <el-table-column label="备注" align="center" prop="exRemark">
+<!--        <template slot-scope="scope">-->
+<!--          <dict-tag v-if="scope.row.exRemark" :options="dict.type.job_card_reason" :value="scope.row.exRemark"/>-->
+<!--          <span v-else>-</span>-->
+<!--        </template>-->
       </el-table-column>
       <el-table-column
         label="操作"
@@ -266,19 +266,20 @@
             >
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="原因" prop="exRemark" >
-          <el-select v-model="form.exRemark">
-            <el-option
-              v-for="dict in dict.type.job_card_reason"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="备注" prop="remark" style="width: 340px">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
+        <el-form-item label="备注" prop="exRemark" >
+          <el-input v-model="form.exRemark" placeholder="请输入备注" />
+<!--          <el-select v-model="form.exRemark">-->
+<!--            <el-option-->
+<!--              v-for="dict in dict.type.job_card_reason"-->
+<!--              :key="dict.value"-->
+<!--              :label="dict.label"-->
+<!--              :value="dict.value"-->
+<!--            />-->
+<!--          </el-select>-->
         </el-form-item>
+<!--        <el-form-item label="备注" prop="remark" style="width: 340px">-->
+<!--          <el-input v-model="form.remark" placeholder="请输入备注" />-->
+<!--        </el-form-item>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button v-no-more-click type="primary" @click="submitForm"

+ 1 - 1
src/views/mes/job/jobm/NewMarsJob.vue

@@ -206,7 +206,7 @@
           </el-card>
         </div>
         <div class="left-bottom">
-          <el-card class="box-card" style="height: 100%; margin: 10px" v-loading="loading">
+          <el-card class="box-card" style="height: 102%; margin: 10px" v-loading="loading">
             <div slot="header" class="clearfix">
               <span>锁定站信息</span>
               <i

+ 1 - 1
src/views/system/mars/index.vue

@@ -27,7 +27,7 @@
       <el-form-item label="状态" prop="status">
         <el-select
           v-model="queryParams.status"
-          placeholder="用户状态"
+          placeholder="状态"
           clearable
           style="width: 240px"
         >

+ 1 - 1
src/views/system/unit/index.vue

@@ -27,7 +27,7 @@
       <el-form-item label="状态" prop="status">
         <el-select
           v-model="queryParams.status"
-          placeholder="用户状态"
+          placeholder="状态"
           clearable
           style="width: 240px"
         >