Browse Source

报价单选定(配置菜单)

IRIS-b 5 months ago
parent
commit
4937f4f599

+ 119 - 0
src/views/purchase/selectionQuotationForm/SelectionQuotationForm.api.ts

@@ -0,0 +1,119 @@
+import {defHttp} from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/purCode/purQuotationSelection/list',
+  save='/purCode/purQuotationSelection/add',
+  edit='/purCode/purQuotationSelection/edit',
+  deleteOne = '/purCode/purQuotationSelection/delete',
+  deleteBatch = '/purCode/purQuotationSelection/deleteBatch',
+  importExcel = '/purCode/purQuotationSelection/importExcel',
+  exportXls = '/purCode/purQuotationSelection/exportXls',
+  queryDataById = '/purCode/purQuotationSelection/queryById',
+  purCodeSelectFormShipList = '/purCode/purQuotationSelection/queryPurQuotationSelectionShipByMainId',
+  purCodeSelectFormProductList = '/purCode/purQuotationSelection/queryPurQuotationSelectionProductByMainId',
+  submitBatch='/purCode/purQuotationSelection/submitBatch',
+  cancelSubmitBatch='/purCode/purQuotationSelection/returnSubmitBatch'
+}
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+
+/**
+ * 查询子表数据
+ * @param params
+ */
+export const SelectQuotationFormShippTable = (id) => defHttp.get({url: Api.purCodeSelectFormShipList, params:{ id }});
+/**
+ * 查询子表数据
+ * @param params
+ */
+export const SelectQuotationFormProductListByMainId = (id) => defHttp.get({url: Api.purCodeSelectFormProductList, params:{ id }});
+
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) =>
+  defHttp.get({url: Api.list, params});
+
+/**
+ * 删除单个
+ */
+export const deleteOne = (params,handleSuccess) => {
+  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
+    handleSuccess();
+  });
+}
+/**
+ * 批量删除
+ * @param params
+ */
+export const batchDelete = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认删除',
+    content: '是否删除选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+/**
+ * 保存或者更新
+ * @param params
+ */
+export const saveOrUpdate = (params, isUpdate) => {
+  let url = isUpdate ? Api.edit : Api.save;
+  return defHttp.post({url: url, params});
+}
+
+/**
+* 根据id查询数据
+* @param params
+*/
+export const queryDataById = (id) => defHttp.get({url: Api.queryDataById, params:{ id }});
+
+// 提交
+export const batchSubmit = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认提交',
+    content: '是否提交选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.submitBatch, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+// 取消提交
+export const cancelBatchSubmit = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认取消提交',
+    content: '是否取消提交选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.cancelSubmitBatch, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}

+ 434 - 0
src/views/purchase/selectionQuotationForm/SelectionQuotationForm.data.ts

