yuansh 5 months ago
parent
commit
f653ec60d3

+ 18 - 24
src/views/baseCode/ShipArchive/BaseShipArchiveAccessories.data.ts

@@ -5,61 +5,55 @@ import { render } from '/@/utils/common/renderUtils';
 import { getWeekMonthQuarterYear } from '/@/utils';
 //列表数据
 export const columns: BasicColumn[] = [
-   {
-    title: '状态(1-启用,0-停用)',
-    align:"center",
-    dataIndex: 'status'
-   },
-   {
-    title: '主表主键(船舶档案)',
-    align:"center",
-    dataIndex: 'headId'
-   },
+   
    {
     title: '配件类型',
     align:"center",
-    dataIndex: 'accessoryType'
+    dataIndex: 'accessoryType',
+    key: 'accessoryType'
    },
    {
     title: '规格',
     align:"center",
-    dataIndex: 'specifications'
+    dataIndex: 'specifications',
+    key: 'specifications'
    },
    {
     title: '型号',
     align:"center",
-    dataIndex: 'model'
+    dataIndex: 'model',
+    key: 'model'
    },
    {
     title: '序列号',
     align:"center",
-    dataIndex: 'serialNumber'
+    dataIndex: 'serialNumber',
+    key: 'serialNumber'
    },
-   {
+   /* {
     title: '备注',
     align:"center",
-    dataIndex: 'notes'
+    dataIndex: 'notes',
+    key: 'notes'
    },
    {
     title: '附件',
     align:"center",
-    dataIndex: 'attachs'
-   },
+    dataIndex: 'attachs',
+    key: 'attachs'
+   }, */
 ];
 //查询数据
 export const searchFormSchema: FormSchema[] = [
 ];
 //表单数据
 export const formSchema: FormSchema[] = [
-  {
-    label: '状态(1-启用,0-停用)',
-    field: 'status',
-    component: 'InputNumber',
-  },
+  
   {
     label: '主表主键(船舶档案)',
     field: 'headId',
     component: 'Input',
+    show: false
   },
   {
     label: '配件类型',
@@ -119,4 +113,4 @@ export const superQuerySchema = {
 export function getBpmFormSchema(_formData): FormSchema[]{
   // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
   return formSchema;
-}
+}

+ 40 - 6
src/views/baseCode/ShipArchive/BaseShipArchiveList.vue

@@ -6,9 +6,10 @@
       <template #tableTitle>
           <a-button type="primary" v-auth="'baseCode:base_ship_archive:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
           <a-button  type="primary" v-auth="'baseCode:base_ship_archive:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
-           <j-upload-button type="primary" v-auth="'baseCode:base_ship_archive:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
+          <!-- <j-upload-button type="primary" v-auth="'baseCode:base_ship_archive:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> -->
          <a-button  type="primary" @click="relateCustomer"> 关联客户</a-button>
          <a-button  type="primary" @click="hisCustomer"> 历史客户</a-button>
+         <a-button  type="primary" @click="accessories"> 配件明细</a-button>
          
           <a-dropdown v-if="selectedRowKeys.length > 0">
               <template #overlay>
@@ -37,6 +38,7 @@
     <!-- 表单区域 -->
     <BaseShipArchiveModal @register="registerModal" @success="handleSuccess"></BaseShipArchiveModal>
     <BaseShipArchiveRelateCustomerModal @register="registerCustomerAdd" @success="handleSuccess"></BaseShipArchiveRelateCustomerModal>
+    <BaseShipArchiveAccessoriesModal @register="accessoriesAdd" @success="handleSuccess"></BaseShipArchiveAccessoriesModal>
   </div>
 </template>
 
@@ -47,6 +49,7 @@
   import { useListPage } from '/@/hooks/system/useListPage'
   import BaseShipArchiveModal from './components/BaseShipArchiveModal.vue'
   import BaseShipArchiveRelateCustomerModal from './components/BaseShipArchiveRelateCustomerModal.vue'
+  import BaseShipArchiveAccessoriesModal from './components/BaseShipArchiveAccessoriesModal.vue'
   import {columns, searchFormSchema, superQuerySchema} from './BaseShipArchive.data';
   import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './BaseShipArchive.api';
   import { downloadFile } from '/@/utils/common/renderUtils';
@@ -61,6 +64,7 @@
   
   const [registerModal,{openModal: openModal}] = useModal();
   const [registerCustomerAdd, { openModal: openModalCustomerAdd }] = useModal();
+  const [accessoriesAdd, { openModal: openModalaccessoriesAdd }] = useModal();
   //注册table数据
   const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
       tableProps:{
@@ -112,12 +116,40 @@
     });
     reload();
   }
+  
+  
+  /**
+    * 配件明细
+    */
+  function accessories(record: Recordable) {
+    if (selectedRowKeys.value.length != 1) {
+      createMessage.warn('请选择一条数据');
+      // createWarningModal({ title: '提示', content: '请选择一条数据' });
+      return;
+    }
+   
+    // selectedRowKeys.value.forEach((item) => {
+    //   console.log(item);
+    // });
+    
+    record.headId=rowSelection.selectedRows[0].id;
+    record.name=rowSelection.selectedRows[0].shipName;
+    record.imo=rowSelection.selectedRows[0].imo;
+    openModalaccessoriesAdd(true, {
+      record,
+      isUpdate: false,
+      showFooter: true,
+    });
+    
+  } 
+
+  
   /**
     * 关联客户
     */
   function relateCustomer(record: Recordable) {
     if (selectedRowKeys.value.length != 1) {
-      createWarningModal({ title: '提示', content: '请选择一条数据' });
+      createMessage.warn('请选择一条数据');
       return;
     }
    
@@ -134,12 +166,14 @@
       showFooter: true,
     });
     
