<template> <div class="p-2"> <!--查询区域--> <div class="jeecg-basic-table-form-container"> <a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-row :gutter="24"> <a-col :lg="8"> <a-form-item name="billCode"> <template #label><span title="询价单号(bill code)">报价单号(bill code)</span></template> <JInput placeholder="请输入询价单号(bill code)" v-model:value="queryParam.billCode" allow-clear AutoComplete="off" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="quotationProject" > <template #label ><span title="报价项目(quotation project)">报价项目(quotation project)</span></template> <ApiSelect :api="ProjectOption" showSearch v-model:value="queryParam.quotationProject" :filterOption="true" resultField="records" labelField="code" valueField="id" :params="{ pageSize: -1 }" optionFilterProp="label" /> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> <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="quotationCustomer"> <template #label><span title="报价客户(quotation customer)">报价客户(quotation customer)</span></template> <JSelect v-model:value="queryParam.quotationCustomer" :get-option-url="CustomerOption" :showField="showField"></JSelect> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="priority"> <template #label><span title="优先级(priority)">优先级(priority)</span></template> <JDictSelectTag v-model:value="queryParam.priority" placeholder="请选择" dictCode="priority" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="productionClass"> <template #label><span title="产品分类(production class)">产品分类(production class)</span></template> <JDictSelectTag v-model:value="queryParam.productionClass" placeholder="" dictCode="base_product_class,name,id,del_flag=0 and parent_id is null" page="false" showSearch /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="model"> <template #label><span title="机型(model)">机型(model)</span></template> <JDictSelectTag v-model:value="queryParam.model" placeholder="请选择" dictCode="model_typer" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="maker"> <template #label><span title="厂家(maker)">厂家(maker)</span></template> <JDictSelectTag v-model:value="queryParam.maker" placeholder="请选择" dictCode="factory" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="englishName"> <template #label><span title="产品英文名(english name)">产品英文名(english name)</span></template> <JInput placeholder="请输入产品英文名(english name)" v-model:value="queryParam.englishName" allow-clear AutoComplete="off" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="productCode"> <template #label><span title="产品编码(product code)">产品编码(product code)</span></template> <JInput placeholder="请输入产品编码(product code)" v-model:value="queryParam.productCode" allow-clear AutoComplete="off" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="model"> <template #label><span title="型号(model">型号(model)</span></template> <JInput placeholder="请输入型号(model)" v-model:value="queryParam.model" allow-clear AutoComplete="off" /> </a-form-item> </a-col> <a-col :lg="8"> <a-form-item name="status"> <template #label><span title="状态(status)">状态(status)</span></template> <JDictSelectTag v-model:value="queryParam.status" placeholder="请选择" dictCode="quotation_status" /> </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_quotation:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增(add)</a-button> <a-button type="primary" v-auth="'saleCode:sale_quotation: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-dropdown v-if="selectedRowKeys.length > 0"> <template #overlay> <a-menu> <a-menu-item key="1" @click="batchHandleDelete" v-auth="'saleCode:sale_quotation:deleteBatch'"> <Icon icon="ant-design:delete-outlined" /> 删除(delete) </a-menu-item> </a-menu> </template> <a-button v-auth="'saleCode:sale_inquiry_form:deleteBatch'" >批量操作 <Icon icon="mdi:chevron-down" /> </a-button> </a-dropdown> </template> <!--操作栏--> <template #action="{ record }"> <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" /> </template> <!--字段回显插槽--> <template #bodyCell="{ column, record, index, text }"> </template> </BasicTable> <quotationFormModal @register="registerModal" @success="handleSuccess" /> <ViewHistoryVersionModal ref="ViewHistoryVersionModalRef" @success="handleSuccess" /> <!-- 表单区域 --> </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 { columns, superQuerySchema } from './quotationForm.data'; import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, batchSubmit, cancelBatchSubmit, ProjectOption, CustomerOption, } from './quotationForm.api'; import { cloneDeep } from 'lodash-es'; import { JDictSelectTag, ApiSelect, JInput ,JSelect} from '/@/components/Form'; import quotationFormModal from './components/quotationFormModal.vue'; import ViewHistoryVersionModal from './components/ViewHistoryVersionModal.vue'; import { message } from 'ant-design-vue'; import { useMethods } from '/@/hooks/system/useMethods'; const { handleExportXlsx, } = useMethods(); const formRef = ref(); const queryParam = reactive<any>({}); const checkedKeys = ref<Array<string | number>>([]); //注册model const [registerModal, { openModal }] = useModal(); var showField = ref('currency+name'); var ViewHistoryVersionModalRef = ref(); //注册table数据 const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ tableProps: { title: '报价单', api: list, columns, canResize: false, useSearchForm: false, actionColumn: { width: 440, fixed: 'right', }, scroll: { x: '2700px', y:'calc(100vh - 400px)', }, 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(); } /** * 新增事件 */ 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 handleViewHistory(record: Recordable) { ViewHistoryVersionModalRef.value.getTable(record); } /** * 详情 */ function handleDetail(record: Recordable) { openModal(true, { record, isUpdate: true, showFooter: false, isRevise: 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: '导出(export)', onClick: onExportXlsNow.bind(null, record), auth: 'saleCode:sale_quotation:edit', }, { label: '编辑(edit)', onClick: handleEdit.bind(null, record), auth: 'saleCode:sale_quotation:edit', ifShow: record.status == '0', }, { label: '修订(revise)', ifShow: record.status == '1', auth: 'saleCode:sale_quotation:editHis', onClick: handleRevise.bind(null, record), }, { label: '查看历史版本(history)', onClick: handleViewHistory.bind(null, record), ifShow: record.status == '1', }, { label: '删除(delete)', popConfirm: { title: '是否确认删除', confirm: handleDelete.bind(null, record), placement: 'topLeft', }, ifShow: record.status == '0', auth: 'saleCode:sale_quotation:delete', }, ]; } /** * 下拉操作栏 */ function getDropDownAction(record) { return [ { label: '详情(detail)', onClick: handleDetail.bind(null, record), }, ]; } 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); } } async function onExportXlsNow(record) { var obj ={ id:record.id } handleExportXlsx(record.billCode, getExportUrl,obj) } /* ----------------------以下为原生查询需要添加的-------------------------- */ const toggleSearchStatus = ref<boolean>(false); const labelCol = reactive({ xs: 24, sm: 9, }); const wrapperCol = reactive({ xs: 24, sm: 17, }); 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>