Переглянути джерело

Merge branch 'master_zyh' of United_Software/k_online_ui into master

Jack Zhou 6 місяців тому
батько
коміт
13311dd888

+ 30 - 0
src/api/module/tracking.ts

@@ -78,6 +78,36 @@ export const getTrackingAmsIsf = (params: any, config: any) => {
   )
 }
 
+/**
+ * 获取 vgm 的默认配置
+ */
+export const getVGMDefaultSet = (params: any, config: any) => {
+  return HttpAxios.get(
+    `${baseUrl}`,
+    {
+      action: 'ocean_order',
+      operate: 'default_vgm',
+      ...params
+    },
+    config
+  )
+}
+
+/**
+ * 保存 vgm 的默认配置
+ */
+export const saveVGMDefaultSet = (params: any, config: any) => {
+  return HttpAxios.post(
+    `${baseUrl}`,
+    {
+      action: 'ocean_order',
+      operate: 'default_vgm_update',
+      ...params
+    },
+    config
+  )
+}
+
 /**
  * 获取add vgm页面数据
  */

+ 157 - 0
src/views/Tracking/src/components/TrackingTable/src/components/DefaultSettingDialog.vue

@@ -0,0 +1,157 @@
+<script setup lang="ts">
+import { cloneDeep } from 'lodash'
+
+const openDialog = () => {
+  dialogVisible.value = true
+}
+
+const dialogVisible = ref(false)
+const formData = ref({
+  submitter: '',
+  signature: '',
+  authorized_email: '',
+  authorized_tel: ''
+})
+
+const defaultSetting = ref()
+const getDefaultSettings = () => {
+  $api
+    .getVGMDefaultSet()
+    .then((res) => {
+      formData.value = res.data.vgm
+      defaultSetting.value = cloneDeep(res.data.vgm)
+    })
+    .catch(() => {})
+}
+getDefaultSettings()
+
+const handleSave = () => {
+  $api
+    .saveVGMDefaultSet(formData.value)
+    .then(() => {
+      defaultSetting.value = cloneDeep(formData.value)
+      ElMessage.success('Settings saved successfully')
+    })
+    .catch(() => {})
+}
+
+const emit = defineEmits(['close'])
+const clearData = () => {
+  formData.value = cloneDeep(defaultSetting.value) || {
+    submitter: '',
+    signature: '',
+    authorized_email: '',
+    authorized_tel: ''
+  }
+  emit('close', cloneDeep(defaultSetting.value))
+}
+
+defineExpose({
+  openDialog
+})
+</script>
+
+<template>
+  <el-dialog
+    v-model="dialogVisible"
+    title="Default Settings"
+    width="50%"
+    @closed="clearData"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+  >
+    <div class="form">
+      <div class="form-row">
+        <div class="form-item">
+          <div class="label">Submitter</div>
+          <div class="content">
+            <el-input
+              v-model="formData.submitter"
+              placeholder="Please enter..."
+              clearable
+            ></el-input>
+          </div>
+        </div>
+        <div class="form-item">
+          <div class="label">Signature</div>
+          <div class="content">
+            <el-input
+              v-model="formData.signature"
+              placeholder="Please enter..."
+              clearable
+            ></el-input>
+          </div>
+        </div>
+      </div>
+      <div class="form-row">
+        <div class="form-item">
+          <div class="label">Authorized Email</div>
+          <div class="content">
+            <el-input
+              v-model="formData.authorized_email"
+              placeholder="Please enter..."
+              clearable
+            ></el-input>
+          </div>
+        </div>
+        <div class="form-item">
+          <div class="label">Authorized Tel</div>
+          <div class="content">
+            <el-input
+              v-model="formData.authorized_tel"
+              placeholder="Please enter..."
+              clearable
+            ></el-input>
+          </div>
+        </div>
+      </div>
+    </div>
+    <template #footer>
+      <el-button style="width: 81px" class="el-button--default" @click="dialogVisible = false"
+        >Cancel</el-button
+      >
+      <el-button @click="handleSave" class="el-button--dark" style="width: 86px">Save</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<style lang="scss" scoped>
+.form {
+  position: relative;
+  .form-row {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 16px;
+    margin-bottom: 16px;
+    .form-item {
+      flex: 1;
+      .label {
+        display: flex;
+        align-items: flex-start;
+        margin-bottom: 8px;
+        font-size: 12px;
+        line-height: 16px;
+        color: var(--dashboard-text-color);
+      }
+      .content {
+        display: flex;
+        align-items: center;
+        height: 32px;
+        .el-input {
+          width: 100%;
+        }
+      }
+    }
+  }
+  .default-setting {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    height: 21px;
+    line-height: 21px;
+    color: var(--color-theme);
+    border-bottom: 1px solid var(--color-theme);
+    cursor: pointer;
+  }
+}
+</style>