-  } /**
-    * 关联客户
+  } 
+   
+  /**
+    * 历史客户
     */
   function hisCustomer(record: Recordable) {
     if (selectedRowKeys.value.length != 1) {
-      createWarningModal({ title: '提示', content: '请选择一条数据' });
+      createMessage.warn('请选择一条数据');
       return;
     }
     // selectedRowKeys.value.forEach((item) => {
@@ -150,7 +184,7 @@
     record.imo=rowSelection.selectedRows[0].imo;
     openModalCustomerAdd(true, {
       record,
-      isUpdate: true,
+      isUpdate: false,
       showFooter: false,
     });
     

+ 70 - 0
src/views/baseCode/ShipArchive/components/BaseShipArchiveAccessoriesForm.vue

@@ -0,0 +1,70 @@
+<template>
+    <div style="min-height: 400px">
+        <BasicForm @register="registerForm"></BasicForm>
+        <div style="width: 100%;text-align: center" v-if="!formDisabled">
+            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">提 交</a-button>
+        </div>
+    </div>
+</template>
+
+<script lang="ts">
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {computed, defineComponent} from 'vue';
+    import {defHttp} from '/@/utils/http/axios';
+    import { propTypes } from '/@/utils/propTypes';
+    import {getBpmFormSchema} from '../BaseShipArchiveAccessories.data';
+    import {saveOrUpdate} from '../BaseShipArchiveAccessories.api';
+    
+    export default defineComponent({
+        name: "BaseShipArchiveAccessoriesForm",
+        components:{
+            BasicForm
+        },
+        props:{
+            formData: propTypes.object.def({}),
+            formBpm: propTypes.bool.def(true),
+        },
+        setup(props){
+            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
+                labelWidth: 150,
+                schemas: getBpmFormSchema(props.formData),
+                showActionButtonGroup: false,
+                baseColProps: {span: 24}
+            });
+
+            const formDisabled = computed(()=>{
+                if(props.formData.disabled === false){
+                    return false;
+                }
+                return true;
+            });
+
+            let formData = {};
+            const queryByIdUrl = '/baseCode/baseShipArchiveAccessories/queryById';
+            async function initFormData(){
+                let params = {id: props.formData.dataId};
+                const data = await defHttp.get({url: queryByIdUrl, params});
+                formData = {...data}
+                //设置表单的值
+                await setFieldsValue(formData);
+                //默认是禁用
+                await setProps({disabled: formDisabled.value})
+            }
+
+            async function submitForm() {
+                let data = getFieldsValue();
+                let params = Object.assign({}, formData, data);
+                console.log('表单数据', params)
+                await saveOrUpdate(params, true)
+            }
+
+            initFormData();
+            
+            return {
+                registerForm,
+                formDisabled,
+                submitForm,
+            }
+        }
+    });
+</script>