@@ -0,0 +1,434 @@
+import {BasicColumn} from '/@/components/Table';
+import {FormSchema} from '/@/components/Table';
+import { rules} from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import {JVxeTypes,JVxeColumn} from '/@/components/jeecg/JVxeTable/types'
+import { getWeekMonthQuarterYear } from '/@/utils';
+//列表数据
+export const columns: BasicColumn[] = [
+   {
+    title: '选定单号(bill code)',
+    align:"center",
+    dataIndex: 'billCode'
+   },   
+   {
+    title: '单据日期(bill date)',
+    align:"center",
+    dataIndex: 'billDate',
+    customRender:({text}) =>{
+      text = !text ? "" : (text.length > 10 ? text.substr(0,10) : text);
+      return text;
+    },
+   },
+  
+   {
+    title: '询问价项目(inquiry project)',
+    align:"center",
+    dataIndex: 'projectName'
+   },
+   {
+    title: '优先级(priority)',
+    align:"center",
+    dataIndex: 'priority'
+   },
+   {
+    title: '产品分类(production class)',
+    align:"center",
+    dataIndex: 'productionClass'
+   },
+   {
+    title: '机型(model)',
+    align:"center",
+    dataIndex: 'model'
+   },
+   {
+    title: '厂家(maker)',
+    align:"center",
+    dataIndex: 'maker'
+   },
+   {
+      title: '提交(submit)',
+      align:"center",
+      dataIndex: 'submit_dictText',
+      customRender:({text,record}) =>{
+        if(record.submit=='0'){
+          text = '未提交'
+        }else if(record.submit=='1'){
+          text = '已提交'
+        }
+        return text;
+      },
+    },
+];
+
+//子表表格配置
+export const SelectQuotationFormShipTableCloumn: JVxeColumn[] = [
+    {
+      title: '船名(ship name)',
+      key: 'shipName',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '主机号(host number)',
+      key: 'hostNumber',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '工程编号(project No)',
+      key: 'projectNo',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '船厂(ship factory)',
+      key: 'shipFactory',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '船东(shipowner)',
+      key: 'shipowner',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '操作(operation)',
+      key: 'action',
+      width:"400px",
+      // 固定在右侧
+      fixed: 'right',
+      // 对齐方式为居中
+      align: 'center',
+      // 组件类型定义为【插槽】
+      type: JVxeTypes.slot,
+      // slot 的名称,对应 v-slot 冒号后面和等号前面的内容
+      slotName: 'action',
+    },
+  ]
+export const SelectQuotationFormProductColumns: JVxeColumn[] = [
+    {
+      title: '产品分类(product class)',
+      key: 'productClass',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '产品编码(product code)',
+      key: 'productCode',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '产品中文名(chinese name)',
+      key: 'chineseName',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '产品英文名(english name)',
+      key: 'englishName',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '型号(model)',
+      key: 'model',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '备件号(partno)',
+      key: 'partno',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '订货号(orderno)',
+      key: 'orderno',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '图号(drawingno)',
+      key: 'drawingno',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '厂家(factory)',
+      key: 'factory',
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+      type: JVxeTypes.normal,
+    },
+    {
+      title: '质量等级(quality grade)',
+      key: 'qualityGrade',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '数量(quantity)',
+      key: 'quantity',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '选定供应商(selection supplier)',
+      key: 'selectionSupplier',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '付款条件(payment terms)',
+      key: 'paymentTerms',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '发货方式(delivery)',
+      key: 'delivery',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '交期(delivery time)',
+      key: 'deliveryTime',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '报销有效期(quotation validity)',
+      key: 'quotationValidity',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '上次报价(last price)',
+      key: 'lastPice',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '含税金额(Tax amount)',
+      key: 'taxAmount',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '备注(note)',
+      key: 'notes',
+      width:"200px",
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '操作(operation)',
+      key: 'action',
+      width:"200px",
+      // 固定在右侧
+      fixed: 'right',
+      // 对齐方式为居中
+      align: 'center',
+      // 组件类型定义为【插槽】
+      type: JVxeTypes.slot,
+      // slot 的名称,对应 v-slot 冒号后面和等号前面的内容
+      slotName: 'action',
+    },
+  ]
+  export const SupplierQuotationColumns: JVxeColumn[] = [
+    {
+      title: '产品分类(product class)',
+      key: 'productClass',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '产品编码(product code)',
+      key: 'productCode',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '产品中文名(chinese name)',
+      key: 'chineseName',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '产品英文名(english name)',
+      key: 'englishName',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '型号(model)',
+      key: 'model',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '备件号(partno)',
+      key: 'partno',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '订货号(orderno)',
+      key: 'orderno',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '图号(drawingno)',
+      key: 'drawingno',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '厂家(factory)',
+      key: 'factory',
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+      type: JVxeTypes.normal,
+    },
+    {
+      title: '质量等级(quality grade)',
+      key: 'qualityGrade',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '报价供应商(quotation supplier)',
+      key: 'quotationSupplier',
+      width:"200px",
+      placeholder: '请输入${title}',
+      defaultValue:'',
+      type: JVxeTypes.normal,
+    },
+    {
+      title: '付款条件(payment trems)',
+      key: 'paymentTrems',
+      type: JVxeTypes.normal,
+      width:"200px",
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '发货方式(delivery)',
+      key: 'delivery',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+    },
+    {
+      title: '交期(deliery time)',
+      key: 'delieryTime',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '含税单价(Tax price)',
+      key: 'taxPrice',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '币种(currency)',
+      key: 'currency',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '上次报价(last price)',
+      key: 'lastPice',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '含税金额(tax amount)',
+      key: 'taxAmount',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      defaultValue:'',  
+      width:"200px",
+    },
+    {
+      title: '备注(note)',
+      key: 'notes',
+      width:"200px",
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+  ]

+ 14 - 0
src/views/purchase/selectionQuotationForm/components/BaseProjectArchive.api.ts

@@ -0,0 +1,14 @@
+import {defHttp} from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/baseCode/baseProjectArchive/list'
+}
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) =>
+  defHttp.get({url: Api.list, params});

+ 84 - 0
src/views/purchase/selectionQuotationForm/components/BaseProjectArchive.data.ts

@@ -0,0 +1,84 @@
+import {BasicColumn} from '/@/components/Table';
+import {FormSchema} from '/@/components/Table';
+import { rules} from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import { getWeekMonthQuarterYear } from '/@/utils';
+//列表数据
+export const columns: BasicColumn[] = [
+  {
+    title: '编码(code)',
+    align:"center",
+    dataIndex: 'code'
+   },
+   {
+    title: '名称(name)',
+    align:"center",
+    dataIndex: 'name'
+   },
+  
+   {
+    title: '客户(customer)',
+    align:"center",
+    dataIndex: 'customerId_dictText'
+   },
+   {
+    title: '备注(notes)',
+    align:"center",
+    dataIndex: 'notes'
+   },
+   {
+    title: '创建时间(create time)',
+    align:"center",
+    dataIndex: 'createTime'
+   },
+   {
+    title: '创建人(create by)',
+    align:"center",
+    dataIndex: 'createBy'
+   },
+];
+//查询数据
+export const searchFormSchema: FormSchema[] = [
+	  {
+      label: "编码(code)",
+      field: 'code',
+      component: 'Input',
+      componentProps:{
+      },
+      //colProps: {span: 6},
+ 	  },
+   {
+      label: "名称(name)",
+      field: 'name',
+      component: 'Input',
+        //colProps: {span: 6},
+    },
+    {
+      label: "客户(customer)",
+      field: 'customerId',
+      component: 'JDictSelectTag',
+      componentProps:{
+          dictCode: 'customer',
+      },
+      //colProps: {span: 6},
+ 	  },
+     {
+      label: "创建时间(create time)",
+      field: "createTime",
+      component: 'RangePicker',
+      labelWidth: 150,
+      componentProps: {
+          valueType: 'Date',
+          showTime:true
+      },
+      //colProps: {span: 6},
+	},
+	{
+    label: "创建人(create by)",
+    field: 'createBy',
+    component: 'Input',
+    labelWidth: 120,
+    //colProps: {span: 6},
+   },
+	
+];

