Browse Source

采购订单-页面第一版(配置菜单)

jingbb 4 months ago
parent
commit
259af28f03

+ 388 - 0
src/views/purchase/purchaseOrder/PurchaseOrderForm.data.ts

@@ -0,0 +1,388 @@
+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: '项目(project)',
+    align:"center",
+    dataIndex: 'projectName'
+   },
+   {
+    title: '供应商(supplier)',
+    align:"center",
+    dataIndex: 'supplierName'
+   },
+   {
+    title: '优先级(priority)',
+    align:"center",
+    dataIndex: 'priority_dictText'
+   },
+   {
+    title: '产品分类(production class)',
+    align:"center",
+    dataIndex: 'productionClass'
+   },
+   {
+    title: '机型(model)',
+    align:"center",
+    dataIndex: 'model'
+   },
+   {
+    title: '厂家(maker)',
+    align:"center",
+    dataIndex: 'maker'
+   },
+   {
+    title: '采购部门(purchase department)',
+    align:"center",
+    dataIndex: 'purchaseDepartment'
+   },
+   {
+    title: '采购员(purchaseman)',
+    align:"center",
+    dataIndex: 'purchaseman',
+    width:'250'
+   },
+   {
+    title: '提交(submit)',
+    align:"center",
+    dataIndex: 'submit',
+    customRender:function (t, r, index) {
+      if(t.text==1){
+        return '是(yes)'
+      }else if(t.text==0){
+        return '否(no)'
+      }
+    }
+   },
+   {
+    title: '关闭(close)',
+    align:"center",
+    dataIndex: 'close',
+    customRender:function (t, r, index) {
+      if(t.text==1){
+        return '是(yes)'
+      }else if(t.text==0){
+        return '否(no)'
+      }
+    }
+   },
+   {
+    title: '客户确认(customer confirm)',
+    align:"center",
+    dataIndex: 'status',
+    customRender:function (t, r, index) {
+      if(t.text==1){
+        return '已确认'
+      }else if(t.text==0){
+        return '未确认'
+      }
+    }
+   },
+   {
+    title: '基础协议(base protocaol)',
+    align:"center",
+    dataIndex: 'baseProtocaol',
+    width:'250',
+    slots: { customRender: 'viewFile' },
+   },
+   {
+    title: '扫描合同(scan contract)',
+    align:"center",
+    dataIndex: 'scanProtocaol',
+    width:'250',
+    slots: { customRender: 'viewFile' },
+   },
+   {
+    title: '版本号(version)',
+    align:"center",
+    dataIndex: 'version',
+    width:'250'
+   },
+];
+
+//子表表格配置
+export const purchaseOrderShipColumns: 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 purchaseOrderProductColumns: JVxeColumn[] = [
+    {
+      title: '交期(delivery time)',
+      key: 'deliveryTime',
+      type: JVxeTypes.date,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '最早发货日期(earline delivery date)',
+      key: 'earlineDeliveryDate',
+      type: JVxeTypes.date,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '最晚发货日期(latest delivery date)',
+      key: 'latestDeliveryDate',
+      type: JVxeTypes.date,
+      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.select,
+      options: [],
+      dictCode: 'factory',
+    },
+    {
+      title: '质量等级(quality grade)',
+      key: 'qualityGrade',
+      ttype: JVxeTypes.select,
+      options: [],
+      dictCode: 'quality_grade',
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '需要船检证书(need Ship inspection certificate)',
+      key: 'needShip',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '船检证书(ship Inspection certificate)',
+      key: 'shipInspection',
+      type: JVxeTypes.normal,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '数量(quantity)',
+      key: 'quantity',
+      type: JVxeTypes.inputNumber,
+      placeholder: '请输入${title}',
+      width:"200px",
+      defaultValue:'',
+    },
+    {
+      title: '单价(price)',
+      key: 'taxPrice',
+      type: JVxeTypes.inputNumber,
+      width:"200px",
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '金额(money)',
+      key: 'taxAmount',
+      type: JVxeTypes.inputNumber,
+      width:"200px",
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      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 superQuerySchema = {
+  status: {title: '状态(1-已报价,0-已报价)',order: 0,view: 'number', type: 'number',},
+  otherStatus: {title: '其他状态(other status)',order: 2,view: 'text', type: 'string',},
+  submit: {title: '提交(1是 0否)',order: 3,view: 'text', type: 'string',},
+  billDate: {title: '单据日期(bill date)',order: 4,view: 'date', type: 'string',},
+  billCode: {title: '询价单号(bill code)',order: 5,view: 'text', type: 'string',},
+  inquiryProject: {title: '询价项目(inquiry project)',order: 6,view: 'text', type: 'string',},
+  inquiryCustomer: {title: '询价客户(inquiry customer)',order: 7,view: 'text', type: 'string',},
+  inquiryPlatform: {title: '询价平台(inquiry platform)',order: 8,view: 'text', type: 'string',},
+  customerInquiryNumber: {title: '客户询价单号(customer inquiry number)',order: 9,view: 'text', type: 'string',},
+  inquiryPeriodEnd: {title: '询价有效期(inquiry period)止',order: 10,view: 'date', type: 'string',},
+  inquiryPeriodBegin: {title: '询价有效期(inquiry period)始',order: 11,view: 'date', type: 'string',},
+  busynessType: {title: '业务类型(busyness type)',order: 12,view: 'text', type: 'string',},
+  priority: {title: '优先级(priority)',order: 13,view: 'text', type: 'string',},
+  productionClass: {title: '产品分类(production class)',order: 14,view: 'text', type: 'string',},
+  model: {title: '机型(model)',order: 15,view: 'text', type: 'string',},
+  maker: {title: '厂家(maker)',order: 16,view: 'text', type: 'string',},
+  saleDepartment: {title: '销售部门(sale department)',order: 17,view: 'text', type: 'string',},
+  salesman: {title: '业务员(salesman)',order: 18,view: 'text', type: 'string',},
+  inquiryTeam: {title: '采购询价组(procurement inquiry team)',order: 19,view: 'text', type: 'string',},
+  deliveryTime: {title: '交期(delivery time)',order: 20,view: 'datetime', type: 'string',},
+  attachs: {title: '附件(attachs)',order: 21,view: 'text', type: 'string',},
+  inquiryNotes: {title: '询价备注(inquiry notes)',order: 22,view: 'text', type: 'string',},
+  //子表高级查询
+  saleInquiryFormShip: {
+    title: '销售询价单子表 - 船明细',
+    view: 'table',
+    fields: {
+        shipId: {title: '船id',order: 0,view: 'text', type: 'string',},
+        shipName: {title: '船名',order: 1,view: 'text', type: 'string',},
+        hostNumber: {title: '主机号',order: 2,view: 'text', type: 'string',},
+        projectNo: {title: '工程编号',order: 3,view: 'text', type: 'string',},
+        shipFactory: {title: '船厂',order: 4,view: 'text', type: 'string',},
+        shipowner: {title: '船东',order: 5,view: 'text', type: 'string',},
+    }
+  },
+  saleInquiryFormProduct: {
+    title: '销售询价单子表 - 产品明细',
+    view: 'table',
+    fields: {
+        productId: {title: '产品id',order: 0,view: 'number', type: 'number',},
+        deliveryTime: {title: '交期',order: 1,view: 'date', type: 'string',},
+        productClass: {title: '产品分类',order: 2,view: 'text', type: 'string',},
+        productCode: {title: '产品编码',order: 3,view: 'text', type: 'string',},
+        chineseName: {title: '产品中文名',order: 4,view: 'text', type: 'string',},
+        englishName: {title: '产品英文名',order: 5,view: 'text', type: 'string',},
+        specifications: {title: '规格',order: 6,view: 'text', type: 'string',},
+        model: {title: '型号',order: 7,view: 'text', type: 'string',},
+        factory: {title: '厂家',order: 8,view: 'text', type: 'string',},
+        qualityGrade: {title: '质量等级',order: 9,view: 'text', type: 'string',},
+        quantity: {title: '数量',order: 10,view: 'number', type: 'number',},
+        unit: {title: '单位',order: 11,view: 'text', type: 'string',},
+        needShip: {title: '需要船检证书(1是 0否)',order: 12,view: 'text', type: 'string',},
+        shipInspection: {title: '船检证书',order: 13,view: 'text', type: 'string',},
+        notes: {title: '备注',order: 14,view: 'text', type: 'string',},
+    }
+  },
+};

+ 532 - 0
src/views/purchase/purchaseOrder/PurchaseOrderFormList.vue

@@ -0,0 +1,532 @@
+<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="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> 
+          <a-col :lg="8">
+              <a-form-item name="billCode">
+                <template #label><span title="订单编号(bill code)">订单编号(bill code)</span></template>
+                <a-input placeholder="请输入订单编号(bill code)" v-model:value="queryParam.billCode" allow-clear ></a-input>
+              </a-form-item>
+          </a-col>          
+          <template v-if="toggleSearchStatus">
+            <a-col :lg="8">
+              <a-form-item name="inquiryProject">
+                <template #label><span title="系统项目(project)">系统项目(project)</span></template>
+                <a-input v-model:value="queryParam.project" placeholder="请选择"/>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="inquiryCustomer">
+                <template #label><span title="供应商(supplier)">供应商(supplier)</span></template>
+                <a-input placeholder="请输入供应商(supplier)" v-model:value="queryParam.supplier" 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" style="width: 100%;"/>
+              </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" style="width: 100%;"></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" style="width: 100%;"/>
+              </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="productCode" >
+                <template #label><span title="产品编码(product code)">产品编码(product code)</span></template>
+								<JSelectDept v-model:value="queryParam.productCode" :multiple="false" />
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="saleDepartment" >
+                <template #label><span title="采购部门(purchase saleDepartment)">采购部门(purchase department)</span></template>
+								<JSelectDept v-model:value="queryParam.purchaseDepartment" :multiple="false" />
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="salesman">
+                <template #label><span title="采购员(purchaseman)">采购员(purchaseman)</span></template>
+                <JSelectUser v-model:value="queryParam.purchaseman" placeholder="请选择" :multiple="false"></JSelectUser>
+              </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" style="width: 100%;"/>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="customerConfirm">
+                <template #label><span title="供应商确认(supplier confirm)">供应商确认(supplier confirm)</span></template>
+                <JDictSelectTag v-model:value="queryParam.status" placeholder="请选择" dictCode="yes_or_no"/>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="close">
+                <template #label><span title="关闭(close)">关闭(close)</span></template>
+                <JDictSelectTag v-model:value="queryParam.close" placeholder="请选择" dictCode="yes_or_no" style="width: 100%;"/>
+              </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" v-auth="'saleCode:sale_order:add'"  @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增(add)</a-button>
+          <a-button  type="primary" v-auth="'saleCode:sale_order:exportXls'"  preIcon="ant-design:export-outlined" @click="onExportXls"> 导出(export)</a-button>
+          <a-button  type="primary"  @click="submit" > 提交(submit)</a-button>
+          <a-button  type="primary"  @click="cancelSubmit"> 取消提交(cancelSubmit)</a-button>
+          <a-button  type="primary"  @click="close"> 关闭(close)</a-button>
+          <a-button  type="primary"  @click="cancelClose"> 取消关闭(cancel close)</a-button>
+          <a-button  type="primary"  @click="confirm"> 确认(confirm)</a-button>
+          <a-button  type="primary"  @click="cancelConfirm"> 取消确认(cancel confirm)</a-button>
+          <a-dropdown v-if="selectedRowKeys.length > 0">
+              <template #overlay>
+                <a-menu>
+                  <a-menu-item key="1" @click="batchHandleDelete"  v-auth="'saleCode:sale_order_form:deleteBatch'">
+                    <Icon icon="ant-design:delete-outlined"></Icon>
+                    删除(delete)
+                  </a-menu-item>
+                </a-menu>
+              </template>
+              <a-button v-auth="'saleCode:sale_order:delete'">批量操作
+                <Icon icon="mdi:chevron-down"></Icon>
+              </a-button>
+        </a-dropdown>
+      </template>
+       <!--操作栏-->
+      <template #action="{ record }">
+        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
+      </template>
+      <!--字段回显插槽-->
+      <template v-slot:bodyCell="{ column, record, index, text }">
+      </template>
+      //
+      <template #viewFile="props">
+        <a @click="viewFileDetail(props)">查看(view)</a>
+      </template>
+    </BasicTable>
+    <!-- 表单区域 -->
+    <!-- <SaleInquiryFormModal @register="registerModal" @success="handleSuccess"></SaleInquiryFormModal>
+    <ViewFileListModal ref="ViewFileListModalRef"></ViewFileListModal>
+    <SelectSaleOrderModal ref="SelectSaleOrderModalRef" @copyProduct="handleCopyProduct"></SelectSaleOrderModal>
+    <ViewHistoryVersionModal ref="ViewHistoryVersionModallRef" ></ViewHistoryVersionModal> -->
+  </div>
+</template>
+
+<script lang="ts" name="saleCode-saleInquiryForm" setup>
+  import {ref, reactive, computed, unref,onMounted} from 'vue';
+  import {BasicTable, useTable, TableAction} from '/@/components/Table';
+  import { useListPage } from '/@/hooks/system/useListPage'
+  import {useModal} from '/@/components/Modal';
+  // import SaleInquiryFormModal from './components/SaleOrderFormModal.vue'
+  import {columns, superQuerySchema} from './PurchaseOrderForm.data';
+  import {list, deleteOne, batchDelete, getImportUrl,getExportUrl,batchSubmit,cancelBatchSubmit,bacthClose,cancelBatchClose,bacthConfirm,cancelBatchConfirm} from './PurchaseOrderyForm.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 JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue';
+  import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
+  // import ViewFileListModal from './components/ViewFileListModal.vue';
+  // import SelectSaleOrderModal from './components/SelectSaleOrderModal.vue';
+  // import ViewHistoryVersionModal from './components/ViewHistoryVersionModal.vue';
+  import { message } from 'ant-design-vue';
+  const formRef = ref();
+  const ViewFileListModalRef = ref();
+  const SelectSaleOrderModalRef = ref()
+  const ViewHistoryVersionModallRef =ref()
+  const queryParam = reactive<any>({});
+  //注册model
+  const [registerModal, {openModal}] = useModal();
+  var classOption = ref([]);
+   //注册table数据
+  const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
+      tableProps:{
+           title: '采购订单',
+           api: list,
+           columns,
+           canResize:false,
+           useSearchForm: false,
+           actionColumn: {
+               width: 200,
+               fixed:'right'
+           },
+           scroll:{
+            x:'4000px'
+           },
+           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
+
+  // 高级查询配置
+  const superQueryConfig = reactive(superQuerySchema);
+
+  /**
+   * 高级查询事件
+   */
+  function handleSuperQuery(params) {
+    Object.keys(params).map((k) => {
+      queryParam[k] = params[k];
+    });
+    reload();
+  }
+   // 自动请求并暴露内部方法
+   onMounted(() => {
+    getOptiom()
+  });
+
+   /**
+    * 新增事件
+    */
+  function handleAdd() {
+     openModal(true, {
+       isUpdate: false,
+       showFooter: true,
+       isRevise: false
+     });
+  }
+   /**
+    * 编辑事件
+    */
+  function handleEdit(record: Recordable) {
+     openModal(true, {
+       record,
+       isUpdate: true,
+       showFooter: true,
+       isRevise: false
+     });
+   }
+
+   //修订
+   function handleRevise(record: Recordable){
+    openModal(true, {
+       record,
+       isUpdate: true,
+       showFooter: true,
+       isRevise: true
+     });
+   }
+
+   //查看历史版本
+   function viewHistoryList(record){
+    ViewHistoryVersionModallRef.value.getTable(record)
+   }
+   //复制
+   function handleCopy(record: Recordable){
+    SelectSaleOrderModalRef.value.getTable(record)
+   }
+   //下载合同
+   function handleDownContract(){
+
+   }
+   //上传基本协议
+   function handleUploadProtocol(){
+
+   }
+   //上传基础协议
+   function handleExportInvoice(){
+
+   }
+  //  产品分类
+  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: 'saleCode:sale_order:edit',
+           ifShow: record.submit=='0'
+         },
+         {
+           label: '修订(revise)',
+           onClick: handleRevise.bind(null, record),
+           auth: 'saleCode:sale_order:editHis',
+           ifShow: record.submit=='1'
+         },
+       ]
+   }
+     /**
+        * 下拉操作栏
+        */
+  function getDropDownAction(record){
+       return [
+         {
+           label: '详情(detail)',
+           onClick: handleDetail.bind(null, record),
+         }, 
+         {
+           label: '查看历史版本(view history)',
+           onClick: viewHistoryList.bind(null, record),
+           auth: 'saleCode:sale_inquiry_form:delete',
+           ifShow: record.submit=='1'
+         },
+         {
+           label: '复制(copy)',
+           onClick: handleCopy.bind(null, record),
+           auth: 'saleCode:sale_inquiry_form:delete',
+         },
+        //  {
+        //    label: '导出发票(export invoice)',
+        //    onClick: handleExportInvoice.bind(null, record),
+        //    auth: 'saleCode:sale_inquiry_form:delete',
+        //    ifShow: record.submit=='1'
+        //  },
+        //  {
+        //    label: '导出预收款发票(export invoice)',
+        //    onClick: handleDetail.bind(null, record),
+        //    auth: 'saleCode:sale_inquiry_form:delete',
+        //    ifShow: record.submit=='1'
+        //  },
+         {
+           label: '删除(delete)',
+           popConfirm: {
+             title: '是否确认删除',
+             confirm: handleDelete.bind(null, record),
+             placement: 'topLeft'
+           },
+           auth: 'saleCode:sale_order: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);
+    }
+  }
+  function close(){
+      if(selectedRowKeys.value.length==0){
+        message.warning('请选择数据')
+      }else{
+        var ids=selectedRowKeys.value.join(',')
+        bacthClose({ids: ids},handleSuccess);
+      }
+    }
+  function cancelClose(){
+    if(selectedRowKeys.value.length==0){
+      message.warning('请选择数据')
+    }else{
+      var ids=selectedRowKeys.value.join(',')
+      cancelBatchClose({ids: ids},handleSuccess);
+    }
+  }
+  function confirm(){
+      if(selectedRowKeys.value.length==0){
+        message.warning('请选择数据')
+      }else{
+        var ids=selectedRowKeys.value.join(',')
+        bacthConfirm({ids: ids},handleSuccess);
+      }
+  }
+  function cancelConfirm(){
+    if(selectedRowKeys.value.length==0){
+      message.warning('请选择数据')
+    }else{
+      var ids=selectedRowKeys.value.join(',')
+      cancelBatchConfirm({ids: ids},handleSuccess);
+    }
+  }
+
+  function viewFileDetail(props){
+    ViewFileListModalRef.value.getTable(props.column.dataIndex,props.record)
+  }
+  function handleCopyProduct(data,mainId){
+    openModal(true, {
+       data,
+       mainId,
+       isUpdate: false,
+       showFooter: true,
+       isCopy: true,
+     });
+  }
+
+  /* ----------------------以下为原生查询需要添加的-------------------------- */
+  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>

+ 203 - 0
src/views/purchase/purchaseOrder/PurchaseOrderyForm.api.ts

@@ -0,0 +1,203 @@
+import {defHttp} from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/purCode/purOrder/list',
+  save='/saleCode/saleOrder/add',
+  edit='/saleCode/saleOrder/edit',
+  revise='/saleCode/saleOrder//editHis',
+  deleteOne = '/saleCode/saleOrder/delete',
+  deleteBatch = '/saleCode/saleOrder/deleteBatch',
+  importExcel = '/saleCode/saleOrder/importExcel',
+  exportXls = '/saleCode/saleOrder/exportXls',
+  queryDataById = '/saleCode/saleOrder/queryById',
+  queryVersonHistoryById='/saleCode/saleOrderHis/queryById',
+  saleOrderFormShipList = '/saleCode/saleOrder/querySaleOrderShipByMainId',
+  saleVersonFormShipList = '/saleCode/saleOrderHis/querySaleOrderShipHisByMainId',
+  saleOrderFormProductList = '/saleCode/saleOrder/querySaleOrderProductByMainId',
+  salVersonFormProductList = '/saleCode/saleOrderHis/querySaleOrderProductHisByMainId',
+  submitBatch='/saleCode/saleOrder/submitBatch',
+  cancelSubmitBatch='saleCode/saleOrder/returnSubmitBatch',
+  closeBatch='/saleCode/saleOrder/submitClose',
+  cancelBatchClose = '/saleCode/saleOrder/returnClose',
+  confirmBatch='/saleCode/saleOrder/submitConfirm',
+  cancelBatchConfirm = '/saleCode/saleOrder/returnSubmitConfirm'
+}
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+
+/**
+ * 查询子表数据
+ * @param params
+ */
+export const querySaleOrderFormShipFormShippTable = (id) => defHttp.get({url: Api.saleOrderFormShipList, params:{ id }});
+/**
+ * 查询子表数据
+ * @param params
+ */
+export const querySaleOrderFormProductListByMainId = (id) => defHttp.get({url: Api.saleOrderFormProductList, 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,isRevise) => {
+  let url = isUpdate ? Api.edit : Api.save;
+  url = isRevise?Api.revise:url;
+  return defHttp.post({url: url, params});
+}
+
+/**
+* 根据id查询数据
+* @param params
+*/
+export const queryDataById = (id) => defHttp.get({url: Api.queryDataById, params:{ id }});
+
+//查询历史版本详情主表
+export const queryVersonHistoryById = (id) => defHttp.get({url: Api.queryVersonHistoryById, params:{ id }});
+
+/**
+ * 查询历史版本船子表数据
+ * @param params
+ */
+export const querysaleVersonFormShipListByMainId = (id) => defHttp.get({url: Api.saleVersonFormShipList, params:{ id }});
+
+/**
+ * 查询历史版本产品子表数据
+ * @param params
+ */
+export const querySaleVersonProductListByMainId = (id) => defHttp.get({url: Api.salVersonFormProductList, 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();
+      });
+    }
+  });
+}
+// 关闭
+export const bacthClose = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认关闭',
+    content: '是否关闭选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.closeBatch, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+// 取消关闭
+export const cancelBatchClose = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认取消关闭',
+    content: '是否取消关闭选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.cancelBatchClose, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+// 确认
+export const bacthConfirm = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认客户确认',
+    content: '是否客户确认选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.confirmBatch, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+// 取消确认
+export const cancelBatchConfirm = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认取消客户确认',
+    content: '是否取消客户确认选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.get({url: Api.cancelBatchConfirm, params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}