+ 195 - 0
src/views/baseCode/ShipArchive/components/BaseShipArchiveAccessoriesModal.vue

@@ -0,0 +1,195 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
+      <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button> 
+      <a-button style="margin-left:5px" type="primary" @click="handleEdit"> 编辑</a-button> 
+      <a-button style="margin-left:5px" type="primary" @click="handleDel"> 删除</a-button> 
+      <a-button style="margin-left:5px" type="primary" @click="handleGet" > 刷新</a-button>
+  
+      <JVxeTable 
+        ref="tableRef"
+        keep-source
+        resizable
+        :loading="demoFieldDefValSubTable.loading"
+        :columns="demoFieldDefValSubTable.columns"
+        :dataSource="demoFieldDefValSubTable.dataSource"
+        :height="340"
+        :rowNumber="false"
+        :rowSelection="true"
+        :toolbar="false"
+        
+        />
+      
+  </BasicModal>
+  
+  <BaseShipArchiveAccessoriesModal2 @register="accessoriesAdd2" @success="handleSuccess"></BaseShipArchiveAccessoriesModal2>
+  
+</template>
+
+<script lang="ts" setup>
+    import {ref, computed, unref,reactive} from 'vue';
+    import {BasicModal, useModalInner} from '/@/components/Modal';
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {formSchema,columns} from '../BaseShipArchiveAccessories.data';
+    import {saveOrUpdate,list,deleteOne} from '../BaseShipArchiveAccessories.api';
+    import BaseShipArchiveAccessoriesModal2 from './BaseShipArchiveAccessoriesModal2.vue'
+    import {useModal} from '/@/components/Modal';
+    import { JVxeTable } from '/@/components/jeecg/JVxeTable'
+    import { useMessage } from '/@/hooks/web/useMessage';
+      
+    const { createMessage, createConfirm, createSuccessModal, createInfoModal, createErrorModal, createWarningModal, notification } = useMessage();
+    
+    const tableRef = ref<JVxeTableInstance>()
+    const [accessoriesAdd2,{openModal: openModal2}] = useModal();
+    
+    const demoFieldDefValSubTable = reactive({
+          loading: false,
+          dataSource: [],
+          columns:columns
+    })
+    // Emits声明
+    const emit = defineEmits(['register','success']);
+    var isShow = "";
+    const isUpdate = ref(true);
+    const isDetail = ref(false);
+    //表单配置
+    const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
+        labelWidth: 150,
+        schemas: formSchema,
+        showActionButtonGroup: false,
+        baseColProps: {span: 24}
+    });
+    async function handleSave(record: EditRecordRow) {
+      console.log("=========================");
+    }
+    
+    let headId = "";
+    
+     /**
+      * 新增事件
+      */
+     
+    function handleAdd(record: Recordable) {
+       record.headId=headId;
+       openModal2(true, {
+         record,
+         isUpdate: false,
+         showFooter: true,
+       });
+    }
+    
+    function handleEdit(record: Recordable) {
+      const values = tableRef.value.getSelectionData()
+      
+      if (values.length != 1) {
+        createMessage.warn('请选择一条数据');
+        return;
+      }
+      record = values[0];
+      openModal2(true, {
+         record,
+         isUpdate: true,
+         showFooter: true,
+      });
+    }
+    
+
+    function handleDel(record: Recordable) {
+      const values = tableRef.value.getSelectionData()
+      
+      if (values.length != 1) {
+        createMessage.warn('请选择一条数据');
+        return;
+      }
+      createConfirm({
+        title: '提示',
+        content: `确定要删除吗?`,
+        iconType: 'warning',
+        okText:'确定',
+        onOk: () => new Promise((resolve,rejected)=>{
+          record = values[0];
+          deleteOne({id: record.id}, handleGet);
+          resolve();
+          
+        }),
+        onCancel: () => {console.log('取消了')}
+      });
+      
+    }
+    
+    //表单赋值
+    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
+        //重置表单
+        // await resetFields();
+        // setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
+        // isUpdate.value = !!data?.isUpdate;
+        // isDetail.value = !!data?.showFooter;
+        // if (unref(isUpdate)) {
+        //     //表单赋值
+        //     await setFieldsValue({
+        //         ...data.record,
+        //     });
+        // }
+        // isShow = true;
+        headId = data.record.headId
+        await list({headId:data.record.headId}).then(function (response) {
+          
+          // response.records.forEach(item => {
+          //   console.log(item);
+          // });
+          
+          // console.log(response.records); 
+            demoFieldDefValSubTable.dataSource = response.records;
+           
+        }).catch(function (error) {
+          console.log(error);
+        });
+                 
+        // 隐藏底部时禁用整个表单
+       // setProps({ disabled: !data?.showFooter })
+    });
+    async function handleGet(){
+      await list({headId:headId}).then(function (response) {
+       
+          demoFieldDefValSubTable.dataSource = response.records;
+         
+      }).catch(function (error) {
+        console.log(error);
+      });
+    }
+    //设置标题
+    const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '配件明细(accessories details)' : '编辑'));
+    //表单提交事件
+    async function handleSubmit(v) {
+        try {
+            let values = await validate();
+            setModalProps({confirmLoading: true});
+            //提交表单
+            await saveOrUpdate(values, isUpdate.value);
+            //关闭弹窗
+            closeModal();
+            //刷新列表
+            emit('success');
+        } catch ({ errorFields }) {
+           if (errorFields) {
+             const firstField = errorFields[0];
+             if (firstField) {
+               scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+             }
+           }
+           return Promise.reject(errorFields);
+        } finally {
+            setModalProps({confirmLoading: false});
+        }
+    }
+</script>
+
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+</style>

