LAPTOP-16IUEB3P\Lenovo 2 лет назад
Родитель
Сommit
53471b1370
3 измененных файлов с 210 добавлено и 36 удалено
  1. 9 0
      src/api/produceOrder/index.js
  2. 144 0
      src/utils/index.js
  3. 57 36
      src/views/produceOrder/components/unpackDialog.vue

+ 9 - 0
src/api/produceOrder/index.js

@@ -56,3 +56,12 @@ export async function batchSave (id) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+// 拆分
+export async function splitWork (params) {
+  const res = await request.post(`/mes/workorder/split`,params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 144 - 0
src/utils/index.js

@@ -0,0 +1,144 @@
+
+/**
+ * This is just a simple version of deep copy
+ * Has a lot of edge cases bug
+ * If you want to use a perfect deep copy, use lodash's _.cloneDeep
+ * @param {Object} source
+ * @returns {Object}
+ */
+export function deepClone (source) {
+  if (!source && typeof source !== 'object') {
+    throw new Error('error arguments', 'deepClone')
+  }
+  const targetObj = source.constructor === Array ? [] : {}
+  Object.keys(source).forEach(keys => {
+    if (source[keys] && typeof source[keys] === 'object') {
+      targetObj[keys] = deepClone(source[keys])
+    } else {
+      targetObj[keys] = source[keys]
+    }
+  })
+  return targetObj
+}
+
+/**
+ * @description:封装方法:获取今天、昨天、明天
+ * @param {*} dates  0 今天   -1   -2
+ * @returns
+ */
+export function getDay (dates) {
+  var dd = new Date()
+  var n = dates || 0
+  dd.setDate(dd.getDate() + n)
+  var y = dd.getFullYear()
+  var m = dd.getMonth() + 1
+  var d = dd.getDate()
+  m = m < 10 ? '0' + m : m
+  d = d < 10 ? '0' + d : d
+  var day = y + '-' + m + '-' + d
+  return day
+}
+
+/**
+ * @description: 获取某月的起始、结束日期
+ * @param {*} val 年月 2023-01
+ * @returns
+ */
+export function getMonday (val) {
+  let date = new Date(val)
+  let new_year = date.getFullYear() // 取当前的年份
+  let month = date.getMonth()
+  let new_month = month + 1 // 取当前的月份
+  let mon = ''
+  let day = ''
+  if (month > 12) {
+    new_month -= 12 // 月份减
+    new_year++ // 年份增
+  }
+  let firstDay = new Date(new_year, new_month, 1) // 取当年当月中的第一天
+  let lastDay = new Date(firstDay.getTime() - 1000 * 60 * 60 * 24).getDate() // 获取当月最后一天日期
+  if (firstDay.getMonth() < 10) {
+    mon = '0' + firstDay.getMonth()
+  } else {
+    mon = firstDay.getMonth()
+  }
+  if (lastDay < 10) {
+    day = '0' + lastDay
+  } else {
+    day = lastDay
+  }
+  let startDate =
+    firstDay.getFullYear() + '-' + mon + '-' + '0' + firstDay.getDate()
+  let endDate = firstDay.getFullYear() + '-' + mon + '-' + day
+  let dateRange = [startDate, endDate]
+  return dateRange
+}
+
+/**
+ * @description: 获取本周起始日期
+ * @param {*} type s 周开始  e周结束
+ * @param {*} dates  0 本周
+ * @returns
+ */
+export function getDate (type, dates = 0) {
+  var now = new Date()
+  var nowTime = now.getTime()
+  var day = now.getDay()
+  var longTime = 24 * 60 * 60 * 1000
+  var n = longTime * 7 * (dates || 0)
+  if (type == 's') {
+    var dd = nowTime - (day - 1) * longTime + n
+  }
+  if (type == 'e') {
+    var dd = nowTime + (7 - day) * longTime + n
+  }
+  dd = new Date(dd)
+  var y = dd.getFullYear()
+  var m = dd.getMonth() + 1
+  var d = dd.getDate()
+  m = m < 10 ? '0' + m : m
+  d = d < 10 ? '0' + d : d
+  var day = y + '-' + m + '-' + d
+  return day
+}
+
+/**
+ * @description 获取最近 7天日期
+ * @returns days
+ */
+export function getRecent7Days () {
+  let days = []
+  for (let i = 0; i <= 24 * 6; i += 24) {
+    // 使用当天时间戳减去以前的时间毫秒(小时 * 分 * 秒 * 毫秒)
+    let dateItem = new Date(Date.now() - i * 60 * 60 * 1000)
+    let y = dateItem.getFullYear()
+    let m = dateItem.getMonth() + 1
+    let d = dateItem.getDate()
+    m = addDate0(m)
+    d = addDate0(d)
+    let valueItem = y + '-' + m + '-' + d
+    days.push(valueItem)
+  }
+  return days
+}
+// 给日期拼接 0
+function addDate0 (time) {
+  if (time.toString().length === 1) {
+    time = '0' + time.toString()
+  }
+  return time
+}
+
+//补零 000
+export function pushZero (num) {
+  let count = 3 - String(num).length
+  if (count > 0) {
+    return new Array(count).fill('0').join('') + num
+  }
+  return num
+}
+
+//表格分页 序号连续
+export function tableIndex (index, page, size) {
+  return index + 1 + size * (page - 1)
+}

+ 57 - 36
src/views/produceOrder/components/unpackDialog.vue

@@ -12,6 +12,7 @@
         label-width="0"
         :show-message="false"
         ref="formRef"
+		:rules="rules"
       >
         <el-descriptions title="" :column="2" border>
           <el-descriptions-item label="工单号">
@@ -38,8 +39,8 @@
             content-class-name="produce-create-bg"
           >
             <span slot="label" class="label-required">成型数量</span>
-            <el-form-item prop="formingNum" required>
-              <el-input v-model="requestData.formingNum"></el-input>
+            <el-form-item prop="formingNum">
+              <el-input type="number" v-model="requestData.formingNum" @input="changeNumber"></el-input>
             </el-form-item>
           </el-descriptions-item>
           <el-descriptions-item
@@ -48,8 +49,7 @@
             content-class-name="produce-create-bg"
           >
             <span slot="label" class="label-required">计划开始时间</span>
-
-            <el-form-item prop="planStartTime" required class="w100">
+            <el-form-item prop="planStartTime" class="w100">
               <el-date-picker
                 class="w100"
                 v-model="requestData.planStartTime"
@@ -63,7 +63,7 @@
             content-class-name="produce-create-bg"
           >
             <span slot="label" class="label-required">设备编码/名称</span>
-            <el-form-item prop="deviceName" required
+            <el-form-item prop="deviceName"
               ><el-input
                 @click.native="getEquip"
                 :value="
@@ -87,8 +87,10 @@
 </template>
 
 <script>
-  import { save, update } from '@/api/produceOrder/index.js';
+  import { splitWork } from '@/api/produceOrder/index.js';
   import equipmentDailog from '@/components/EquipmentDailog/equipment-dailog';
+  import { positiveIntegerReg } from 'ele-admin';
+  import { deepClone } from '@/utils';
   export default {
     components: { equipmentDailog },
     data () {
@@ -96,42 +98,49 @@
         visible: false,
         produceVersionId: '',
         formData: {},
-		requestData:{}
+		requestData:{
+			deviceCode: '',
+			deviceName: '',
+			deviceId:''
+		},
+		formingNum:0,
+		rules:{
+			formingNum: [
+				{ required: true, message: '请输入成型数量', trigger: 'blur' },
+				{ pattern: positiveIntegerReg, message: '成型数量格式不正确', trigger: 'blur' }
+			],
+			planStartTime:[
+				{ required: true, message: '请选择计划开始时间', trigger: 'change' }
+			],
+			deviceName:[
+				{ required: true, message: '请选择设备', trigger: 'change' }
+			]
+		}
       };
     },
     methods: {
       open (row) {
         this.visible = true;
-		this.formData = row
-		this.produceVersionId = row.produceVersionId
-		if(row.planStartTime){
-			this.requestData.planStartTime = row.planStartTime
+		this.formData = deepClone(row)
+		this.formingNum = this.formData.formingNum
+		this.produceVersionId = this.formData.produceVersionId
+		if(this.formData.planStartTime){
+			this.$set(this.requestData,'planStartTime',this.formData.planStartTime)
 		}
       },
-      // codeChoose () {
-      //   this.$refs.apsPlanOrderRef.open(this.formData.productCode, (res) => {
-      //     if (this.formData.productCode != res.productCode) {
-      //       this.formData.deviceCode = '';
-      //       this.formData.deviceName = '';
-      //       this.formData.deviceId = '';
-      //     }
-      //     this.formData.productionPlanCode = res.code;
-      //     this.formData.productionPlanId = res.id;
-      //     this.formData.productCode = res.productCode;
-      //     this.formData.productName = res.productName;
-      //     this.formData.brandNo = res.brandNo;
-      //     this.formData.model = res.model;
-      //     this.formData.productNum = res.productNum;
-      //     this.formData.requiredFormingNum = res.requiredFormingNum;
-      //     this.produceVersionId = res.produceVersionId;
-      //   });
-      // },
+	  
+	  changeNumber(val){
+		  if(!positiveIntegerReg.test(this.requestData.formingNum)){
+		   	return this.$message.warning('成型数量应为正整数'); 
+		  }
+		  if(val>this.formingNum||val==this.formingNum){
+			  return this.$message.warning('成型数量应小于要求成型数量');
+		  }
+		  this.formData.formingNum = this.formingNum - val
+	  },
       getEquip () {
-        // if (!this.produceVersionId) {
-        //   return this.$message.error('请先选择计划');
-        // }
         this.$refs.equipmentDailogRef.openSingle(
-          [this.requestData.deviceCode],
+          [this.requestData],
           (res) => {
             this.requestData.deviceCode = res.code;
             this.requestData.deviceName = res.name;
@@ -141,14 +150,26 @@
       },
       cancel () {
         this.formData = {};
-		this.requestData = {};
+		this.requestData = {
+			deviceCode: '',
+			deviceName: '',
+			deviceId:''
+		};
         this.visible = false;
+		this.$refs.formRef.resetFields();
       },
       confirm () {
+		  if(!positiveIntegerReg.test(this.requestData.formingNum)){
+		   	return this.$message.warning('成型数量应为正整数'); 
+		  }
         this.$refs.formRef.validate(async (value) => {
           if (value) {
-            const res = await save(this.requestData);
-            this.$message.success('操作成功!');
+			  const params = {
+				  ...this.requestData,
+				  originalCode:this.formData.code
+			  }
+            const res = await splitWork(params);
+            this.$message.success('拆分成功!');
             this.$emit('success');
             this.cancel();
           }