Explorar o código

feat: pct230增加填充品目要求逻辑.

peter hai 1 mes
pai
achega
ce6d3f15e1
Modificáronse 2 ficheiros con 248 adicións e 5 borrados
  1. 204 0
      src/pages/purchase-order/dialogPct230.vue
  2. 44 5
      src/pages/purchase-order/edit.vue

+ 204 - 0
src/pages/purchase-order/dialogPct230.vue

@@ -0,0 +1,204 @@
+<template>
+  <div>
+    <el-dialog
+      v-model="show"
+      :title="`Line ${row2.index + 1} PCT230, ${row.desc}`"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :before-close="close"
+      width="400px"
+    >
+      <el-form
+        :model="form"
+        label-width="80px"
+        class=""
+      >
+        <el-form-item label="扣子">
+          <el-select
+            clearable
+            v-model="form.button"
+            placeholder="请选择扣子"
+          >
+            <el-option
+              v-for="item in buttonOptions"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="织唛">
+          <el-select
+            v-model="form.wovenLabel"
+            placeholder="请选择织唛"
+            clearable
+          >
+            <el-option
+              v-for="item in wovenLabelOptions"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="款式">
+          <el-select
+            v-model="form.style"
+            placeholder="请选择款式"
+            clearable
+          >
+            <el-option
+              v-for="item in styleOptions"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="尺寸">
+          <el-select
+            v-model="form.size"
+            placeholder="请选择尺寸"
+            clearable
+          >
+            <el-option
+              v-for="item in sizeOptions"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="贴纸">
+          <el-select
+            v-model="form.sticker"
+            clearable
+            placeholder="请选择贴纸"
+          >
+            <el-option
+              v-for="item in stickerOptions"
+              :key="item"
+              :label="item"
+              :value="item"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button
+            @click="commit"
+            type="primary"
+          >
+            确定
+          </el-button>
+          <el-button @click="close">取消</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+<script lang="ts" setup>
+import { defineComponent, ref, watch } from 'vue'
+import {
+  ElDialog,
+  ElButton,
+  ElSelect,
+  ElOption,
+  ElForm,
+  ElFormItem,
+} from 'element-plus'
+defineComponent({
+  name: 'ComponentDialogPct230',
+})
+const $emit = defineEmits(['update:visible'])
+let loading = ref(false)
+let show = ref(false)
+const {
+  visible = false,
+  row = {},
+  row2 = {},
+} = defineProps<{
+  visible: boolean
+  row: any
+  row2: any
+}>()
+watch(
+  () => visible,
+  () => {
+    show.value = visible
+    if (show.value) {
+      form.value = {
+        button: '',
+        wovenLabel: '',
+        style: '',
+        size: '',
+        sticker: '',
+      }
+    }
+  },
+)
+let close = (done = {} as any) => {
+  $emit('update:visible', false)
+  if (typeof done === 'function') done()
+}
+const form = ref({
+  button: '',
+  wovenLabel: '',
+  style: '',
+  size: '',
+  sticker: '',
+})
+
+const buttonOptions = [
+  'Label-2不锁死(全黑扣子)',
+  'Label-3半锁死(红黑扣子)',
+  'Label-4全锁死(红黑扣子)',
+]
+
+const wovenLabelOptions = ['欧洲织唛', '澳洲织唛']
+
+const styleOptions = ['双层屏蔽款式', '单层普通款式', '魔术贴款式']
+
+const sizeOptions = [
+  '135*280mm',
+  '135*270mm',
+  '125*270mm',
+  '125*280mm',
+  '125*255mm',
+]
+
+const stickerOptions = [
+  'UK带专利号屏蔽布R贴纸',
+  'UK带专利号普通布R贴纸',
+  'UK无专利号屏蔽布R贴纸',
+  'UK无专利号屏蔽布TM贴纸',
+  'UK无专利号普通布R贴纸',
+  'UK无专利号普通布TM贴纸',
+  '客户指定贴纸',
+]
+let commit = () => {
+  let result = '\n'
+  if (form.value.button) {
+    result += `扣子: ${form.value.button}\n`
+  }
+  if (form.value.wovenLabel) {
+    result += `织唛: ${form.value.wovenLabel}\n`
+  }
+  if (form.value.style) {
+    result += `款式: ${form.value.style}\n`
+  }
+  if (form.value.size) {
+    result += `尺寸: ${form.value.size}\n`
+  }
+  if (form.value.sticker) {
+    result += `贴纸: ${form.value.sticker}\n`
+  }
+  // console.log(result, 'result')
+  row.requirement += result
+  close()
+}
+</script>