+ 107 - 0
src/views/purchase/selectionQuotationForm/components/BaseShipArchiveAccessoriesModal.vue

@@ -0,0 +1,107 @@
+<template>
+  <div ref="accessoriesDetailsRef">
+      <a-modal
+            title="配件明细(accessories details)"
+            width="70%"
+            :visible="visible"
+            :maskClosable="false"
+            :getContainer ='()=>$refs.accessoriesDetailsRef'
+            switchFullscreen
+            @cancel="handleCancel">
+              <div>
+                <a-table
+                      :columns="columns"
+                      :row-key="record => record.id"
+                      :data-source="dataSource"
+                      bordered
+                      size="small"
+                      height="500"
+                      :pagination="false"
+                      :scroll="{ x: 1000, y: 500 }"
+                  > 
+                      <template #attachs="{ text, record,index }">
+                          <a :href="baseUrl+record.attachs">{{record.attachs}}</a>
+                      </template>
+                  </a-table>
+              </div>
+        </a-modal>
+  </div>
+</template>
+
+<script lang="ts" setup>
+    import {ref, computed, unref,reactive} from 'vue';
+    import { useGlobSetting } from '/@/hooks/setting';
+    import {defHttp} from '/@/utils/http/axios';
+    const { domainUrl } = useGlobSetting();
+    var visible = ref(false);
+    var columns = ref([
+          {
+          title: '配件类型(accessory type)',
+          align:"center",
+          dataIndex: 'accessoryType',
+          key: 'accessoryType'
+        },
+        {
+          title: '规格(specifications)',
+          align:"center",
+          dataIndex: 'specifications',
+          key: 'specifications'
+        },
+        {
+          title: '型号(model)',
+          align:"center",
+          dataIndex: 'model',
+          key: 'model'
+        },
+        {
+          title: '序列号(serial number)',
+          align:"center",
+          dataIndex: 'serialNumber',
+          key: 'serialNumber'
+        },
+        {
+          title: '备注(notes)',
+          align:"center",
+          dataIndex: 'notes',
+          key: 'notes'
+        },
+        {
+          title: '附件(attachs)',
+          align:"center",
+          dataIndex: 'attachs',
+          key: 'attachs',
+          slots: { customRender: 'attachs' },
+        },
+    ])
+    var dataSource=ref([])
+    const baseUrl = domainUrl + '/sys/common/static/';
+    function getTable(record){
+        visible.value = true
+        let params={headId:record.id}
+        defHttp.get({url:"/baseCode/baseShipArchiveAccessories/list",params}).then(res=>{
+        if(res){
+          dataSource.value = res.records
+        }
+    })
+    }
+    function handleCancel(){
+      visible.value = false;
+    }
+    defineExpose({
+      getTable
+    });
+  </script>
+
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+  /deep/.ant-modal-body{
+    padding: 14px !important;
+  }
+</style>

+ 84 - 0
src/views/purchase/selectionQuotationForm/components/SelectProjectModal.vue

@@ -0,0 +1,84 @@
+<template>
+    <a-modal
+      title="选择项目(select project)"
+      width="95%"
+      :visible="visible"
+      :maskClosable="false"
+      switchFullscreen
+      @ok = "handleOk"
+      @cancel="handleCancel">
+      <div>
+            <!--引用表格-->
+        <BasicTable @register="registerTable" :rowSelection="rowSelection"></BasicTable>
+        </div>
+      </a-modal>
+</template>
+<script lang="ts" name="baseCode-baseShipArchive" setup>
+  import {ref, reactive } from 'vue';
+  import {BasicTable, useTable, TableAction} from '/@/components/Table';
+  import { useListPage } from '/@/hooks/system/useListPage'
+  import {columns, searchFormSchema} from './BaseProjectArchive.data';
+  import {list} from './BaseProjectArchive.api';
+  import { message } from 'ant-design-vue';
+
+  const queryParam = reactive<any>({});
+  var visible = ref(false);
+  const emit = defineEmits([ 'selectProject']); //定义emit
+  //注册table数据
+  const { tableContext} = useListPage({
+      tableProps:{
+           api:list,
+           columns,
+           canResize:false,
+           formConfig: {
+              schemas: searchFormSchema,
+              autoSubmitOnEnter:true,
+              showAdvancedButton:true,
+              fieldMapToNumber: [
+              ],
+              fieldMapToTime: [
+                 ['shipDate', ['shipDate_begin', 'shipDate_end'], 'YYYY-MM-DD HH:mm:ss'],
+              ],
+            },
+           showTableSetting:false,
+           showActionColumn:false,
+           actionColumn: {
+               width: 200,
+               fixed:'right'
+            },
+            beforeFetch: (params) => {
+              return Object.assign(params, queryParam);
+            },
+      }
+  })
+
+  const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
+  
+  function handleCancel() {
+    visible.value = false;
+    selectedRowKeys.value = []
+    emit('selectProject',rowSelection.selectedRows)
+  }
+  function handleOk() {
+    if(selectedRowKeys.value.length!==1){
+      message.warning('请选择一条数据数据')
+    }else{
+        emit('selectProject',rowSelection.selectedRows)
+        handleCancel()
+     }  
+    }
+   function getTable(){
+    visible.value = true
+   }
+   defineExpose({
+    getTable
+  });
+
+
+</script>
+
+<style lang="less" scoped>
+  :deep(.ant-picker),:deep(.ant-input-number){
+    width: 100%;
+  }
+</style>

+ 384 - 0
src/views/purchase/selectionQuotationForm/components/SelectQuotationFormForm.vue

