瀏覽代碼

销售询价单

jingbb 5 月之前
父節點
當前提交
78c1064aab

+ 119 - 113
src/views/saleCode/saleInquiryForm/SaleInquiryForm.data.ts

@@ -7,20 +7,10 @@ import { getWeekMonthQuarterYear } from '/@/utils';
 //列表数据
 export const columns: BasicColumn[] = [
    {
-    title: '状态(1-已报价,0-已报价)',
-    align:"center",
-    dataIndex: 'status'
-   },
-   {
-    title: '其他状态(other status)',
-    align:"center",
-    dataIndex: 'otherStatus'
-   },
-   {
-    title: '提交(1是 0否)',
+    title: '询价单号(bill code)',
     align:"center",
-    dataIndex: 'submit'
-   },
+    dataIndex: 'billCode'
+   },   
    {
     title: '单据日期(bill date)',
     align:"center",
@@ -30,11 +20,7 @@ export const columns: BasicColumn[] = [
       return text;
     },
    },
-   {
-    title: '询价单号(bill code)',
-    align:"center",
-    dataIndex: 'billCode'
-   },
+  
    {
     title: '询价项目(inquiry project)',
     align:"center",
@@ -46,18 +32,19 @@ export const columns: BasicColumn[] = [
     dataIndex: 'inquiryCustomer'
    },
    {
-    title: '询价平台(inquiry platform)',
-    align:"center",
-    dataIndex: 'inquiryPlatform'
-   },
-   {
-    title: '客户询价单号(customer inquiry number)',
+    title: '询价有效期(inquiry period)始',
     align:"center",
-    dataIndex: 'customerInquiryNumber'
+    dataIndex: 'inquiryPeriodBegin',
+    width:250,
+    customRender:({text}) =>{
+      text = !text ? "" : (text.length > 10 ? text.substr(0,10) : text);
+      return text;
+    },
    },
    {
     title: '询价有效期(inquiry period)止',
     align:"center",
+    width:250,
     dataIndex: 'inquiryPeriodEnd',
     customRender:({text}) =>{
       text = !text ? "" : (text.length > 10 ? text.substr(0,10) : text);
@@ -65,18 +52,19 @@ export const columns: BasicColumn[] = [
     },
    },
    {
-    title: '询价有效期(inquiry period)始',
+    title: '询价平台(inquiry platform)',
     align:"center",
-    dataIndex: 'inquiryPeriodBegin',
-    customRender:({text}) =>{
-      text = !text ? "" : (text.length > 10 ? text.substr(0,10) : text);
-      return text;
-    },
+    dataIndex: 'inquiryPlatform'
    },
    {
-    title: '业务类型(busyness type)',
+    title: '客户询价单号(customer inquiry number)',
+    align:"center",
+    dataIndex: 'customerInquiryNumber'
+   },
+   {
+    title: '船(ship)',
+    dataIndex: 'shipName',
     align:"center",
-    dataIndex: 'busynessType'
    },
    {
     title: '优先级(priority)',
@@ -99,195 +87,200 @@ export const columns: BasicColumn[] = [
     dataIndex: 'maker'
    },
    {
-    title: '销售部门(sale department)',
-    align:"center",
-    dataIndex: 'saleDepartment'
-   },
-   {
-    title: '业务员(salesman)',
+    title: '采购询价组(procurement inquiry team)',
     align:"center",
-    dataIndex: 'salesman'
+    dataIndex: 'inquiryTeam'
    },
    {
-    title: '采购询价组(procurement inquiry team)',
+    title: '业务类型(busyness type)',
     align:"center",
-    dataIndex: 'inquiryTeam'
+    dataIndex: 'busynessType',
    },
    {
-    title: '交期(delivery time)',
+    title: '状态(status)',
     align:"center",
-    dataIndex: 'deliveryTime'
+    dataIndex: 'status',
+    customRender:function (t, r, index) {
+      if(t.text==1){
+        return '已报价'
+      }else if(t.text==0){
+        return '未报价'
+      }
+    }
    },
    {
-    title: '附件(attachs)',
+    title: '其他状态(other status)',
     align:"center",
-    dataIndex: 'attachs'
+    dataIndex: 'otherStatus'
    },
    {
-    title: '询价备注(inquiry notes)',
+    title: '提交(submit)',
     align:"center",
-    dataIndex: 'inquiryNotes'
+    dataIndex: 'submit',
+    customRender:function (t, r, index) {
+      if(t.text==1){
+        return '是(yes)'
+      }else if(t.text==0){
+        return '否(no)'
+      }
+    }
    },
 ];
 
 //子表表格配置
 export const saleInquiryFormShipColumns: JVxeColumn[] = [
     {
-      title: '船id',
-      key: 'shipId',
-      type: JVxeTypes.input,
-      width:"200px",
-      placeholder: '请输入${title}',
-      defaultValue:'',
-    },
-    {
-      title: '船名',
+      title: '船名(ship name)',
       key: 'shipName',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
       defaultValue:'',
     },
     {
-      title: '主机号',
+      title: '主机号(host number)',
       key: 'hostNumber',
       type: JVxeTypes.input,
-      width:"200px",
       placeholder: '请输入${title}',
       defaultValue:'',
     },
     {
-      title: '工程编号',
+      title: '工程编号(project No)',
       key: 'projectNo',
       type: JVxeTypes.input,
-      width:"200px",
       placeholder: '请输入${title}',
       defaultValue:'',
     },
     {
-      title: '船厂',
+      title: '船厂(ship factory)',
       key: 'shipFactory',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
       defaultValue:'',
     },
     {
-      title: '船东',
+      title: '船东(shipowner)',
       key: 'shipowner',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
       defaultValue:'',
     },
-  ]
-export const saleInquiryFormProductColumns: JVxeColumn[] = [
     {
-      title: '产品id',
-      key: 'productId',
-      type: JVxeTypes.inputNumber,
-      width:"200px",
-      placeholder: '请输入${title}',
-      defaultValue:'',
+      title: '操作(operation)',
+      key: 'action',
+      width:"400px",
+      // 固定在右侧
+      fixed: 'right',
+      // 对齐方式为居中
+      align: 'center',
+      // 组件类型定义为【插槽】
+      type: JVxeTypes.slot,
+      // slot 的名称,对应 v-slot 冒号后面和等号前面的内容
+      slotName: 'action',
     },
+  ]
+export const saleInquiryFormProductColumns: JVxeColumn[] = [
     {
-      title: '交期',
+      title: '交期(delivery time)',
       key: 'deliveryTime',
       type: JVxeTypes.date,
-      width:"200px",
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '产品分类',
+      title: '产品分类(product class)',
       key: 'productClass',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '产品编码',
+      title: '产品编码(product code)',
       key: 'productCode',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '产品中文名',
+      title: '产品中文名(chinese name)',
       key: 'chineseName',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '产品英文名',
+      title: '产品英文名(english name)',
       key: 'englishName',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '规格',
+      title: '规格(specifications)',
       key: 'specifications',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '型号',
+      title: '型号(model)',
       key: 'model',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '厂家',
+      title: '厂家(factory)',
       key: 'factory',
-      type: JVxeTypes.input,
-      width:"200px",
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
+      type: JVxeTypes.select,
+      options: [],
+      dictCode: 'factory',
     },
     {
-      title: '质量等级',
+      title: '质量等级(quality grade)',
       key: 'qualityGrade',
       type: JVxeTypes.input,
-      width:"200px",
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '数量',
+      title: '数量(quantity)',
       key: 'quantity',
       type: JVxeTypes.inputNumber,
-      width:"200px",
       placeholder: '请输入${title}',
+      width:"200px",
       defaultValue:'',
     },
     {
-      title: '单位',
+      title: '单位(unit)',
       key: 'unit',
-      type: JVxeTypes.input,
-      width:"200px",
+      type: JVxeTypes.normal,
       placeholder: '请输入${title}',
-      defaultValue:'',
+      defaultValue:'',  
+      width:"200px",
     },
     {
-      title: '需要船检证书(1是 0否)',
+      title: '需要船检证书(need Ship inspection certificate)',
       key: 'needShip',
-      type: JVxeTypes.input,
       width:"200px",
       placeholder: '请输入${title}',
       defaultValue:'',
+      type: JVxeTypes.select,
+      options: [],
+      dictCode: 'yes_or_no',
     },
     {
-      title: '船检证书',
+      title: '船检证书(ship Inspection certificate)',
       key: 'shipInspection',
       type: JVxeTypes.input,
       width:"200px",
@@ -295,13 +288,26 @@ export const saleInquiryFormProductColumns: JVxeColumn[] = [
       defaultValue:'',
     },
     {
-      title: '备注',
+      title: '备注(note)',
       key: 'notes',
-      type: JVxeTypes.input,
       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',
+    },
   ]
 
 // 高级查询数据

+ 140 - 86
src/views/saleCode/saleInquiryForm/SaleInquiryFormList.vue

@@ -4,107 +4,115 @@
     <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="6">
-            <a-form-item name="status">
-              <template #label><span title="状态(1-已报价,0-已报价)">状态(1</span></template>
-              <a-input-number placeholder="请输入状态(1-已报价,0-已报价)" v-model:value="queryParam.status"></a-input-number>           
-            </a-form-item>
-          </a-col>
-          <a-col :lg="6">
-            <a-form-item name="otherStatus">
-              <template #label><span title="其他状态(other status)">其他状态</span></template>
-              <a-input placeholder="请输入其他状态(other status)" v-model:value="queryParam.otherStatus" allow-clear ></a-input>
-            </a-form-item>
-          </a-col>
-          <template v-if="toggleSearchStatus">
-            <a-col :lg="6">
-              <a-form-item name="submit">
-                <template #label><span title="提交(1是 0否)">提交(1</span></template>
-                <a-input placeholder="请输入提交(1是 0否)" v-model:value="queryParam.submit" allow-clear ></a-input>
+          <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>
-            <a-col :lg="6">
+          </a-col>
+          <a-col :lg="8">
               <a-form-item name="billDate">
-                <template #label><span title="单据日期(bill date)">单据日期</span></template>
+                <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="6">
-              <a-form-item name="billCode">
-                <template #label><span title="询价单号(bill code)">询价单号</span></template>
-                <a-input placeholder="请输入询价单号(bill code)" v-model:value="queryParam.billCode" allow-clear ></a-input>
-              </a-form-item>
-            </a-col>
-            <a-col :lg="6">
+          </a-col>           
+          <template v-if="toggleSearchStatus">
+            <a-col :lg="8">
               <a-form-item name="inquiryProject">
-                <template #label><span title="询价项目(inquiry project)">询价项目</span></template>
+                <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="6">
+            <a-col :lg="8">
               <a-form-item name="inquiryCustomer">
-                <template #label><span title="询价客户(inquiry customer)">询价客户</span></template>
+                <template #label><span title="询价客户(inquiry customer)">询价客户(inquiry customer)</span></template>
                 <a-input placeholder="请输入询价客户(inquiry customer)" v-model:value="queryParam.inquiryCustomer" allow-clear ></a-input>
               </a-form-item>
             </a-col>
-            <a-col :lg="6">
-              <a-form-item name="inquiryPlatform">
-                <template #label><span title="询价平台(inquiry platform)">询价平台</span></template>
-                <a-input placeholder="请输入询价平台(inquiry platform)" v-model:value="queryParam.inquiryPlatform" allow-clear ></a-input>
-              </a-form-item>
-            </a-col>
-            <a-col :lg="6">
-              <a-form-item name="customerInquiryNumber">
-                <template #label><span title="客户询价单号(customer inquiry number)">客户询价</span></template>
-                <a-input placeholder="请输入客户询价单号(customer inquiry number)" v-model:value="queryParam.customerInquiryNumber" allow-clear ></a-input>
+            <a-col :lg="8">
+              <a-form-item name="busynessType">
+                <template #label><span title="业务类型(busyness type)">业务类型(busyness type)</span></template>
+                <JDictSelectTag v-model:value="queryParam.busynessType" placeholder="请选择" dictCode="busyness_type"/>
               </a-form-item>
             </a-col>
-            <a-col :lg="6">
-              <a-form-item name="busynessType">
-                <template #label><span title="业务类型(busyness type)">业务类型</span></template>
-                <a-input placeholder="请输入业务类型(busyness type)" v-model:value="queryParam.busynessType" allow-clear ></a-input>
+            <a-col :lg="8">
+              <a-form-item name="ship">
+                <template #label><span title="船(ship)">船(ship)</span></template>
+                <a-input placeholder="请输入船(ship)" v-model:value="queryParam.shipID" allow-clear ></a-input>
               </a-form-item>
             </a-col>
-            <a-col :lg="6">
+            <a-col :lg="8">
               <a-form-item name="priority">
-                <template #label><span title="优先级(priority)">优先级(</span></template>
-                <a-input placeholder="请输入优先级(priority)" v-model:value="queryParam.priority" allow-clear ></a-input>
+                <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="6">
-              <a-form-item name="productionClass">
-                <template #label><span title="产品分类(production class)">产品分类</span></template>
-                <a-input placeholder="请输入产品分类(production class)" v-model:value="queryParam.productionClass" allow-clear ></a-input>
+            <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="6">
+            <a-col :lg="8">
               <a-form-item name="model">
-                <template #label><span title="机型(model)">机型(m</span></template>
-                <a-input placeholder="请输入机型(model)" v-model:value="queryParam.model" allow-clear ></a-input>
+                <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="6">
+            <a-col :lg="8">
               <a-form-item name="maker">
-                <template #label><span title="厂家(maker)">厂家(m</span></template>
+                <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="6">
-              <a-form-item name="saleDepartment">
-                <template #label><span title="销售部门(sale department)">销售部门</span></template>
-                <a-input placeholder="请输入销售部门(sale department)" v-model:value="queryParam.saleDepartment" allow-clear ></a-input>
+            <a-col :lg="8">
+              <a-form-item name="inquiryPlatform">
+                <template #label><span title="询价平台(inquiry platform)">询价平台(inquiry platform)</span></template>
+                <a-input placeholder="请输入询价平台(inquiry platform)" v-model:value="queryParam.inquiryPlatform" allow-clear ></a-input>
               </a-form-item>
             </a-col>
-            <a-col :lg="6">
+
+            <a-col :lg="8">
+              <a-form-item name="submit">
+                <template #label><span title="状态(status)">状态(status)</span></template>
+                <JDictSelectTag v-model:value="queryParam.status" placeholder="请选择" dictCode="inquiry_status"/>
+              </a-form-item>
+            </a-col>
+            
+            <a-col :lg="8">
+              <a-form-item name="saleDepartment" >
+                <template #label><span title="销售部门(sale department)">销售部门(sale department)</span></template>
+								<JSelectDept v-model:value="queryParam.saleDepartment" :multiple="false" />
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
               <a-form-item name="salesman">
-                <template #label><span title="业务员(salesman)">业务员(</span></template>
-                <a-input placeholder="请输入业务员(salesman)" v-model:value="queryParam.salesman" allow-clear ></a-input>
+                <template #label><span title="业务员(salesman)">业务员(salesman)</span></template>
+                <JSelectUser v-model:value="queryParam.salesman" placeholder="请选择" :multiple="false"></JSelectUser>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="8">
+              <a-form-item name="inquiryTeam" :label-col="labelCol1" :wrapper-col="wrapperCol1">
+                <template #label><span title="采购询价组(procurement inquiry team)">采购询价组(procurement inquiry team)</span></template>
+                <JDictSelectTag v-model:value="queryParam.inquiryTeam" placeholder="请选择" dictCode="procurement_inquiry_team"/>
+              </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>
-            <a-col :lg="6">
-              <a-form-item name="inquiryTeam">
-                <template #label><span title="采购询价组(procurement inquiry team)">采购询价</span></template>
-                <a-input placeholder="请输入采购询价组(procurement inquiry team)" v-model:value="queryParam.inquiryTeam" allow-clear ></a-input>
+            <a-col :lg="8">
+              <a-form-item name="submit">
+                <template #label><span title="其他状态(other status)">其他状态(other statu)</span></template>
+                <a-input placeholder="其他状态(other status)" v-model:value="queryParam.otherStatus" allow-clear ></a-input>
+              </a-form-item>
+            </a-col> 
+            <a-col :lg="8">
+              <a-form-item name="customerInquiryNumber" :label-col="labelCol1" :wrapper-col="wrapperCol1">
+                <template #label><span title="客户询价单号(customer inquiry number)">客户询价单号(customer inquiry number)</span></template>
+                <a-input placeholder="请输入客户询价单号(customer inquiry number)" v-model:value="queryParam.customerInquiryNumber" allow-clear ></a-input>
               </a-form-item>
             </a-col>
           </template>
@@ -124,18 +132,18 @@
       </a-form>
     </div>
     <!--引用表格-->
-   <BasicTable @register="registerTable" :rowSelection="rowSelection">
+   <BasicTable @register="registerTable" :rowSelection="rowSelection" size="small" >
      <!--插槽:table标题-->
       <template #tableTitle>
-          <a-button type="primary" v-auth="'saleCode:sale_inquiry_form:add'"  @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
-          <a-button  type="primary" v-auth="'saleCode:sale_inquiry_form:exportXls'"  preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
-          <j-upload-button  type="primary" v-auth="'saleCode:sale_inquiry_form:importExcel'"  preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
+          <a-button type="primary" v-auth="'saleCode:sale_inquiry_form:add'"  @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增(add)</a-button>
+          <a-button  type="primary" v-auth="'saleCode:sale_inquiry_form:exportXls'"  preIcon="ant-design:export-outlined" @click="onExportXls"> 导出(export)</a-button>
+          <a-button  type="primary"  @click="setStatus"> 设置其他状态(set other status)</a-button>
           <a-dropdown v-if="selectedRowKeys.length > 0">
               <template #overlay>
                 <a-menu>
                   <a-menu-item key="1" @click="batchHandleDelete">
                     <Icon icon="ant-design:delete-outlined"></Icon>
-                    删除
+                    删除(delete)
                   </a-menu-item>
                 </a-menu>
               </template>
@@ -143,8 +151,6 @@
                 <Icon icon="mdi:chevron-down"></Icon>
               </a-button>
         </a-dropdown>
-        <!-- 高级查询 -->
-        <super-query :config="superQueryConfig" @search="handleSuperQuery" />
       </template>
        <!--操作栏-->
       <template #action="{ record }">
@@ -156,11 +162,12 @@
     </BasicTable>
     <!-- 表单区域 -->
     <SaleInquiryFormModal @register="registerModal" @success="handleSuccess"></SaleInquiryFormModal>
+    <SetOtherStatus ref="SetOtherStatusRef" @success="handleSuccess"></SetOtherStatus>
   </div>
 </template>
 
 <script lang="ts" name="saleCode-saleInquiryForm" setup>
-  import {ref, reactive, computed, unref} from 'vue';
+  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';
@@ -170,12 +177,21 @@
   import {downloadFile} from '/@/utils/common/renderUtils';
   import { cloneDeep } from "lodash-es";
   import { useUserStore } from '/@/store/modules/user';
+  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 SetOtherStatus from './components/SetOtherStatus.vue';
+  import { message } from 'ant-design-vue';
   const formRef = ref();
   const queryParam = reactive<any>({});
   const checkedKeys = ref<Array<string | number>>([]);
   //注册model
   const [registerModal, {openModal}] = useModal();
   const userStore = useUserStore();
+  var classOption = ref([]);
+  var SetOtherStatusRef = ref()
    //注册table数据
   const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
       tableProps:{
@@ -185,7 +201,7 @@
            canResize:false,
            useSearchForm: false,
            actionColumn: {
-               width: 120,
+               width: 200,
                fixed:'right'
            },
            beforeFetch: async (params) => {
@@ -218,6 +234,10 @@
     });
     reload();
   }
+   // 自动请求并暴露内部方法
+   onMounted(() => {
+    getOptiom()
+  });
 
    /**
     * 新增事件
@@ -238,6 +258,26 @@
        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;
+            });
+  }
    /**
     * 详情
    */
@@ -272,7 +312,7 @@
   function getTableAction(record){
        return [
          {
-           label: '编辑',
+           label: '编辑(edit)',
            onClick: handleEdit.bind(null, record),
            auth: 'saleCode:sale_inquiry_form:edit'
          }
@@ -284,10 +324,10 @@
   function getDropDownAction(record){
        return [
          {
-           label: '详情',
+           label: '详情(detail)',
            onClick: handleDetail.bind(null, record),
          }, {
-           label: '删除',
+           label: '删除(delete)',
            popConfirm: {
              title: '是否确认删除',
              confirm: handleDelete.bind(null, record),
@@ -297,6 +337,14 @@
          }
        ]
    }
+   function setStatus(){
+    if(selectedRowKeys.value.length==0){
+      message.warning('请选择数据')
+    }else{
+    var ids=selectedRowKeys.value.join(',')
+     SetOtherStatusRef.value.getTable(ids)
+    }
+  }
 
   
 
@@ -304,13 +352,19 @@
   const toggleSearchStatus = ref<boolean>(false);
   const labelCol = reactive({
     xs:24,
-    sm:4,
-    xl:6,
-    xxl:4
+    sm:8,
   });
   const wrapperCol = reactive({
     xs: 24,
-    sm: 20,
+    sm: 16,
+  });
+  const labelCol1 = reactive({
+    xs:24,
+    sm:12,
+  });
+  const wrapperCol1 = reactive({
+    xs: 24,
+    sm: 12,
   });
   /**
    * 重置
@@ -352,7 +406,7 @@
     padding: 0;
     .table-page-search-submitButtons {
       display: block;
-      margin-bottom: 24px;
+      margin-bottom: 8px;
       white-space: nowrap;
     }
     .query-group-cust{
@@ -364,7 +418,7 @@
       text-align: center
     }
     .ant-form-item:not(.ant-form-item-with-help){
-      margin-bottom: 16px;
+      margin-bottom: 8px;
       height: 32px;
     }
     :deep(.ant-picker),:deep(.ant-input-number){

+ 14 - 0
src/views/saleCode/saleInquiryForm/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/saleCode/saleInquiryForm/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'
+   },
+   {
+    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},
+   },
+	
+];

+ 17 - 0
src/views/saleCode/saleInquiryForm/components/BaseShipArchive.api.ts

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

+ 94 - 0
src/views/saleCode/saleInquiryForm/components/BaseShipArchive.data.ts

@@ -0,0 +1,94 @@
+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: 'IMO',
+    align:"center",
+    dataIndex: 'imo'
+   },
+   {
+    title: '船名称(ship name)',
+    align:"center",
+    dataIndex: 'shipName'
+   },
+   {
+    title: '客户名称(customer name)',
+    align:"center",
+    dataIndex: 'relateCustomer'
+   },
+];
+//查询数据
+export const searchFormSchema: FormSchema[] = [
+	{
+      label: "IMO",
+      field: 'imo',
+      component: 'Input',
+      // labelWidth: 150,
+      //colProps: {span: 6},
+ 	},
+	{
+      label: "船名称(ship name)",
+      field: 'shipName',
+      labelWidth: 150,
+      component: 'Input',
+      //colProps: {span: 6},
+ 	},
+   {
+    label: '客户名称(customer name)',
+    field: 'relateCustomer',
+    component: 'Input',
+    labelWidth: 180,
+
+   },
+	{
+      label: "hull number",
+      field: 'hullNumber',
+      component: 'Input',
+      //colProps: {span: 6},
+ 	},
+   {
+    label: "船厂(ship factory)",
+    field: 'shipFactory',
+    component: 'JSelectMultiple',
+    labelWidth: 150,
+    componentProps:{
+      dictCode:"ship_factory"
+   },
+    //colProps: {span: 6},
+ },
+ {
+  label: "造船日期(ship date)",
+  field: "shipDate",
+  component: 'RangePicker',
+  labelWidth: 150,
+  componentProps: {
+      valueType: 'Date',
+      showTime:true
+  },
+  //colProps: {span: 6},
+},
+{
+  label: "船类型(ship type)",
+  field: 'shipType',
+  component: 'JSelectMultiple',
+  labelWidth: 180,
+  componentProps:{
+    dictCode:"ship_type"
+ },
+      //colProps: {span: 6},
+},
+
+{
+  label: "状态(status)",
+  field: 'status',
+  component: 'JSelectMultiple',
+  componentProps:{
+    dictCode:"valid_status"
+  },
+  //colProps: {span: 6},
+},
+];

+ 48 - 0
src/views/saleCode/saleInquiryForm/components/BaseShipArchiveAccessories.data.ts

@@ -0,0 +1,48 @@
+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: '配件类型(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: '备注',
+    align:"center",
+    dataIndex: 'notes',
+    key: 'notes'
+   },
+   {
+    title: '附件',
+    align:"center",
+    dataIndex: 'attachs',
+    key: 'attachs'
+   }, */
+];
+//查询数据
+export const searchFormSchema: FormSchema[] = [
+];

+ 104 - 0
src/views/saleCode/saleInquiryForm/components/BaseShipArchiveAccessoriesModal.vue

@@ -0,0 +1,104 @@
+<template>
+ <a-modal
+      title="配件明细(accessories details)"
+      width="70%"
+      :visible="visible"
+      :maskClosable="false"
+      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>
+</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>

+ 200 - 53
src/views/saleCode/saleInquiryForm/components/SaleInquiryFormForm.vue

@@ -4,124 +4,110 @@
       <template #detail>
         <a-form v-bind="formItemLayout" name="SaleInquiryFormForm" ref="formRef">
           <a-row>
-						<a-col :span="8">
-							<a-form-item label="状态(1-已报价,0-已报价)" v-bind="validateInfos.status" id="SaleInquiryFormForm-status" name="status">
-								<a-input-number v-model:value="formData.status" placeholder="请输入状态(1-已报价,0-已报价)" style="width: 100%" />
-							</a-form-item>
-						</a-col>
-						<a-col :span="8">
-							<a-form-item label="其他状态(other status)" v-bind="validateInfos.otherStatus" id="SaleInquiryFormForm-otherStatus" name="otherStatus">
-								<a-input v-model:value="formData.otherStatus" placeholder="请输入其他状态(other status)"  allow-clear ></a-input>
-							</a-form-item>
-						</a-col>
-						<a-col :span="8">
-							<a-form-item label="提交(1是 0否)" v-bind="validateInfos.submit" id="SaleInquiryFormForm-submit" name="submit">
-								<a-input v-model:value="formData.submit" placeholder="请输入提交(1是 0否)"  allow-clear ></a-input>
-							</a-form-item>
-						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="单据日期(bill date)" v-bind="validateInfos.billDate" id="SaleInquiryFormForm-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="8">
+						<a-col :span="12">
 							<a-form-item label="询价单号(bill code)" v-bind="validateInfos.billCode" id="SaleInquiryFormForm-billCode" name="billCode">
 								<a-input v-model:value="formData.billCode" placeholder="请输入询价单号(bill code)"  allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="询价项目(inquiry project)" v-bind="validateInfos.inquiryProject" id="SaleInquiryFormForm-inquiryProject" name="inquiryProject">
-								<a-input v-model:value="formData.inquiryProject" placeholder="请输入询价项目(inquiry project)"  allow-clear ></a-input>
+								<a-input-search v-model:value="formData.inquiryProject" placeholder="请输入询价项目(inquiry project)"  allow-clear enter-button="Search" @search="onSearchProject"></a-input-search>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="询价客户(inquiry customer)" v-bind="validateInfos.inquiryCustomer" id="SaleInquiryFormForm-inquiryCustomer" name="inquiryCustomer">
 								<a-input v-model:value="formData.inquiryCustomer" placeholder="请输入询价客户(inquiry customer)"  allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="询价平台(inquiry platform)" v-bind="validateInfos.inquiryPlatform" id="SaleInquiryFormForm-inquiryPlatform" name="inquiryPlatform">
 								<a-input v-model:value="formData.inquiryPlatform" placeholder="请输入询价平台(inquiry platform)"  allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="客户询价单号(customer inquiry number)" v-bind="validateInfos.customerInquiryNumber" id="SaleInquiryFormForm-customerInquiryNumber" name="customerInquiryNumber">
 								<a-input v-model:value="formData.customerInquiryNumber" placeholder="请输入客户询价单号(customer inquiry number)"  allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="询价有效期(inquiry period)止" v-bind="validateInfos.inquiryPeriodEnd" id="SaleInquiryFormForm-inquiryPeriodEnd" name="inquiryPeriodEnd">
 								<a-date-picker placeholder="请选择询价有效期(inquiry period)止"  v-model:value="formData.inquiryPeriodEnd" value-format="YYYY-MM-DD"  style="width: 100%"  allow-clear />
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="询价有效期(inquiry period)始" v-bind="validateInfos.inquiryPeriodBegin" id="SaleInquiryFormForm-inquiryPeriodBegin" name="inquiryPeriodBegin">
 								<a-date-picker placeholder="请选择询价有效期(inquiry period)始"  v-model:value="formData.inquiryPeriodBegin" value-format="YYYY-MM-DD"  style="width: 100%"  allow-clear />
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="业务类型(busyness type)" v-bind="validateInfos.busynessType" id="SaleInquiryFormForm-busynessType" name="busynessType">
-								<a-input v-model:value="formData.busynessType" placeholder="请输入业务类型(busyness type)"  allow-clear ></a-input>
+                <JDictSelectTag v-model:value="formData.busynessType" placeholder="请选择" dictCode="busyness_type"/>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="优先级(priority)" v-bind="validateInfos.priority" id="SaleInquiryFormForm-priority" name="priority">
-								<a-input v-model:value="formData.priority" placeholder="请输入优先级(priority)"  allow-clear ></a-input>
+                <JDictSelectTag v-model:value="formData.priority" placeholder="请选择" dictCode="priority"/>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="产品分类(production class)" v-bind="validateInfos.productionClass" id="SaleInquiryFormForm-productionClass" name="productionClass">
-								<a-input v-model:value="formData.productionClass" placeholder="请输入产品分类(production class)"  allow-clear ></a-input>
+                <JSelectInput   v-model:value="formData.productionClass"  placeholder="请选择" :options="classOption" ></JSelectInput>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="机型(model)" v-bind="validateInfos.model" id="SaleInquiryFormForm-model" name="model">
-								<a-input v-model:value="formData.model" placeholder="请输入机型(model)"  allow-clear ></a-input>
+                <JDictSelectTag v-model:value="formData.model" placeholder="请选择" dictCode="model_typer"/>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="厂家(maker)" v-bind="validateInfos.maker" id="SaleInquiryFormForm-maker" name="maker">
 								<a-input v-model:value="formData.maker" placeholder="请输入厂家(maker)"  allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="销售部门(sale department)" v-bind="validateInfos.saleDepartment" id="SaleInquiryFormForm-saleDepartment" name="saleDepartment">
-								<a-input v-model:value="formData.saleDepartment" placeholder="请输入销售部门(sale department)"  allow-clear ></a-input>
+								<JSelectDept v-model:value="formData.saleDepartment" :multiple="false" />
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="业务员(salesman)" v-bind="validateInfos.salesman" id="SaleInquiryFormForm-salesman" name="salesman">
-								<a-input v-model:value="formData.salesman" placeholder="请输入业务员(salesman)"  allow-clear ></a-input>
+                <JSelectUser v-model:value="formData.salesman" placeholder="请选择" :multiple="false"></JSelectUser>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="采购询价组(procurement inquiry team)" v-bind="validateInfos.inquiryTeam" id="SaleInquiryFormForm-inquiryTeam" name="inquiryTeam">
-								<a-input v-model:value="formData.inquiryTeam" placeholder="请输入采购询价组(procurement inquiry team)"  allow-clear ></a-input>
+                <JDictSelectTag v-model:value="formData.inquiryTeam" placeholder="请选择" dictCode="procurement_inquiry_team"/>
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
+						<a-col :span="12">
 							<a-form-item label="交期(delivery time)" v-bind="validateInfos.deliveryTime" id="SaleInquiryFormForm-deliveryTime" name="deliveryTime">
 								<a-date-picker placeholder="请选择交期(delivery time)"  v-model:value="formData.deliveryTime" showTime value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%"  allow-clear />
 							</a-form-item>
 						</a-col>
-						<a-col :span="8">
-							<a-form-item label="附件(attachs)" v-bind="validateInfos.attachs" id="SaleInquiryFormForm-attachs" name="attachs">
-								<a-input v-model:value="formData.attachs" placeholder="请输入附件(attachs)"  allow-clear ></a-input>
-							</a-form-item>
-						</a-col>
-						<a-col :span="8">
+            <a-col :span="12">
 							<a-form-item label="询价备注(inquiry notes)" v-bind="validateInfos.inquiryNotes" id="SaleInquiryFormForm-inquiryNotes" name="inquiryNotes">
 								<a-input v-model:value="formData.inquiryNotes" placeholder="请输入询价备注(inquiry notes)"  allow-clear ></a-input>
 							</a-form-item>
 						</a-col>
+						<a-col :span="12">
+							<a-form-item label="附件(attachs)" v-bind="validateInfos.attachs" id="SaleInquiryFormForm-attachs" name="attachs">
+								<JUpload v-model:value="formData.attachsn"></JUpload>
+							</a-form-item>
+						</a-col>
           </a-row>
         </a-form>
       </template>
     </JFormContainer>
 
 		<!-- 子表单区域 -->
-    <a-tabs v-model:activeKey="activeKey" animated>
-      <a-tab-pane tab="销售询价单子表 - 船明细" key="saleInquiryFormShip" :forceRender="true">
+    <a-tabs v-model:activeKey="activeKey" animated  style=" padding: 24px;padding-top: 0px;">
+      <a-tab-pane tab="销售询价单子表 - 船明细(ship details)" key="saleInquiryFormShip" :forceRender="true">
+        <a-button type="primary" @click="selectShip"> 选择船(select ship)</a-button>
         <j-vxe-table
           :keep-source="true"
           resizable
@@ -133,9 +119,20 @@
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"
-          :toolbar="true"/>
+          >
+            <template #action="props" >
+              <a @click="viewAccessory(props)" >查看配件信息(view accessory information)</a>
+              <a-divider type="vertical"/>
+                <a-popconfirm title="确定删除吗?" @confirm="handleDelete(props)">
+                  <a>删除(delete)</a>
+                </a-popconfirm>
+            </template>
+          </j-vxe-table>
       </a-tab-pane>
-      <a-tab-pane tab="销售询价单子表 - 产品明细" key="saleInquiryFormProduct" :forceRender="true">
+      <a-tab-pane tab="销售询价单子表 - 产品明细(product details)" key="saleInquiryFormProduct" :forceRender="true">
+        <a-button type="primary" @click="selectProducts" style="margin-right: 1%;margin-bottom: 1%;"> 选择产品(select product)</a-button>
+        <a-button type="primary" @click="setNeed" style="margin-right: 1%;"> 设置需要船检证书(set need ship inspection certificate)</a-button>
+        <a-button type="primary" @click="setNotNeed"> 设置不需要船检证书(set need not ship inspection certificate)</a-button>
         <j-vxe-table
           :keep-source="true"
           resizable
@@ -147,9 +144,19 @@
           :disabled="disabled"
           :rowNumber="true"
           :rowSelection="true"
-          :toolbar="true"/>
+          >
+          <template #action="props">
+                <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)">
+                  <a>删除(delete)</a>
+                </a-popconfirm>
+            </template>
+          </j-vxe-table>
       </a-tab-pane>
     </a-tabs>
+    <SelectShipSModal ref="SelectShipSModalRef" @select="addShip"></SelectShipSModal>
+    <BaseShipArchiveAccessoriesList ref="BaseShipArchiveAccessoriesListRef"></BaseShipArchiveAccessoriesList>
+    <SelectPrpductModal ref="SelectPrpductModalRef" @selectProduct="addProduct"></SelectPrpductModal>
+    <SelectProjectModal ref="SelectProjectModalRef" @selectProject="addProject"></SelectProjectModal>
   </a-spin>
 </template>
 
@@ -160,15 +167,32 @@
   import { querySaleInquiryFormShipListByMainId, querySaleInquiryFormProductListByMainId, queryDataById, saveOrUpdate } from '../SaleInquiryForm.api';
   import { JVxeTable } from '/@/components/jeecg/JVxeTable';
   import {saleInquiryFormShipColumns, saleInquiryFormProductColumns} from '../SaleInquiryForm.data';
+  import SelectShipSModal from './SelectShipSModal.vue';
+  import BaseShipArchiveAccessoriesList from './BaseShipArchiveAccessoriesModal.vue';
+  import SelectPrpductModal from './SelectPrpductModal.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 JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue';
+  import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
   import { Form } from 'ant-design-vue';
   const useForm = Form.useForm;
-
   export default defineComponent({
     name: "SaleInquiryFormForm",
     components:{
       JVxeTable,
 			JFormContainer,
+      SelectShipSModal,
+      BaseShipArchiveAccessoriesList,
+      SelectPrpductModal,
+      JUpload,
+      SelectProjectModal,
+      JDictSelectTag,
+      JSelectInput,
+      JSelectUser,
+      JSelectDept
     },
     props:{
       formDisabled:{
@@ -182,6 +206,8 @@
     setup(props, {emit}) {
       const loading = ref(false);
       const formRef = ref();
+      var SelectPrpductModalRef = ref()
+      var SelectProjectModalRef = ref()
       const saleInquiryFormShipTableRef = ref();
       const saleInquiryFormShipTable = reactive<Record<string, any>>({
         loading: false,
@@ -194,7 +220,10 @@
         columns: saleInquiryFormProductColumns,
         dataSource: []
       });
+      var SelectShipSModalRef = ref();
+      var BaseShipArchiveAccessoriesListRef = ref();
       const activeKey = ref('saleInquiryFormShip');
+      var classOption = ref([]);
       const formData = reactive<Record<string, any>>({
         id: '',
         status: undefined,
@@ -250,6 +279,8 @@
         resetFields();
         saleInquiryFormShipTable.dataSource = [];
         saleInquiryFormProductTable.dataSource = [];
+        activeKey.value = 'saleInquiryFormShip'
+        getOptiom()
       }
 
       async function edit(row) {
@@ -260,6 +291,7 @@
         saleInquiryFormShipTable.dataSource = [...saleInquiryFormShipDataList];
         const saleInquiryFormProductDataList = await querySaleInquiryFormProductListByMainId(row['id']);
         saleInquiryFormProductTable.dataSource = [...saleInquiryFormProductDataList];
+        getOptiom()
       }
 
       async function queryMainData(id) {
@@ -323,8 +355,86 @@
       function handleFormChange(key, value) {
         formData[key] = value;
       }
+      function handleDelete({row}) {
+        saleInquiryFormShipTableRef.value?.removeRows(row)    
+      }
+      function handleDelete1({row}) {
+        saleInquiryFormProductTableRef.value?.removeRows(row)    
+      }
+      function selectShip(){
+        SelectShipSModalRef.value.getTable()
+      }
+      function addShip(data){
+        var arr = data.concat(saleInquiryFormShipTable.dataSource)
+        arr.map(item=>item.shipowner = item.relateCustomer)
+        saleInquiryFormShipTable.dataSource=arr        
+      }
+      function addProduct(data){
+        var arrProduct = data.concat(saleInquiryFormProductTable.dataSource)
+        arrProduct.map(item=>{
+          item.productClass = item.classId
+          item.productCode = item.code
+          item.unit = item.measurementUnit
+        })
+        saleInquiryFormProductTable.dataSource=arrProduct      
+      }
+      function addProject(data) {
+        formData.inquiryProject = data[0].name
+      }
+      function viewAccessory(prop){
+        BaseShipArchiveAccessoriesListRef.value.getTable(prop.row)
+      }
+      function selectProducts(){
+        SelectPrpductModalRef.value.getTable()
+      }
+      function setNeed(){
+        const values = saleInquiryFormProductTableRef.value.getSelectionData()        
+        values.map(item=>{
+          saleInquiryFormProductTable.dataSource.map(event=>{
+            if(item.id == event.id){
+              event.needShip = 1
+            }
+          })
+          const xTable = saleInquiryFormProductTableRef.value!.getXTable();//关键代码 如果不更新 重新加载表格即可
+          xTable.loadData(saleInquiryFormProductTable.dataSource)
 
+        })
+      }
+      function setNotNeed(){
+        const values = saleInquiryFormProductTableRef.value.getSelectionData()        
+        values.map(item=>{
+          saleInquiryFormProductTable.dataSource.map(event=>{
+            if(item.id == event.id){
+              event.needShip = 0
+            }
+          })
+          const xTable = saleInquiryFormProductTableRef.value!.getXTable();//关键代码 如果不更新 重新加载表格即可
+          xTable.loadData(saleInquiryFormProductTable.dataSource)
 
+        })
+      }
+      function onSearchProject(){
+        SelectProjectModalRef.value.getTable()
+      }
+      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;
+            });
+      }
       return {
         saleInquiryFormShipTableRef,
         saleInquiryFormShipTable,
@@ -341,11 +451,48 @@
         disabled,
         getFormData,
         submitForm,
+        SelectShipSModalRef,
         add,
         edit,
         formRef,
+        selectShip,
+        addShip,
+        addProduct,
+        BaseShipArchiveAccessoriesListRef,
+        viewAccessory,
+        handleDelete,
+        handleDelete1,
+        selectProducts,
+        setNeed,
+        setNotNeed,
+        SelectPrpductModalRef,
+        SelectProjectModalRef,
+        onSearchProject,
+        addProject,
+        getOptiom,
+        classOption
       }
     }
   });
 </script>
-<style lang="less" scoped></style>
+<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>

+ 1 - 1
src/views/saleCode/saleInquiryForm/components/SaleInquiryFormModal.vue

@@ -1,5 +1,5 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" :width="1024" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="95%" @ok="handleSubmit">
     <sale-inquiry-form-form ref="formComponent" :formDisabled="formDisabled" :formBpm="false" @success="submitSuccess"></sale-inquiry-form-form>
   </BasicModal>
 </template>

+ 83 - 0
src/views/saleCode/saleInquiryForm/components/SelectProjectModal.vue

@@ -0,0 +1,83 @@
+<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 = []
+  }
+    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>

+ 340 - 0
src/views/saleCode/saleInquiryForm/components/SelectPrpductModal.vue

@@ -0,0 +1,340 @@
+<template>
+    <a-modal
+      title="选择产品(select product)"
+      width="95%"
+      :visible="visible"
+      :maskClosable="false"
+      switchFullscreen
+      @ok = "handleOk"
+      @cancel="handleCancel">
+        <div>
+          <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
+            <div class="table-page-search-wrapper">
+                <a-form :model="queryParams" :label-col="labelCol" :wrapper-col="wrapperCol" @keyup.enter.native="searchQuery">
+                <a-row :gutter="24">
+                    <a-col :md="6" :sm="8">
+                        <a-form-item label="分类(class)">
+                            <!-- <a-input placeholder="请输入" v-model:value="queryParams.classId"></a-input> -->
+                            <JSelectInput   v-model:value="queryParams.classId"  placeholder="请选择" :options="classOption" ></JSelectInput>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="8">
+                        <a-form-item label="编码(code)">
+                            <a-input placeholder="请输入" v-model:value="queryParams.code"></a-input>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="8">
+                        <a-form-item label="中文名(Chinese name)">
+                            <a-input placeholder="请输入" v-model:value="queryParams.chineseName"></a-input>
+                        </a-form-item>
+                    </a-col>
+                    <template v-if="toggleSearchStatus">
+                        <a-col :md="6" :sm="8">
+                            <a-form-item label="英文名(English name)">
+                                <a-input placeholder="请输入" v-model:value="queryParams.englishName"></a-input>
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="6" :sm="8">
+                            <a-form-item label="规格(specifications)">
+                                <a-input placeholder="请输入" v-model:value="queryParams.specifications"></a-input>
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="6" :sm="8">
+                            <a-form-item label="型号(model)">
+                                <a-input placeholder="请输入" v-model:value="queryParams.model"></a-input>
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="6" :sm="8">
+                            <a-form-item label="虚拟产品(virtual product)" :label-col="labelCol1" :wrapper-col="wrapperCol1">
+                                <JDictSelectTag v-model:value="queryParams.virtualProduct" placeholder="请选择" dictCode="yes_or_no"/>
+                            </a-form-item>
+                        </a-col>
+                        <a-col :md="6" :sm="8">
+                            <a-form-item label="有害物质(harmful substances)" :label-col="labelCol1" :wrapper-col="wrapperCol1">
+                                <JDictSelectTag v-model:value="queryParams.harmfulSubstances" placeholder="请选择" dictCode="yes_or_no"/>
+                            </a-form-item>
+                        </a-col>
+                    </template>
+                    <a-col :md="6" :sm="8">
+                        <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+                            <a-button type="primary" @click="searchQuery" >查询(search)</a-button>
+                            <a-button type="primary" @click="searchReset"  style="margin-left: 8px">重置(reset)</a-button>
+                            <a @click="handleToggleSearch" style="margin-left: 8px">
+                            {{ toggleSearchStatus ? '收起' : '展开' }}
+                            <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
+                            </a>
+                        </span>
+                    </a-col>
+                </a-row>
+            </a-form>
+           </div>
+        </a-card>
+
+        <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
+            <a-alert type="info" show-icon class="alert" style="margin-bottom: 8px">
+            <template #message>
+                <template v-if="selectedRowKeys.length > 0">
+                <span>已选中 {{ selectedRowKeys.length }} 条记录</span>
+                <a-divider type="vertical" />
+                <a @click="selectedRowKeys = []">清空</a>
+                </template>
+                <template v-else>
+                <span>未选中任何数据</span>
+                </template>
+            </template>
+            </a-alert>
+            <a-table
+                :columns="columns"
+                :row-key="record => record.id"
+                :data-source="dataSource"
+                bordered
+                size="small"
+                @change="handleTableChange"
+                :pagination="pagination"
+                :scroll="{ x: 2500, y: 300 }"
+                :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+            >
+            </a-table>
+        </a-card>
+      </div>
+    </a-modal>
+</template>
+<script lang="ts" setup>
+    import {ref, reactive } from 'vue';
+    import { defHttp } from '/@/utils/http/axios';
+    import { message } from 'ant-design-vue';
+    import { filterObj, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
+    import { JDictSelectTag} from '/@/components/Form';
+    import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
+    const emit = defineEmits([ 'selectProduct']); //定义emit
+    let classOption = ref([])
+    var visible = ref(false)
+    const columns = [
+        {
+            title: '分类(class)',
+            dataIndex: 'classId',
+            key: 'classId',
+            align:"center"
+        },
+        {
+            title: '编码(code)',
+            dataIndex: 'code',
+            key: 'code',
+            align:"center"
+        },
+        {
+            title: '中文名(Chinese name)',
+            dataIndex: 'chineseName',
+            key: 'chineseName',
+            align:"center",
+            width:200
+        },
+        {
+            title: '英文名(English name)',
+            key: 'englishName',
+            dataIndex: 'englishName',
+            align:"center"
+        },
+        {
+            title: '规格(specifications)',
+            key: 'specifications',
+            dataIndex: 'specifications',
+            align:"center"
+        },
+        {
+            title: '型号(model)',
+            key: 'model',
+            dataIndex: 'model',
+            align:"center"
+        },
+        {
+            title: '计量单位(measurement unit)',
+            key: 'measurementUnit',
+            dataIndex: 'measurementUnit',
+            align:"center",
+            width:250
+        },
+        {
+            title: '虚拟产品(virtual product)',
+            key: 'virtualProduct',
+            dataIndex: 'virtualProduct',
+            align:"center",
+            customRender:function (t, r, index) {
+              if(t.text==1){
+                return '是(yes)'
+              }else if(t.text==0){
+                return '否(no)'
+              }else{
+                return ''
+              } 
+            }
+        },
+        {
+            title: '有害物质(harmful substances)',
+            key: 'harmfulSubstances',
+            dataIndex: 'harmfulSubstances',
+            align:"center",
+            width:250,
+            customRender:function (t, r, index) {
+              if(t.text==1){
+                return '是(yes)'
+              }else if(t.text==0){
+                return '否(no)'
+              }else{
+                return ''
+              } 
+            }
+        },
+    ];
+    const labelCol = ref({
+    xs: { span: 24 },
+    sm: { span: 9 },
+    });
+    const wrapperCol = ref({
+        xs: { span: 24 },
+        sm: { span: 15 },
+    });
+    const labelCol1 = ref({
+    xs: { span: 24 },
+    sm: { span: 12 },
+    });
+    const wrapperCol1 = ref({
+        xs: { span: 24 },
+        sm: { span: 12 },
+    });
+    const dataSource =ref([]);
+    let selectedRowKeys = ref([]);
+    let selectedRows = ref([]);
+    const toggleSearchStatus = ref(false);
+    const queryParams = ref({
+        classId:'',
+        code:'',
+        chineseName:'',
+        englishName:'',
+        specifications:'',
+        model:'',
+        chineseAlias:'',
+        englishAlias:'',
+        status:'',
+        virtualProduct:'',
+        harmfulSubstances:'',
+    });
+    let pagination = ref({
+      current: 1,
+      pageSize: 10,
+      total: '', // 假设总共有100条数据
+      showSizeChanger: true,
+      showQuickJumper: true,
+      showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 共" + total + "条"
+      },
+      size:'small'
+    });
+    function loadData(){
+        let params = getQueryParams();
+        defHttp
+        .get({ url: '/baseCode/baseProductArchive/list',params}, { isTransformResponse: false })
+        .then((res) => {
+            if (res.success) {
+                dataSource.value = res.result.records;
+                pagination.value.total = res.result.total;
+                pagination.value.current = res.result.current;
+                pagination.value.pageSize = res.result.size;                
+            } else {
+                message.error(res.message);
+            }
+        })
+        .finally(() => {
+            // loading.value = false;
+        });
+    }
+    function getQueryParams(){
+        let params = Object.assign(queryParams.value);
+        params.pageNo = pagination.value.current;
+        params.pageSize = pagination.value.pageSize;
+        return filterObj(params);
+    }
+    function handleTableChange(paginations, filters, sorter){
+        pagination.value.total = paginations.total;
+        pagination.value.current = paginations.current;
+        pagination.value.pageSize = paginations.pageSize;
+        loadData()
+    };
+    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 searchQuery(){
+        loadData();
+    }
+    function searchReset(){
+        queryParams.value = {
+            classId:'',
+            code:'',
+            chineseName:'',
+            englishName:'',
+            specifications:'',
+            model:'',
+            chineseAlias:'',
+            englishAlias:'',
+            status:'',
+            virtualProduct:'',
+            harmfulSubstances:'',
+        }
+        pagination.value.current =1;
+        pagination.value.pageSize = 10; 
+        loadData();
+    }
+    function handleToggleSearch(){
+        toggleSearchStatus.value = !toggleSearchStatus.value;
+    }
+    function onSelectChange(keys,rows){
+        selectedRowKeys.value = keys
+        selectedRows.value = rows
+    }
+    function handleOk(){
+      if(selectedRowKeys.value.length==0){
+        message.error('请勾选数据');
+      }else{
+        emit('selectProduct', selectedRows.value)
+        handleCancel()
+      }
+    }
+    function handleCancel(){
+      visible.value = false
+      selectedRowKeys.value = []
+      selectedRows.value=[]
+    }
+    function getTable(){
+        visible.value = true
+        loadData()
+        getOptiom()
+    }
+    defineExpose({
+      getTable
+    });
+</script>
+<style scoped lang="less">
+/deep/.ant-form-item{
+    margin-bottom: 8px !important;
+}
+// /deep/.ant-table-wrapper .ant-table-thead > tr > th, .ant-table-wrapper .ant-table-thead > tr > td{
+//     padding: 8px !important;
+// }
+
+</style>

+ 84 - 0
src/views/saleCode/saleInquiryForm/components/SelectShipSModal.vue

@@ -0,0 +1,84 @@
+<template>
+    <a-modal
+      title="选择船(select ship)"
+      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 './BaseShipArchive.data';
+  import {list} from './BaseShipArchive.api';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  const queryParam = reactive<any>({});
+  var visible = ref(false);
+  const emit = defineEmits([ 'select']); //定义emit
+  //注册model
+  const { createMessage} = useMessage();
+  //注册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 = []
+  }
+    function handleOk() {
+        if(selectedRowKeys.value.length==0){
+            createMessage('请选择数据')
+        }else{
+            emit('select',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>

+ 84 - 0
src/views/saleCode/saleInquiryForm/components/SetOtherStatus.vue

@@ -0,0 +1,84 @@
+<template>
+    <a-modal
+      title="选择产品(select product)"
+      width="45%"
+      :visible="visible"
+      :maskClosable="false"
+      switchFullscreen
+      @ok = "handleOk"
+      @cancel="handleCancel">
+        <div>
+          <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
+            <div class="table-page-search-wrapper">
+                <a-form :model="form" :label-col="labelCol" :wrapper-col="wrapperCol" >
+                <a-row :gutter="24">
+                    <a-col :md="24" :sm="24">
+                        <a-form-item label="分类(class)">
+                            <a-input placeholder="请输入" v-model:value="form.otherStatus"></a-input>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+           </div>
+        </a-card>
+      </div>
+    </a-modal>
+</template>
+<script lang="ts" setup>
+    import {ref, reactive } from 'vue';
+    import { defHttp } from '/@/utils/http/axios';
+    import { message } from 'ant-design-vue';
+    import { filterObj, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
+    var visible = ref(false);
+    const emit = defineEmits([ 'success']); //定义emit
+    var form = ref({
+        otherStatus :""
+    });
+    const labelCol = ref({
+        xs: { span: 24 },
+        sm: { span: 3 },
+    });
+    const wrapperCol = ref({
+        xs: { span: 24 },
+        sm: { span: 21 },
+    });
+    var fatherIds=ref("");
+    function handleOk(){
+        let params ={
+            ids:fatherIds.value,
+            otherState  : form.value.otherStatus
+        }
+        defHttp
+        .get({ url: '/saleCode/saleInquiryForm/setOtherState',params}, { isTransformResponse: false })
+        .then((res) => {
+            if (res.success) {
+                emit('success')
+                handleCancel()
+            }else{
+                message.error(res.message);
+            }
+        })
+    }
+    function handleCancel(){
+        visible.value = false;
+        form.value.otherStatus=''
+        fatherIds.value = ''
+    }
+    function getTable(ids){
+        debugger
+        visible.value = true
+        fatherIds.value = ids
+    }
+    defineExpose({
+        getTable
+    });
+</script>
+<style scoped lang="less">
+/deep/.ant-form-item{
+    margin-bottom: 8px !important;
+}
+// /deep/.ant-table-wrapper .ant-table-thead > tr > th, .ant-table-wrapper .ant-table-thead > tr > td{
+//     padding: 8px !important;
+// }
+
+</style>