+ 44 - 5
src/pages/purchase-order/edit.vue

@@ -110,7 +110,6 @@
               label-width="180px"
             >
               <div class="flex flex-col items-start">
-                <!-- <div class="text-gray-400">最近10个PO的供应商列表</div> -->
                 <div
                   v-for="(item, index) in recommandVendor"
                   :key="index"
@@ -129,7 +128,6 @@
             >
               <div class="text-gray-400">
                 <span>Product Team Preferred Supplier</span>
-                <!-- <span class="text-sm">&nbsp;(单击供应商名称快速选中)</span> -->
               </div>
               <div
                 v-for="(item, index) in preferSupplier"
@@ -393,7 +391,7 @@
                         remote
                         filterable
                         clearable
-                        @change="(e) => onProductSelect(e, product)"
+                        @change="(e) => onProductSelect(e, product, index)"
                       ></el-select-v2>
                     </el-form-item>
                     <el-input
@@ -445,6 +443,14 @@
                       type="textarea"
                       placeholder="Free text"
                     ></el-input>
+
+                    <el-button
+                      v-show="checkStr(product.name)"
+                      size="small"
+                      @click="checkPCT230(product.name, product, index)"
+                    >
+                      填充要求
+                    </el-button>
                   </td>
                   <td class="amount">
                     <el-input
@@ -1433,6 +1439,12 @@
         <el-button @click="specialReminderVisible = false">Cancel</el-button>
       </div>
     </el-dialog>
+    <dialogPct230
+      :row="pct230Row"
+      :row2="pct230Row2"
+      :visible="pct230Visible"
+      @update:visible="onPCT230Close"
+    ></dialogPct230>
   </div>
 </template>
 
@@ -1492,6 +1504,8 @@ import {
   PrimePacSoftRuleTableData1,
   PrimePacCommonRuleTableData,
 } from './const'
+import dialogPct230 from './dialogPct230.vue'
+
 defineComponent({
   name: 'PurchaseOrderEdit',
 })
@@ -1913,7 +1927,32 @@ const onInputChange = function (e: any, obj: IProductItem, key: string) {
     }
   }
 }
-const onProductSelect = function (e: any, product: IProductItem) {
+let pct230Visible = ref(false)
+let pct230Row = ref({} as any)
+let pct230Row2: any = ref({ index: 0 })
+let checkStr = (str: string) =>
+  /PCT230/.test(str.toUpperCase()) && !/[))]_/.test(str)
+let checkPCT230 = (str: string, row: any, i: number) => {
+  console.log(str.toUpperCase(), 'str')
+  if (checkStr(str)) {
+    console.log(str.toUpperCase(), 'success', i)
+    pct230Visible.value = true
+    pct230Row.value = row
+    pct230Row2.value = {
+      index: i,
+    }
+  }
+}
+let onPCT230Close = () => {
+  pct230Visible.value = false
+  pct230Row.value = {}
+  pct230Row2.value = { index: 0 }
+}
+const onProductSelect = function (
+  e: any,
+  product: IProductItem,
+  index: number,
+) {
   if (e) {
     const temp = product.candidate.filter((i) => i.value === e)
     if (temp.length) {
@@ -1927,6 +1966,7 @@ const onProductSelect = function (e: any, product: IProductItem) {
           : ctx.CF3 || ''
       product.CF_Product_Type = ctx.CF_Product_Type || ''
     })
+    checkPCT230(temp[0].label, product, index)
   } else {
     product.name = ''
   }
@@ -2355,7 +2395,6 @@ const onReminderSelect = () => {
 const soData = ref({ Order_Reminder: '' } as any)
 Promise.all([p1, p2, p3])
   .then((array: any[]) => {
-    console.log(222, '222')
     // p2的数据处理逻辑从原本的p2then移动到这里处理.
     // 因为要根据p3用户数据的Organization 来填充产品列表里面的 requirement, 这步处理必须放在p3后面, 而p2 p3是并发操作.
     if (array[1].data.code !== 1) return