@@ -0,0 +1,384 @@
+<template>
+  <a-spin :spinning="loading">
+    <JFormContainer :disabled="disabled">
+      <template #detail>
+        <a-form v-bind="formItemLayout" name="SelectQuotationFormForm" ref="formRef">
+          <a-row>
+            <a-col :span="12">
+							<a-form-item label="选定单号(bill code)" v-bind="validateInfos.billCode" id="SelectQuotationFormForm-billCode" name="billCode">
+								<a-input v-model:value="formData.billCode" placeholder="请输入报价单号(bill code)" disabled></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="单据日期(bill date)" v-bind="validateInfos.billDate" id="SelectQuotationFormForm-billDate" name="billDate">
+								<a-date-picker placeholder="请选择单据日期(bill date)"  v-model:value="formData.billDate"  value-format="YYYY-MM-DD"  style="width: 100%"  allow-clear />
+							</a-form-item>
+						</a-col>
+						
+						<a-col :span="12">
+							<a-form-item label="询价项目(inquiry project)" v-bind="validateInfos.projectName" id="SelectQuotationFormForm-projectName" name="projectName">
+								<a-input-search v-model:value="formData.projectName" placeholder="请输入报价项目(inquiry project)" :disabled="SelectQuotationFormProductTable.dataSource.length!==0"  allow-clear enter-button="Search" @search="onSearchProject"></a-input-search>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="优先级(priority)" v-bind="validateInfos.priority" id="SelectQuotationFormForm-priority" name="priority">
+                <JDictSelectTag v-model:value="formData.priority" placeholder="请选择" dictCode="priority"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="产品分类(production class)" v-bind="validateInfos.productionClass" id="SelectQuotationFormForm-productionClass" name="productionClass">
+								<a-input v-model:value="formData.productionClass" placeholder="请输入"  allow-clear disabled></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="机型(model)" v-bind="validateInfos.model" id="SelectQuotationFormForm-model" name="model">
+                <JDictSelectTag v-model:value="formData.model" placeholder="请选择" dictCode="model_typer" disabled/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="厂家(maker)" v-bind="validateInfos.maker" id="SelectQuotationFormForm-maker" name="maker">
+								<a-input v-model:value="formData.maker" placeholder="请输入厂家(maker)"  allow-clear disabled></a-input>
+							</a-form-item>
+						</a-col>
+            <a-col :span="12">
+							<a-form-item label="附件(attachs)" v-bind="validateInfos.attachs" id="SelectQuotationFormForm-attachs" name="attachs">
+								<JUpload v-model:value="formData.attachs"></JUpload>
+							</a-form-item>
+						</a-col>
+            <a-col :span="12">
+							<a-form-item label="报价备注(quotation notes)" v-bind="validateInfos.inquiryNotes" id="SelectQuotationFormForm-inquiryNotes" name="inquiryNotes">
+								<a-input v-model:value="formData.inquiryNotes" placeholder="请输入报价备注(quotation notes)"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>      
+          </a-row>
+        </a-form>
+      </template>
+    </JFormContainer>
+
+		<!-- 子表单区域 -->
+    <a-tabs v-model:activeKey="activeKey" animated  style=" padding: 24px;padding-top: 0px;">
+      <a-tab-pane tab="采购报价单选定子表 - 船明细(ship details)" key="SelectQuotationFormShip" :forceRender="true">
+        <j-vxe-table
+          :keep-source="true"
+          resizable
+          ref="SelectQuotationFormShipTableRef"
+          :loading="SelectQuotationFormShipTable.loading"
+          :columns="SelectQuotationFormShipTable.columns"
+          :dataSource="SelectQuotationFormShipTable.dataSource"
+          :height="340"
+          :disabled="disabled"
+          :rowNumber="true"
+          :rowSelection="true"
+          >
+            <template #action="props" >
+              <a @click="viewAccessory(props)" >查看配件信息(view accessory information)</a>
+            </template>
+          </j-vxe-table>
+      </a-tab-pane>
+      <a-tab-pane tab="采购报价单选定子表 - 产品明细(product details)" key="SelectQuotationFormProduct" :forceRender="true">
+        <j-vxe-table
+          :keep-source="true"
+          resizable
+          ref="SelectQuotationFormProductTableRef"
+          :loading="SelectQuotationFormProductTable.loading"
+          :columns="SelectQuotationFormProductTable.columns"
+          :dataSource="SelectQuotationFormProductTable.dataSource"
+          :height="340"
+          :disabled="disabled"
+          :rowNumber="true"
+          :rowSelection="true"
+          asyncRemove
+          >
+          <template #action="props">
+                <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)">
+                  <a>删除(delete)</a>
+                </a-popconfirm>
+            </template>
+          </j-vxe-table>
+      </a-tab-pane>
+      <a-tab-pane tab="采购报价单选定子表 - 供应商报价明细(supplier quotation details)" key="SupplierQuotationDetails" :forceRender="true">
+        <j-vxe-table
+          :keep-source="true"
+          resizable
+          ref="SupplierQuotationDetailsTableRef"
+          :loading="SupplierQuotationDetailsTable.loading"
+          :columns="SupplierQuotationDetailsTable.columns"
+          :dataSource="SupplierQuotationDetailsTable.dataSource"
+          :height="340"
+          :disabled="disabled"
+          :rowNumber="true"
+          :rowSelection="true"
+          asyncRemove
+          >
+          </j-vxe-table>
+      </a-tab-pane>
+    </a-tabs>
+    <BaseShipArchiveAccessoriesList ref="BaseShipArchiveAccessoriesListRef"></BaseShipArchiveAccessoriesList>
+    <SelectProjectModal ref="SelectProjectModalRef" @selectProject="addProject"></SelectProjectModal>
+  </a-spin>
+</template>
+
+<script lang="ts">
+  import { defineComponent, ref, reactive, computed, toRaw, onMounted } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
+  import { SelectQuotationFormShippTable, SelectQuotationFormProductListByMainId, queryDataById, saveOrUpdate } from '../SelectionQuotationForm.api';
+  import { JVxeTable } from '/@/components/jeecg/JVxeTable';
+  import {SelectQuotationFormShipTableCloumn, SelectQuotationFormProductColumns,SupplierQuotationColumns} from '../SelectionQuotationForm.data';
+  import BaseShipArchiveAccessoriesList from './BaseShipArchiveAccessoriesModal.vue';
+  import SelectProjectModal from './SelectProjectModal.vue';
+  import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
+  import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
+  import { JDictSelectTag} from '/@/components/Form';
+  import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
+  import { Form } from 'ant-design-vue';
+  import moment from 'moment';
+  const useForm = Form.useForm;
+  export default defineComponent({
+    name: "SelectQuotationFormForm",
+    components:{
+      JVxeTable,
+			JFormContainer,
+      BaseShipArchiveAccessoriesList,
+      JUpload,
+      SelectProjectModal,
+      JDictSelectTag,
+      JSelectInput,
+    },
+    props:{
+      formDisabled:{
+        type: Boolean,
+        default: false
+      },
+      formData: { type: Object, default: ()=>{} },
+      formBpm: { type: Boolean, default: true }
+    },
+    emits:['success'],
+    setup(props, {emit}) {
+      const loading = ref(false);
+      const formRef = ref();
+      var SelectProjectModalRef = ref()
+      const SelectQuotationFormShipTableRef = ref();
+      const SelectQuotationFormShipTable = reactive<Record<string, any>>({
+        loading: false,
+        columns: SelectQuotationFormShipTableCloumn,
+        dataSource: []
+      });
+      const SelectQuotationFormProductTableRef = ref();
+      const SupplierQuotationDetailsTableRef = ref();
+      const SelectQuotationFormProductTable = reactive<Record<string, any>>({
+        loading: false,
+        columns: SelectQuotationFormProductColumns,
+        dataSource: []
+      });
+      const SupplierQuotationDetailsTable = reactive<Record<string, any>>({
+        loading: false,
+        columns: SupplierQuotationColumns,
+        dataSource: []
+      });
+      var BaseShipArchiveAccessoriesListRef = ref();
+      const activeKey = ref('SelectQuotationFormShip');
+      const formData = reactive<Record<string, any>>({
+        id: '',
+        status: undefined,
+        delFlag: undefined,
+        otherStatus: '',   
+        submit: '',   
+        billDate: moment(new Date()).format('YYYY-MM-DD'),   
+        billCode: '',   
+        inquiryProject: '',   
+        inquirySuppiler:"",
+        inquiryCustomer: '',           
+        priority: '',   
+        productionClass: '',   
+        model: '',   
+        maker: '',
+        paymentTerms:'',
+        delivery:'',
+        deliveryTime: '',  
+        inquiryTeam: '',   
+        quotationValidity:'',
+        attachs: '',   
+        inquiryNotes: '',   
+        sourceCode:'',
+        projectName:'',
+        placeDelivery:'',
+        suppilerName:'',
+        saleAttachs:''
+      });
+
+      //表单验证
+      const validatorRules = reactive({
+      });
+      const {resetFields, validate, validateInfos} = useForm(formData, validatorRules, {immediate: false});
+      const dbData = {};
+      const formItemLayout = {
+        labelCol: {xs: {span: 24}, sm: {span: 5}},
+        wrapperCol: {xs: {span: 24}, sm: {span: 16}},
+      };
+
+      // 表单禁用
+      const disabled = computed(()=>{
+        if(props.formBpm === true){
+          if(props.formData.disabled === false){
+            return false;
+          }else{
+            return true;
+          }
+        }
+        return props.formDisabled;
+      });
+
+      
+
+      function add() {
+        resetFields();
+        SelectQuotationFormShipTable.dataSource = [];
+        SelectQuotationFormProductTable.dataSource = [];
+        SupplierQuotationDetailsTable.dataSource = []
+        activeKey.value = 'SelectQuotationFormShip'
+      }
+
+      async function edit(row) {
+        //主表数据
+        await queryMainData(row.id);
+        //子表数据
+        const SelectQuotationFormShipDataList = await SelectQuotationFormShippTable(row['id']);
+        SelectQuotationFormShipTable.dataSource = [...SelectQuotationFormShipDataList];
+        const SelectQuotationFormProductDataList = await SelectQuotationFormProductListByMainId(row['id']);
+        SelectQuotationFormProductTable.dataSource = [...SelectQuotationFormProductDataList];
+      }
+
+      async function queryMainData(id) {
+        const row = await queryDataById(id);
+        resetFields();
+        const tmpData = {};
+        Object.keys(formData).forEach((key) => {
+          if(row.hasOwnProperty(key)){
+            tmpData[key] = row[key]
+          }
+        })
+        //赋值
+        Object.assign(formData,tmpData);
+      }
+
+      const {getSubFormAndTableData, transformData} = useValidateAntFormAndTable(activeKey, {
+        'purQuotationSelectionShip': SelectQuotationFormShipTableRef,
+        'purQuotationSelectionProduct': SelectQuotationFormProductTableRef,
+      });
+
+      async function getFormData() {
+        try {
+          // 触发表单验证
+          await validate();
+        } catch ({ errorFields }) {
+          if (errorFields) {
+            const firstField = errorFields[0];
+            if (firstField) {
+              formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+            }
+          }
+          return Promise.reject(errorFields);
+        }
+        return transformData(toRaw(formData))
+      }
+
+      async function submitForm() {
+        const mainData = await getFormData();
+        const subData = await getSubFormAndTableData();
+        const values = Object.assign({}, dbData, mainData, subData);
+        console.log('表单提交数据', values)
+        const isUpdate = values.id ? true : false
+        await saveOrUpdate(values, isUpdate);
+        //关闭弹窗
+        emit('success');
+      }
+      
+      function setFieldsValue(values) {
+        if(values){
+          Object.keys(values).map(k=>{
+            formData[k] = values[k];
+          });
+        }
+      }
+
+      /**
+       * 值改变事件触发-树控件回调
+       * @param key
+       * @param value
+       */
+      function handleFormChange(key, value) {
+        formData[key] = value;
+      }
+      async function handleDelete1(prop) {
+        var newArray = [...SelectQuotationFormProductTable.dataSource]
+        newArray.splice(prop.rowIndex, 1)
+        SelectQuotationFormProductTable.dataSource = newArray  
+      }
+      function addProject(data) {
+        if(data.length!==0){
+          formData.inquiryProject = data[0].id
+           formData.projectName = data[0].name
+        }else{
+          formData.inquiryProject = ''
+          formData.projectName = ''
+        }
+        
+      }
+      function viewAccessory(prop){
+        BaseShipArchiveAccessoriesListRef.value.getTable(prop.row)
+      }
+      function onSearchProject(){
+        SelectProjectModalRef.value.getTable()
+      }
+      return {
+        SelectQuotationFormShipTableRef,
+        SelectQuotationFormShipTable,
+        SelectQuotationFormProductTableRef,
+        SelectQuotationFormProductTable,
+        validatorRules,
+        validateInfos,
+        activeKey,
+        loading,
+        formData,
+        setFieldsValue,
+        handleFormChange,
+        formItemLayout,
+        disabled,
+        getFormData,
+        submitForm,
+        add,
+        edit,
+        formRef,
+        BaseShipArchiveAccessoriesListRef,
+        viewAccessory,
+        handleDelete1,
+        SelectProjectModalRef,
+        onSearchProject,
+        addProject,
+        SupplierQuotationDetailsTableRef
+      }
+    }
+  });
+</script>
+<style lang="less" scoped>
+  /** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+  /deep/.vxe-table--body-wrapper{
+    height: 100% !important;
+  }
+  /deep/.ant-modal-body{
+    padding: 24px !important;
+  }
+  
+  /deep/.ant-form-item{
+    margin-bottom: 8px !important;
+  }
+      
+</style>

+ 67 - 0
src/views/purchase/selectionQuotationForm/components/SelectQuotationFormModal.vue

@@ -0,0 +1,67 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="95%" @ok="handleSubmit">
+    <SelectQuotationFormForm ref="formComponent" :formDisabled="formDisabled" :formBpm="false" @success="submitSuccess"></SelectQuotationFormForm>
+  </BasicModal>
+</template>
+
+<script lang="ts">
+  import { ref, unref } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import SelectQuotationFormForm from './SelectQuotationFormForm.vue';
+
+  export default {
+    name: "TestCgMainVxeModal",
+    components:{
+      BasicModal,
+      SelectQuotationFormForm
+    },
+    emits:['register','success'],
+    setup(_p, {emit}){
+      const formComponent = ref()
+      const isUpdate = ref(true);
+      const formDisabled = ref(false);
+      const title = ref('')
+
+      //表单赋值
+      const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
+        setModalProps({confirmLoading: false,showCancelBtn:data?.showFooter,showOkBtn:data?.showFooter});
+        isUpdate.value = !!data?.isUpdate;
+        formDisabled.value = !data?.showFooter;
+        title.value = data?.isUpdate ? (unref(formDisabled) ? '详情' : '编辑') : '新增';
+        if (unref(isUpdate)) {
+          formComponent.value.edit(data.record)
+        }else{
+          formComponent.value.add()
+        }
+      });
+
+      function handleSubmit() {
+        formComponent.value.submitForm();
+      }
+
+      function submitSuccess(){
+        emit('success');
+        closeModal();
+      }
+
+      return {
+        registerModal,
+        title,
+        formComponent,
+        formDisabled,
+        handleSubmit,
+        submitSuccess
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+</style>

+ 374 - 0
src/views/purchase/selectionQuotationForm/selectionQuotationFormList.vue

@@ -0,0 +1,374 @@
+<template>
+  <div class="p-2">
+    <!--查询区域-->
+    <div class="jeecg-basic-table-form-container">
+      <a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
+        <a-row :gutter="24">
+          <a-col :lg="8">
+              <a-form-item name="billCode">
+                <template #label><span title="选定单号(bill code)">选定单号(bill code)</span></template>
+                <a-input placeholder="" v-model:value="queryParam.billCode" allow-clear ></a-input>
+              </a-form-item>
+          </a-col>
+          <a-col :lg="8">
+              <a-form-item name="billDate">
+                <template #label><span title="单据日期(bill date)">单据日期(bill date)</span></template>
+                <a-range-picker value-format="YYYY-MM-DD"  v-model:value="queryParam.billDate" class="query-group-cust"/>
+              </a-form-item>
+          </a-col>           
+          <template v-if="toggleSearchStatus">
+            <a-col :lg="8">
+              <a-form-item name="inquiryProject">
+                <template #label><span title="询价项目(inquiry project)">询价项目(inquiry project)</span></template>
+                <a-input placeholder="询价项目(inquiry project)" v-model:value="queryParam.inquiryProject" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="priority">
+                <template #label><span title="优先级(priority)">优先级(priority)</span></template>
+                <JDictSelectTag v-model:value="queryParam.priority" placeholder="请选择" dictCode="priority"/>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="productionClass" >
+                <template #label><span title="产品分类(production class)">产品分类(production class)</span></template>
+                <JSelectInput   v-model:value="queryParam.productionClass"  placeholder="请选择" :options="classOption" ></JSelectInput>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="model">
+                <template #label><span title="机型(model)">机型(model)</span></template>
+                <JDictSelectTag v-model:value="queryParam.model" placeholder="请选择" dictCode="model_typer"/>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="maker">
+                <template #label><span title="厂家(maker)">厂家(maker)</span></template>
+                <a-input placeholder="请输入厂家(maker)" v-model:value="queryParam.maker" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="productionCode">
+                <template #label><span title="产品编号(production code)">产品编号(production code)</span></template>
+                <a-input placeholder="请输入" v-model:value="queryParam.productionCode" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="submit">
+                <template #label><span title="提交(submit)">提交(submit)</span></template>
+                <JDictSelectTag v-model:value="queryParam.submit" placeholder="请选择" dictCode="yes_or_no"/>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+              <a-col :lg="6">
+                <a-button type="primary" preIcon="ant-design:search-outlined" @click="reload">查询</a-button>
+                <a-button preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
+                <a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
+                  {{ toggleSearchStatus ? '收起' : '展开' }}
+                  <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
+                </a>
+              </a-col>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!--引用表格-->
+   <BasicTable @register="registerTable" :rowSelection="rowSelection" size="small" >
+     <!--插槽:table标题-->
+      <template #tableTitle>
+          <a-button type="primary"  @click="handleAdd" preIcon="ant-design:plus-outlined" v-auth="'purCode:pur_purchase_quotation:add'"> 新增(add)</a-button>
+          <a-button  type="primary"   preIcon="ant-design:export-outlined" @click="onExportXls" v-auth="'purCode:pur_purchase_quotation:exportXls'"> 导出(export)</a-button>
+          <a-button  type="primary"  @click="submit" > 提交(submit)</a-button>
+          <a-button  type="primary"  @click="cancelSubmit" > 取消提交(cancelSubmit)</a-button>
+          <a-dropdown v-if="selectedRowKeys.length > 0">
+              <template #overlay>
+                <a-menu>
+                  <a-menu-item key="1" @click="batchHandleDelete" v-auth="'purCode:pur_purchase_quotation:deleteBatch'" >
+                    <Icon icon="ant-design:delete-outlined"></Icon>
+                    删除(delete)
+                  </a-menu-item>
+                </a-menu>
+              </template>
+              <a-button >批量操作
+                <Icon icon="mdi:chevron-down"></Icon>
+              </a-button>
+        </a-dropdown>
+      </template>
+       <!--附件-->
+       <template #saleAttachs="{ record }">
+          <a :href="baseUrl+record.saleAttachs">{{record.saleAttachs}}</a>
+       </template>
+       <!--操作栏-->
+      <template #action="{ record }">
+        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
+      </template>
+      <!--字段回显插槽-->
+      <template v-slot:bodyCell="{ column, record, index, text }">
+      </template>
+    </BasicTable>
+    <!-- 表单区域 -->
+    <SelectQuotationFormModal @register="registerModal" @success="handleSuccess"></SelectQuotationFormModal>
+  </div>
+</template>
+
+<script lang="ts" name="purchase-purchaseInquiryForm" setup>
+  import {ref, reactive,onMounted} from 'vue';
+  import {BasicTable, TableAction} from '/@/components/Table';
+  import { useListPage } from '/@/hooks/system/useListPage'
+  import {useModal} from '/@/components/Modal';
+  import SelectQuotationFormModal from './components/SelectQuotationFormModal.vue'
+  import {columns,} from './SelectionQuotationForm.data';
+  import {list, deleteOne, batchDelete, getImportUrl,getExportUrl,batchSubmit,cancelBatchSubmit} from './SelectionQuotationForm.api';
+  import { cloneDeep } from "lodash-es";
+  import { defHttp } from '/@/utils/http/axios';
+  import { JDictSelectTag} from '/@/components/Form';
+  import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
+  import { message } from 'ant-design-vue';
+  import { useGlobSetting } from '/@/hooks/setting';
+  const { domainUrl } = useGlobSetting();
+  const baseUrl = domainUrl + '/sys/common/static/';
+  const formRef = ref();
+  const queryParam = reactive<any>({});
+  //注册model
+  const [registerModal, {openModal}] = useModal();
+  var classOption = ref([]);
+   //注册table数据
+  const { tableContext,onExportXls } = useListPage({
+      tableProps:{
+           title: '采购报价单选定',
+           api: list,
+           columns,
+           canResize:false,
+           useSearchForm: false,
+           actionColumn: {
+               width: 300,
+               fixed:'right'
+           },
+           scroll:{
+            x:'3000px'
+           },
+           beforeFetch: async (params) => {
+             let rangerQuery = await setRangeQuery();
+             return Object.assign(params, rangerQuery);
+           },
+        },
+        exportConfig: {
+            name:"采购报价单",
+            url: getExportUrl,
+            params: queryParam,
+        },
+        importConfig: {
+            url: getImportUrl,
+            success: handleSuccess
+        },
+    })
+
+  const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
+
+   // 自动请求并暴露内部方法
+   onMounted(() => {
+    getOptiom()
+  });
+
+   /**
+    * 新增事件
+    */
+  function handleAdd() {
+     openModal(true, {
+       isUpdate: false,
+       showFooter: true,
+     });
+  }
+   /**
+    * 编辑事件
+    */
+  function handleEdit(record: Recordable) {
+     openModal(true, {
+       record,
+       isUpdate: true,
+       showFooter: true,
+     });
+   }
+  //  产品分类
+  function getOptiom(){
+        defHttp
+            .get({ url: 'baseCode/baseProductClass/list'}, { isTransformResponse: false })
+            .then((res) => {
+                if (res.success) {
+                  classOption.value = []
+                  res.result.records.forEach(element => {
+                      var obj = {
+                        label: element.name?element.name:'无名称请维护',
+                        value: element.id?element.id:''
+                      };
+                      classOption.value.push( obj)
+                  });    
+                }
+            })
+            .finally(() => {
+                // loading.value = false;
+            });
+  }
+   /**
+    * 详情
+   */
+  function handleDetail(record: Recordable) {
+     openModal(true, {
+       record,
+       isUpdate: true,
+       showFooter: false,
+     });
+   }
+   /**
+    * 删除事件
+    */
+  async function handleDelete(record) {
+     await deleteOne({id: record.id}, handleSuccess);
+   }
+   /**
+    * 批量删除事件
+    */
+  async function batchHandleDelete() {
+     await batchDelete({ids: selectedRowKeys.value},handleSuccess);
+   }
+   /**
+    * 成功回调
+    */
+  function handleSuccess() {
+      (selectedRowKeys.value = []) && reload();
+   }
+   /**
+      * 操作栏
+      */
+  function getTableAction(record){
+       return [
+        {
+           label: '编辑(edit)',
+           onClick: handleEdit.bind(null, record),
+           auth: 'purCode:pur_inquiry_form:edit',
+           ifShow: record.submit=='0'
+         }
+       ]
+   } 
+   /**
+        * 下拉操作栏
+        */
+  function getDropDownAction(record){
+       return [
+         {
+           label: '详情(detail)',
+           onClick: handleDetail.bind(null, record),
+         }, 
+         {
+           label: '删除(delete)',
+           popConfirm: {
+             title: '是否确认删除',
+             confirm: handleDelete.bind(null, record),
+             placement: 'topLeft'
+           },
+           auth: 'purCode:pur_purchase_quotation:delete',
+           ifShow: record.submit=='0',
+           
+         }
+       ]
+   }
+  function submit(){
+    if(selectedRowKeys.value.length==0){
+      message.warning('请选择数据')
+    }else{
+      var ids=selectedRowKeys.value.join(',')
+      batchSubmit({ids: ids},handleSuccess);
+    }
+  }
+  function cancelSubmit(){
+    if(selectedRowKeys.value.length==0){
+      message.warning('请选择数据')
+    }else{
+      var ids=selectedRowKeys.value.join(',')
+      cancelBatchSubmit({ids: ids},handleSuccess);
+    }
+  }
+
+  
+
+  /* ----------------------以下为原生查询需要添加的-------------------------- */
+  const toggleSearchStatus = ref<boolean>(false);
+  const labelCol = reactive({
+    xs:24,
+    sm:8,
+  });
+  const wrapperCol = reactive({
+    xs: 24,
+    sm: 16,
+  });
+  const labelCol1 = reactive({
+    xs:24,
+    sm:12,
+  });
+  const wrapperCol1 = reactive({
+    xs: 24,
+    sm: 12,
+  });
+  /**
+   * 重置
+   */
+  function searchReset() {
+    formRef.value.resetFields();
+    selectedRowKeys.value = [];
+    //刷新数据
+    reload();
+  }
+
+  
+  let rangeField = 'billDate,'
+  
+  /**
+   * 设置范围查询条件
+   */
+  async function setRangeQuery(){
+    let queryParamClone = cloneDeep(queryParam);
+    if (rangeField) {
+      let fieldsValue = rangeField.split(',');
+      fieldsValue.forEach(item => {
+        if (queryParamClone[item]) {
+          let range = queryParamClone[item];
+          queryParamClone[item+'_begin'] = range[0];
+          queryParamClone[item+'_end'] = range[1];
+          delete queryParamClone[item];
+        } else {
+          queryParamClone[item+'_begin'] = '';
+          queryParamClone[item+'_end'] = '';
+        }
+      })
+    }
+    return queryParamClone;
+  }
+</script>
+<style lang="less" scoped>
+  .jeecg-basic-table-form-container {
+    padding: 0;
+    .table-page-search-submitButtons {
+      display: block;
+      margin-bottom: 8px;
+      white-space: nowrap;
+    }
+    .query-group-cust{
+      min-width: 100px !important;
+    }
+    .query-group-split-cust{
+      width: 30px;
+      display: inline-block;
+      text-align: center
+    }
+    .ant-form-item:not(.ant-form-item-with-help){
+      margin-bottom: 8px;
+      height: 32px;
+    }
+    :deep(.ant-picker),:deep(.ant-input-number){
+      width: 100%;
+    }
+  }
+</style>