| | |
| | | import { useRouter } from "vue-router"; |
| | | import { get, post, postBlob } from '@/utils/request.js' |
| | | import { message, Modal } from 'ant-design-vue'; |
| | | import { logout } from '@/config.js'; |
| | | import { globalState, logout } from '@/config.js'; |
| | | import EditView from './edit.vue' |
| | | import { formatMessage } from '@/utils/localeUtils.js'; |
| | | import useTableSearch from '@/utils/tableUtils.jsx'; |
| | | import ShowOrderDetlComponent from '@/components/orderDetl/show.vue'; |
| | | import { |
| | | DownOutlined, |
| | | UploadOutlined, |
| | | DownloadOutlined, |
| | | } from "@ant-design/icons-vue"; |
| | | const context = getCurrentInstance()?.appContext.config.globalProperties; |
| | | |
| | | const router = useRouter(); |
| | |
| | | |
| | | const { |
| | | getColumnSearchProps, |
| | | handleResizeColumn, |
| | | } = useTableSearch(); |
| | | |
| | | const columns = [ |
| | |
| | | }; |
| | | |
| | | function getPage() { |
| | | post(props.ioModel == 'in' ? '/api/order/in/page' : '/api/order/out/page', { |
| | | let apiUrl = '/api/order/page'; |
| | | if (props.ioModel == 'in') { |
| | | apiUrl = '/api/order/in/page'; |
| | | } else if (props.ioModel == 'out') { |
| | | apiUrl = '/api/order/out/page'; |
| | | } |
| | | |
| | | post(apiUrl, { |
| | | current: currentPage, |
| | | pageSize: pageSize, |
| | | condition: searchInput.value, |
| | |
| | | } |
| | | |
| | | const handleExport = async (intl) => { |
| | | postBlob('/api/order/export', {}).then(result => { |
| | | postBlob('/api/order/export', { |
| | | ioModel: props.ioModel |
| | | }).then(result => { |
| | | const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' }); |
| | | window.location.href = window.URL.createObjectURL(blob); |
| | | return true; |
| | |
| | | getPage() |
| | | } |
| | | |
| | | const handleSyncOrderClick = (e) => { |
| | | if (e.key == 'import') { |
| | | importTemplate() |
| | | } else if (e.key == 'export') { |
| | | exportTemplate() |
| | | } |
| | | } |
| | | |
| | | const importTemplate = () => { |
| | | //导入模板 |
| | | } |
| | | |
| | | const exportTemplate = () => { |
| | | //模板导出 |
| | | postBlob('/api/order/exportTemplate', {}).then(result => { |
| | | const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' }); |
| | | window.location.href = window.URL.createObjectURL(blob); |
| | | return true; |
| | | }) |
| | | } |
| | | |
| | | const fileList = ref([]); |
| | | const handleUploadChange = info => { |
| | | if (info.file.status !== 'uploading') { |
| | | // console.log(info.file, info.fileList); |
| | | } |
| | | if (info.file.status === 'done') { |
| | | let result = info.file.response; |
| | | if(result.code == 200) { |
| | | message.success(`${info.file.name} ${formatMessage('page.upload.success', '上传成功')}`); |
| | | getPage() |
| | | }else { |
| | | message.error(result.msg); |
| | | } |
| | | } else if (info.file.status === 'error') { |
| | | message.error(`${info.file.name} file upload failed.`); |
| | | } |
| | | }; |
| | | |
| | | </script> |
| | | |
| | | <script> |
| | |
| | | |
| | | <template> |
| | | <div> |
| | | <EditView ref="editChild" @tableReload="handleTableReload" :ioModel="ioModel == 'in' ? 1 : 2" /> |
| | | <EditView ref="editChild" @tableReload="handleTableReload" |
| | | :ioModel="ioModel == 'in' ? 1 : ioModel == 'out' ? 2 : null" /> |
| | | <div class="table-header"> |
| | | <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '请输入')" |
| | | style="width: 200px;" @search="onSearch" /> |
| | | <div class="table-header-right"> |
| | | <a-dropdown> |
| | | <template #overlay> |
| | | <a-menu @click="handleSyncOrderClick"> |
| | | <a-menu-item key="import"> |
| | | <a-upload v-model:file-list="fileList" name="file" action="/api/order/upload" |
| | | @change="handleUploadChange" :showUploadList="false" :headers="{ |
| | | Authorization: globalState.token |
| | | }"> |
| | | <UploadOutlined /> |
| | | {{ formatMessage('page.order.import', '单据导入') }} |
| | | </a-upload> |
| | | </a-menu-item> |
| | | |
| | | <a-menu-item key="export"> |
| | | <DownloadOutlined /> |
| | | {{ formatMessage('page.order.export.template', '导出模板') }} |
| | | </a-menu-item> |
| | | </a-menu> |
| | | </template> |
| | | <a-button> |
| | | {{ formatMessage('page.order.sync', '单据同步') }} |
| | | <DownOutlined /> |
| | | </a-button> |
| | | </a-dropdown> |
| | | <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '添加') }}</a-button> |
| | | <a-button @click="handleExport">{{ formatMessage('page.export', '导出') }}</a-button> |
| | | </div> |
| | |
| | | <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }" |
| | | :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id" |
| | | :pagination="{ total: tableData.total, onChange: onPageChange }" |
| | | :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns"> |
| | | :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn"> |
| | | <template #bodyCell="{ column, text, record }"> |
| | | <template v-if="column.dataIndex === 'oper'"> |
| | | <div style="display: flex;justify-content: space-evenly;"> |