+ 41 - 6
src/views/Tracking/src/components/TrackingTable/src/components/VGMView.vue

@@ -1,8 +1,9 @@
 <script setup lang="ts">
 import dayjs from 'dayjs'
 import { useRoute, useRouter } from 'vue-router'
-import { autoWidth } from '@/utils/table'
+// import { autoWidth } from '@/utils/table'
 import { type VxeGridInstance, type VxeGridProps } from 'vxe-table'
+import DefaultSettingDialog from './DefaultSettingDialog.vue'
 
 const route = useRoute()
 const router = useRouter()
@@ -46,7 +47,7 @@ const generalInfo = ref({
     }
   ],
   formData: {
-    Submitter: '',
+    submitter: '',
     signature: '',
     authorized_email: '',
     authorized_tel: '',
@@ -197,7 +198,7 @@ const convertData = (data: any) => {
       }
     ],
     formData: {
-      Submitter: data.Submitter,
+      submitter: data.submitter,
       signature: data.signature,
       authorized_email: data.authorized_email,
       authorized_tel: data.authorized_tel,
@@ -267,7 +268,7 @@ const verificationData = () => {
       fieldValue === null || fieldValue === undefined || fieldValue === ''
   }
 
-  checkField('Submitter', 'submitter')
+  checkField('submitter', 'submitter')
   checkField('signature', 'signature')
   checkField('authorized_email', 'authorized_email')
   checkField('authorized_tel', 'authorized_tel')
@@ -299,7 +300,7 @@ const handleSave = () => {
 
   const generalData = {
     all_carrier_booking: generalInfo.value.baseInfo['Carrier Booking No.'],
-    submitter: generalInfo.value.formData.Submitter,
+    submitter: generalInfo.value.formData.submitter,
     signature: generalInfo.value.formData.signature,
     authorized_email: generalInfo.value.formData.authorized_email,
     authorized_tel: generalInfo.value.formData.authorized_tel,
@@ -364,6 +365,24 @@ const stopScroll = (evt) => {
   }
   return false
 }
+
+const defaultSettingDialogRef = ref<InstanceType<typeof DefaultSettingDialog> | null>(null)
+const openDefaultSettingDialog = () => {
+  if (defaultSettingDialogRef.value) {
+    defaultSettingDialogRef.value.openDialog()
+  }
+}
+const handleDefaultSetting = (data: any) => {
+  // debugger
+  // generalInfo.value.formData = data
+  const formData = generalInfo.value.formData
+  for (const key in formData) {
+    if (!formData[key] && data[key]) {
+      formData[key] = data[key]
+      isVerificationError.value[key] = false
+    }
+  }
+}
 </script>
 
 <template>
@@ -405,7 +424,7 @@ const stopScroll = (evt) => {
               <div class="content">
                 <el-input
                   :class="{ 'is-error': isVerificationError.submitter }"
-                  v-model="generalInfo.formData.Submitter"
+                  v-model="generalInfo.formData.submitter"
                   placeholder="Please enter..."
                   clearable
                   @blur="verificationData"
@@ -472,6 +491,7 @@ const stopScroll = (evt) => {
               </div>
             </div>
           </div>
+          <div class="default-setting" @click="openDefaultSettingDialog">Default Setting</div>
         </div>
       </div>
       <div class="detail-info" style="margin-top: 8px">
@@ -526,6 +546,10 @@ const stopScroll = (evt) => {
         </div>
       </div>
     </div>
+    <DefaultSettingDialog
+      @close="handleDefaultSetting"
+      ref="defaultSettingDialogRef"
+    ></DefaultSettingDialog>
   </div>
 </template>
 
@@ -611,6 +635,7 @@ const stopScroll = (evt) => {
     padding: 0 16px 8px;
   }
   .form {
+    position: relative;
     .form-row {
       display: flex;
       flex-wrap: wrap;
@@ -648,6 +673,16 @@ const stopScroll = (evt) => {
         }
       }
     }
+    .default-setting {
+      position: absolute;
+      top: 8px;
+      right: 8px;
+      height: 21px;
+      line-height: 21px;
+      color: var(--color-theme);
+      border-bottom: 1px solid var(--color-theme);
+      cursor: pointer;
+    }
   }
 }
 .data-info {