+ 78 - 0
src/views/baseCode/ShipArchive/components/BaseShipArchiveAccessoriesModal2.vue

@@ -0,0 +1,78 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
+      <BasicForm @register="registerForm" name="BaseShipArchiveAccessoriesForm" />
+  </BasicModal>
+</template>
+
+<script lang="ts" setup>
+    import {ref, computed, unref} from 'vue';
+    import {BasicModal, useModalInner} from '/@/components/Modal';
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {formSchema} from '../BaseShipArchiveAccessories.data';
+    import {saveOrUpdate} from '../BaseShipArchiveAccessories.api';
+    import {findNew} from './BaseShipArchiveAccessoriesModal2.vue';
+    // Emits声明
+    const emit = defineEmits(['register','success']);
+    const isUpdate = ref(true);
+    const isDetail = ref(false);
+    //表单配置
+    const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
+        labelWidth: 150,
+        schemas: formSchema,
+        showActionButtonGroup: false,
+        baseColProps: {span: 24}
+    });
+    //表单赋值
+    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
+        //重置表单
+        await resetFields();
+        setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
+        isUpdate.value = !!data?.isUpdate;
+        isDetail.value = !!data?.showFooter;
+        // if (unref(isUpdate)) {
+            //表单赋值
+            await setFieldsValue({
+                ...data.record,
+            });
+        // }
+        // 隐藏底部时禁用整个表单
+       setProps({ disabled: !data?.showFooter })
+    });
+    //设置标题
+    const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
+    //表单提交事件
+    async function handleSubmit(v) {
+        try {
+            let values = await validate();
+            setModalProps({confirmLoading: true});
+            //提交表单
+            await saveOrUpdate(values, isUpdate.value);
+            //关闭弹窗
+            closeModal();
+            //刷新列表
+            emit('success');
+            
+        } catch ({ errorFields }) {
+           if (errorFields) {
+             const firstField = errorFields[0];
+             if (firstField) {
+               scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+             }
+           }
+           return Promise.reject(errorFields);
+        } finally {
+            setModalProps({confirmLoading: false});
+        }
+    }
+</script>
+
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+</style>

+ 1 - 1
src/views/baseCode/ShipArchive/components/BaseShipArchiveRelateCustomerModal.vue

@@ -26,7 +26,7 @@
     import {BasicForm, useForm} from '/@/components/Form/index';
     import {formSchema,getFIle,columns} from '../BaseShipArchiveRelateCustomer.data';
     import {saveOrUpdate,list} from '../BaseShipArchiveRelateCustomer.api';
-       import { JVxeTable } from '/@/components/jeecg/JVxeTable'
+    import { JVxeTable } from '/@/components/jeecg/JVxeTable'
     // Emits声明
     const emit = defineEmits(['register','success']);
     const isUpdate = ref(true);