| | |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | 'base.base':'Base', |
| | | 'base.tag':'Tag', |
| | | 'base.mat':'Mat', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
| | | '':'', |
New file |
| | |
| | | <script setup> |
| | | import { ref, nextTick } from 'vue'; |
| | | import { get, post, postBlob, postForm } from '@/utils/request.js' |
| | | import { formatMessage } from '@/utils/localeUtils.js'; |
| | | import { message } from 'ant-design-vue'; |
| | | |
| | | const formTable = ref(null); |
| | | const submitButton = ref(null); |
| | | const isSave = ref(true); |
| | | const open = ref(false); |
| | | const initFormData = {} |
| | | let formData = ref(initFormData); |
| | | |
| | | const emit = defineEmits(['tableReload']) |
| | | |
| | | const handleOk = (e) => { |
| | | nextTick(() => { |
| | | setTimeout(() => { |
| | | submitButton.value.$el.click(); |
| | | }, 100); |
| | | }); |
| | | }; |
| | | |
| | | const onFinish = values => { |
| | | // console.log('Success:', values); |
| | | open.value = false; |
| | | post(isSave.value ? '/api/mat/save' : '/api/mat/update', formData.value).then((resp) => { |
| | | let result = resp.data; |
| | | if (result.code === 200) { |
| | | message.success(formatMessage('page.update.success', '更新成功')); |
| | | } else { |
| | | message.error(result.msg); |
| | | } |
| | | emit('tableReload', 'reload') |
| | | nextTick(() => { |
| | | formTable.value.resetFields() |
| | | }) |
| | | }) |
| | | }; |
| | | const onFinishFailed = errorInfo => { |
| | | console.log('Failed:', errorInfo); |
| | | }; |
| | | |
| | | const UserQueryList = ref(null); |
| | | UserQuery(); |
| | | function UserQuery() { |
| | | postForm('/api/user/query', {}).then(resp => { |
| | | let result = resp.data; |
| | | UserQueryList.value = result.data; |
| | | }) |
| | | } |
| | | const TagQueryTree = ref(null); |
| | | TagQuery(); |
| | | function TagQuery() { |
| | | post('/api/tag/tree', {}).then(resp => { |
| | | let result = resp.data; |
| | | TagQueryTree.value = result.data; |
| | | }) |
| | | } |
| | | |
| | | |
| | | defineExpose({ |
| | | open, |
| | | formData, |
| | | initFormData, |
| | | isSave, |
| | | }) |
| | | |
| | | </script> |
| | | |
| | | <script> |
| | | export default { |
| | | name: '商品档案-edit' |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | <a-modal v-model:open="open" |
| | | :title="isSave ? formatMessage('page.add', '添加') : formatMessage('page.edit', '编辑')" @ok="handleOk" |
| | | style="width: 600px;"> |
| | | <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }" |
| | | :wrapper-col="{ span: 16 }" style="display: flex;justify-content: space-between;flex-wrap: wrap;" |
| | | autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed"> |
| | | <!-- <a-form-item :label="formatMessage('db.man_mat.uuid', '编号')" name="uuid" style="width: 250px;"> |
| | | <a-input v-model:value="formData.uuid" /> |
| | | </a-form-item> --> |
| | | <!-- <a-form-item :label="formatMessage('db.man_mat.create_time', '添加时间')" name="createTime" |
| | | style="width: 250px;"> |
| | | <a-date-picker v-model:value="formData.createTime" show-time format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.create_by', '添加人员')" name="createBy" |
| | | style="width: 250px;"> |
| | | <a-select v-model:value="formData.createBy" :placeholder="formatMessage('common.select', '请选择')" |
| | | style="width: 100%" show-search :options="UserQueryList" optionFilterProp="label" |
| | | optionLabelProp="label"> |
| | | </a-select> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.update_time', '修改时间')" name="updateTime" |
| | | style="width: 250px;"> |
| | | <a-date-picker v-model:value="formData.updateTime" show-time format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.update_by', '修改人员')" name="updateBy" |
| | | style="width: 250px;"> |
| | | <a-select v-model:value="formData.updateBy" :placeholder="formatMessage('common.select', '请选择')" |
| | | style="width: 100%" show-search :options="UserQueryList" optionFilterProp="label" |
| | | optionLabelProp="label"> |
| | | </a-select> |
| | | </a-form-item> --> |
| | | <!-- <a-form-item :label="formatMessage('db.man_mat.tag_id', '所属归类')" name="tagId" style="width: 250px;"> |
| | | <a-select v-model:value="formData.tagId" :placeholder="formatMessage('common.select', '请选择')" |
| | | style="width: 100%" show-search :options="TagQueryList" optionFilterProp="label" |
| | | optionLabelProp="label"> |
| | | </a-select> |
| | | </a-form-item> --> |
| | | <a-form-item :label="formatMessage('db.man_mat.tag_id', '所属归类')" name="tagId" style="width: 250px;" |
| | | :rules="[{ required: true, message: '上级菜单不能为空!' }]"> |
| | | <a-tree-select v-model:value="formData.tagId" show-search style="width: 100%" |
| | | :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" :placeholder="formatMessage('page.input', '请输入')" |
| | | allow-clea tree-data-simple-mode :tree-data="TagQueryTree" tree-node-filter-prop="name" |
| | | :field-names="{ |
| | | children: 'children', |
| | | label: 'name', |
| | | value: 'id', |
| | | }"> |
| | | <template #title="{ value: id, name }"> |
| | | {{ name }} |
| | | </template> |
| | | </a-tree-select> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.matnr', '商品编号')" name="matnr" style="width: 250px;" |
| | | :rules="[{ required: true }]"> |
| | | <a-input v-model:value="formData.matnr" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.maktx', '商品名称')" name="maktx" style="width: 250px;"> |
| | | <a-input v-model:value="formData.maktx" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.name', '别名')" name="name" style="width: 250px;"> |
| | | <a-input v-model:value="formData.name" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.specs', '规格')" name="specs" style="width: 250px;"> |
| | | <a-input v-model:value="formData.specs" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.model', '型号')" name="model" style="width: 250px;"> |
| | | <a-input v-model:value="formData.model" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.color', '颜色')" name="color" style="width: 250px;"> |
| | | <a-input v-model:value="formData.color" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.brand', '品牌')" name="brand" style="width: 250px;"> |
| | | <a-input v-model:value="formData.brand" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.unit', '单位')" name="unit" style="width: 250px;"> |
| | | <a-input v-model:value="formData.unit" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.price', '单价')" name="price" style="width: 250px;"> |
| | | <a-input v-model:value="formData.price" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.sku', 'sku')" name="sku" style="width: 250px;"> |
| | | <a-input v-model:value="formData.sku" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.units', '单位量')" name="units" style="width: 250px;"> |
| | | <a-input v-model:value="formData.units" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.barcode', '条码')" name="barcode" style="width: 250px;"> |
| | | <a-input v-model:value="formData.barcode" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.origin', '产地')" name="origin" style="width: 250px;"> |
| | | <a-input v-model:value="formData.origin" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.manu', '厂家')" name="manu" style="width: 250px;"> |
| | | <a-input v-model:value="formData.manu" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.manu_date', '生产日期')" name="manuDate" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="formData.manuDate" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.item_num', '品项数')" name="itemNum" style="width: 250px;"> |
| | | <a-input v-model:value="formData.itemNum" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.weight', '重量')" name="weight" style="width: 250px;"> |
| | | <a-input v-model:value="formData.weight" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.length', '长度')" name="length" style="width: 250px;"> |
| | | <a-input v-model:value="formData.length" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.volume', '体积')" name="volume" style="width: 250px;"> |
| | | <a-input v-model:value="formData.volume" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.three_code', '三方编码')" name="threeCode" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="formData.threeCode" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.supp', '供应商')" name="supp" style="width: 250px;"> |
| | | <a-input v-model:value="formData.supp" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.supp_code', '供应商编码')" name="suppCode" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="formData.suppCode" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.dead_time', '保质期')" name="deadTime" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="formData.deadTime" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.flag', '标识')" name="flag" style="width: 250px;"> |
| | | <a-input v-model:value="formData.flag" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.sort', '排序')" name="sort" style="width: 250px;"> |
| | | <a-input v-model:value="formData.sort" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.status', '状态')" name="status" style="width: 250px;"> |
| | | <a-select v-model:value="formData.status" :options="[ |
| | | { label: '正常', value: 1 }, |
| | | { label: '禁用', value: 0 }, |
| | | ]"> |
| | | </a-select> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('db.man_mat.memo', '备注')" name="memo" style="width: 250px;"> |
| | | <a-input v-model:value="formData.memo" /> |
| | | </a-form-item> |
| | | |
| | | <a-form-item> |
| | | <a-button type="primary" html-type="submit" ref="submitButton" |
| | | style="visibility: hidden;">Submit</a-button> |
| | | </a-form-item> |
| | | </a-form> |
| | | </a-modal> |
| | | </div> |
| | | </template> |
| | | |
| | | <style></style> |
New file |
| | |
| | | <script setup> |
| | | import { getCurrentInstance, ref, computed, reactive } from 'vue'; |
| | | 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 EditView from './edit.vue' |
| | | import { formatMessage } from '@/utils/localeUtils.js'; |
| | | const context = getCurrentInstance()?.appContext.config.globalProperties; |
| | | |
| | | const router = useRouter(); |
| | | |
| | | const TABLE_KEY = 'table-mat'; |
| | | let currentPage = 1; |
| | | let pageSize = 10; |
| | | const searchInput = ref("") |
| | | const editChild = ref(null) |
| | | |
| | | let tableData = ref([]); |
| | | getPage(); |
| | | |
| | | const columns = [ |
| | | { |
| | | title: formatMessage('db.man_mat.tag_id', '所属归类'), |
| | | dataIndex: 'tagId$', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.matnr', '商品编号'), |
| | | dataIndex: 'matnr', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.maktx', '商品名称'), |
| | | dataIndex: 'maktx', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.name', '别名'), |
| | | dataIndex: 'name', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.specs', '规格'), |
| | | dataIndex: 'specs', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.model', '型号'), |
| | | dataIndex: 'model', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.color', '颜色'), |
| | | dataIndex: 'color', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.brand', '品牌'), |
| | | dataIndex: 'brand', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.unit', '单位'), |
| | | dataIndex: 'unit', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.price', '单价'), |
| | | dataIndex: 'price', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.sku', 'sku'), |
| | | dataIndex: 'sku', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.units', '单位量'), |
| | | dataIndex: 'units', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.barcode', '条码'), |
| | | dataIndex: 'barcode', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.origin', '产地'), |
| | | dataIndex: 'origin', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.manu', '厂家'), |
| | | dataIndex: 'manu', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.manu_date', '生产日期'), |
| | | dataIndex: 'manuDate', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.item_num', '品项数'), |
| | | dataIndex: 'itemNum', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.weight', '重量'), |
| | | dataIndex: 'weight', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.length', '长度'), |
| | | dataIndex: 'length', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.volume', '体积'), |
| | | dataIndex: 'volume', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.three_code', '三方编码'), |
| | | dataIndex: 'threeCode', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.supp', '供应商'), |
| | | dataIndex: 'supp', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.supp_code', '供应商编码'), |
| | | dataIndex: 'suppCode', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.dead_time', '保质期'), |
| | | dataIndex: 'deadTime', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | |
| | | { |
| | | title: formatMessage('db.man_mat.uuid', '编号'), |
| | | dataIndex: 'uuid', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.flag', '标识'), |
| | | dataIndex: 'flag', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.sort', '排序'), |
| | | dataIndex: 'sort', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | { |
| | | title: formatMessage('db.man_mat.status', '状态'), |
| | | dataIndex: 'status$', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | // { |
| | | // title: formatMessage('db.man_mat.create_time', '添加时间'), |
| | | // dataIndex: 'createTime$', |
| | | // width: 140, |
| | | // ellipsis: true, |
| | | // }, |
| | | // { |
| | | // title: formatMessage('db.man_mat.create_by', '添加人员'), |
| | | // dataIndex: 'createBy$', |
| | | // width: 140, |
| | | // ellipsis: true, |
| | | // }, |
| | | // { |
| | | // title: formatMessage('db.man_mat.update_time', '修改时间'), |
| | | // dataIndex: 'updateTime$', |
| | | // width: 140, |
| | | // ellipsis: true, |
| | | // }, |
| | | // { |
| | | // title: formatMessage('db.man_mat.update_by', '修改人员'), |
| | | // dataIndex: 'updateBy$', |
| | | // width: 140, |
| | | // ellipsis: true, |
| | | // }, |
| | | { |
| | | title: formatMessage('db.man_mat.memo', '备注'), |
| | | dataIndex: 'memo', |
| | | width: 140, |
| | | ellipsis: true, |
| | | }, |
| | | |
| | | { |
| | | title: formatMessage('common.operation', '操作'), |
| | | name: 'oper', |
| | | dataIndex: 'oper', |
| | | key: 'oper', |
| | | width: 140, |
| | | }, |
| | | ]; |
| | | |
| | | const state = reactive({ |
| | | selectedRowKeys: [], |
| | | loading: false, |
| | | }); |
| | | const hasSelected = computed(() => state.selectedRowKeys.length > 0); |
| | | const start = () => { |
| | | state.loading = true; |
| | | // ajax request after empty completing |
| | | setTimeout(() => { |
| | | state.loading = false; |
| | | state.selectedRowKeys = []; |
| | | }, 1000); |
| | | }; |
| | | const onSelectChange = selectedRowKeys => { |
| | | // console.log('selectedRowKeys changed: ', selectedRowKeys); |
| | | state.selectedRowKeys = selectedRowKeys; |
| | | }; |
| | | |
| | | function getPage() { |
| | | post('/api/mat/page', { |
| | | current: currentPage, |
| | | pageSize: pageSize, |
| | | condition: searchInput.value |
| | | }).then((resp) => { |
| | | let result = resp.data; |
| | | if (result.code == 200) { |
| | | let data = result.data; |
| | | tableData.value = data; |
| | | } else if (result.code === 401) { |
| | | message.error(result.msg); |
| | | logout() |
| | | } else { |
| | | message.error(result.msg); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const handleEdit = (item) => { |
| | | editChild.value.open = true; |
| | | editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item)); |
| | | editChild.value.isSave = item == null; |
| | | } |
| | | |
| | | const handleDel = (rows) => { |
| | | Modal.confirm({ |
| | | title: formatMessage('page.delete', '删除'), |
| | | content: formatMessage('page.delete.confirm', '确定删除该项吗?'), |
| | | maskClosable: true, |
| | | onOk: async () => { |
| | | const hide = message.loading(formatMessage('common.loading', '请求中')); |
| | | try { |
| | | post('/api/mat/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => { |
| | | let result = resp.data; |
| | | if (result.code === 200) { |
| | | message.success(result.msg); |
| | | } else { |
| | | message.error(result.msg); |
| | | } |
| | | getPage() |
| | | hide() |
| | | }) |
| | | } catch (error) { |
| | | message.error(formatMessage('common.fail', '请求失败')); |
| | | } |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | const handleExport = async (intl) => { |
| | | postBlob('/api/mat/export', {}).then(result => { |
| | | const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' }); |
| | | window.location.href = window.URL.createObjectURL(blob); |
| | | return true; |
| | | }) |
| | | }; |
| | | |
| | | const onSearch = () => { |
| | | // console.log('search'); |
| | | getPage() |
| | | } |
| | | |
| | | const onPageChange = (page, size) => { |
| | | currentPage = page; |
| | | pageSize = size; |
| | | getPage(); |
| | | } |
| | | |
| | | function handleTableReload(value) { |
| | | getPage() |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <script> |
| | | export default { |
| | | name: '商品档案' |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | <EditView ref="editChild" @tableReload="handleTableReload" /> |
| | | <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-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '添加') }}</a-button> |
| | | <a-button @click="handleExport">{{ formatMessage('page.export', '导出') }}</a-button> |
| | | </div> |
| | | </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"> |
| | | <template #bodyCell="{ column, text, record }"> |
| | | <template v-if="column.dataIndex === 'oper'"> |
| | | <div style="display: flex;justify-content: space-evenly;"> |
| | | <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '编辑') }}</a-button> |
| | | <a-button type="link" danger @click="handleDel([record])"> |
| | | {{ formatMessage('page.delete', '删除') }} |
| | | </a-button> |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </a-table> |
| | | </div> |
| | | </template> |
| | | |
| | | <style></style> |
New file |
| | |
| | | package com.zy.asrs.wms.asrs.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | | import com.zy.asrs.wms.common.annotation.OperationLog; |
| | | import com.zy.asrs.wms.common.domain.BaseParam; |
| | | import com.zy.asrs.wms.common.domain.KeyValVo; |
| | | import com.zy.asrs.wms.common.domain.PageParam; |
| | | import com.zy.asrs.wms.asrs.entity.Mat; |
| | | import com.zy.asrs.wms.asrs.service.MatService; |
| | | import com.zy.asrs.wms.system.controller.BaseController; |
| | | import com.zy.asrs.wms.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | | public class MatController extends BaseController { |
| | | |
| | | @Autowired |
| | | private MatService matService; |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:list')") |
| | | @PostMapping("/mat/page") |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<Mat, BaseParam> pageParam = new PageParam<>(baseParam, Mat.class); |
| | | return R.ok().add(matService.page(pageParam, pageParam.buildWrapper(true))); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:list')") |
| | | @PostMapping("/mat/list") |
| | | public R list(@RequestBody Map<String, Object> map) { |
| | | return R.ok().add(matService.list()); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:list')") |
| | | @GetMapping("/mat/{id}") |
| | | public R get(@PathVariable("id") Long id) { |
| | | return R.ok().add(matService.getById(id)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:save')") |
| | | @OperationLog("添加商品档案") |
| | | @PostMapping("/mat/save") |
| | | public R save(@RequestBody Mat mat) { |
| | | if (!matService.save(mat)) { |
| | | return R.error("添加失败"); |
| | | } |
| | | return R.ok("添加成功"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:update')") |
| | | @OperationLog("修改商品档案") |
| | | @PostMapping("/mat/update") |
| | | public R update(@RequestBody Mat mat) { |
| | | if (!matService.updateById(mat)) { |
| | | return R.error("修改失败"); |
| | | } |
| | | return R.ok("修改成功"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:remove')") |
| | | @OperationLog("删除商品档案") |
| | | @PostMapping("/mat/remove/{ids}") |
| | | public R remove(@PathVariable Long[] ids) { |
| | | if (!matService.removeByIds(Arrays.asList(ids))) { |
| | | return R.error("删除失败"); |
| | | } |
| | | return R.ok("删除成功"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:list')") |
| | | @PostMapping("/mat/query") |
| | | public R query(@RequestParam(required = false) String condition) { |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<Mat> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(Mat::getId, condition); |
| | | } |
| | | matService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getId())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('asrs:mat:list')") |
| | | @PostMapping("/mat/export") |
| | | public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { |
| | | ExcelUtil.build(ExcelUtil.create(matService.list(), Mat.class), response); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.asrs.wms.asrs.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.zy.asrs.wms.asrs.service.TagService; |
| | | import com.zy.asrs.wms.system.entity.Host; |
| | | import com.zy.asrs.wms.system.entity.User; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wms.system.service.UserService; |
| | | import com.zy.asrs.wms.system.service.HostService; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("man_mat") |
| | | public class Mat implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 编号 |
| | | */ |
| | | @ApiModelProperty(value= "编号") |
| | | private String uuid; |
| | | |
| | | /** |
| | | * 标识 |
| | | */ |
| | | @ApiModelProperty(value= "标识") |
| | | private String flag; |
| | | |
| | | /** |
| | | * 排序 |
| | | */ |
| | | @ApiModelProperty(value= "排序") |
| | | private Integer sort; |
| | | |
| | | /** |
| | | * 所属机构 |
| | | */ |
| | | @ApiModelProperty(value= "所属机构") |
| | | private Long hostId; |
| | | |
| | | /** |
| | | * 状态 1: 正常 0: 禁用 |
| | | */ |
| | | @ApiModelProperty(value= "状态 1: 正常 0: 禁用 ") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 是否删除 1: 是 0: 否 |
| | | */ |
| | | @ApiModelProperty(value= "是否删除 1: 是 0: 否 ") |
| | | @TableLogic |
| | | private Integer deleted; |
| | | |
| | | /** |
| | | * 添加时间 |
| | | */ |
| | | @ApiModelProperty(value= "添加时间") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * 添加人员 |
| | | */ |
| | | @ApiModelProperty(value= "添加人员") |
| | | private Long createBy; |
| | | |
| | | /** |
| | | * 修改时间 |
| | | */ |
| | | @ApiModelProperty(value= "修改时间") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * 修改人员 |
| | | */ |
| | | @ApiModelProperty(value= "修改人员") |
| | | private Long updateBy; |
| | | |
| | | /** |
| | | * 备注 |
| | | */ |
| | | @ApiModelProperty(value= "备注") |
| | | private String memo; |
| | | |
| | | /** |
| | | * 所属归类 |
| | | */ |
| | | @ApiModelProperty(value= "所属归类") |
| | | private Long tagId; |
| | | |
| | | /** |
| | | * 商品编号 |
| | | */ |
| | | @ApiModelProperty(value= "商品编号") |
| | | private String matnr; |
| | | |
| | | /** |
| | | * 商品名称 |
| | | */ |
| | | @ApiModelProperty(value= "商品名称") |
| | | private String maktx; |
| | | |
| | | /** |
| | | * 别名 |
| | | */ |
| | | @ApiModelProperty(value= "别名") |
| | | private String name; |
| | | |
| | | /** |
| | | * 规格 |
| | | */ |
| | | @ApiModelProperty(value= "规格") |
| | | private String specs; |
| | | |
| | | /** |
| | | * 型号 |
| | | */ |
| | | @ApiModelProperty(value= "型号") |
| | | private String model; |
| | | |
| | | /** |
| | | * 颜色 |
| | | */ |
| | | @ApiModelProperty(value= "颜色") |
| | | private String color; |
| | | |
| | | /** |
| | | * 品牌 |
| | | */ |
| | | @ApiModelProperty(value= "品牌") |
| | | private String brand; |
| | | |
| | | /** |
| | | * 单位 |
| | | */ |
| | | @ApiModelProperty(value= "单位") |
| | | private String unit; |
| | | |
| | | /** |
| | | * 单价 |
| | | */ |
| | | @ApiModelProperty(value= "单价") |
| | | private Double price; |
| | | |
| | | /** |
| | | * sku |
| | | */ |
| | | @ApiModelProperty(value= "sku") |
| | | private String sku; |
| | | |
| | | /** |
| | | * 单位量 |
| | | */ |
| | | @ApiModelProperty(value= "单位量") |
| | | private String units; |
| | | |
| | | /** |
| | | * 条码 |
| | | */ |
| | | @ApiModelProperty(value= "条码") |
| | | private String barcode; |
| | | |
| | | /** |
| | | * 产地 |
| | | */ |
| | | @ApiModelProperty(value= "产地") |
| | | private String origin; |
| | | |
| | | /** |
| | | * 厂家 |
| | | */ |
| | | @ApiModelProperty(value= "厂家") |
| | | private String manu; |
| | | |
| | | /** |
| | | * 生产日期 |
| | | */ |
| | | @ApiModelProperty(value= "生产日期") |
| | | private String manuDate; |
| | | |
| | | /** |
| | | * 品项数 |
| | | */ |
| | | @ApiModelProperty(value= "品项数") |
| | | private String itemNum; |
| | | |
| | | /** |
| | | * 重量 |
| | | */ |
| | | @ApiModelProperty(value= "重量") |
| | | private String weight; |
| | | |
| | | /** |
| | | * 长度 |
| | | */ |
| | | @ApiModelProperty(value= "长度") |
| | | private String length; |
| | | |
| | | /** |
| | | * 体积 |
| | | */ |
| | | @ApiModelProperty(value= "体积") |
| | | private String volume; |
| | | |
| | | /** |
| | | * 三方编码 |
| | | */ |
| | | @ApiModelProperty(value= "三方编码") |
| | | private String threeCode; |
| | | |
| | | /** |
| | | * 供应商 |
| | | */ |
| | | @ApiModelProperty(value= "供应商") |
| | | private String supp; |
| | | |
| | | /** |
| | | * 供应商编码 |
| | | */ |
| | | @ApiModelProperty(value= "供应商编码") |
| | | private String suppCode; |
| | | |
| | | /** |
| | | * 保质期 |
| | | */ |
| | | @ApiModelProperty(value= "保质期") |
| | | private String deadTime; |
| | | |
| | | public Mat() {} |
| | | |
| | | public Mat(String uuid,String flag,Integer sort,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo,Long tagId,String matnr,String maktx,String name,String specs,String model,String color,String brand,String unit,Double price,String sku,String units,String barcode,String origin,String manu,String manuDate,String itemNum,String weight,String length,String volume,String threeCode,String supp,String suppCode,String deadTime) { |
| | | this.uuid = uuid; |
| | | this.flag = flag; |
| | | this.sort = sort; |
| | | this.hostId = hostId; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | | this.createTime = createTime; |
| | | this.createBy = createBy; |
| | | this.updateTime = updateTime; |
| | | this.updateBy = updateBy; |
| | | this.memo = memo; |
| | | this.tagId = tagId; |
| | | this.matnr = matnr; |
| | | this.maktx = maktx; |
| | | this.name = name; |
| | | this.specs = specs; |
| | | this.model = model; |
| | | this.color = color; |
| | | this.brand = brand; |
| | | this.unit = unit; |
| | | this.price = price; |
| | | this.sku = sku; |
| | | this.units = units; |
| | | this.barcode = barcode; |
| | | this.origin = origin; |
| | | this.manu = manu; |
| | | this.manuDate = manuDate; |
| | | this.itemNum = itemNum; |
| | | this.weight = weight; |
| | | this.length = length; |
| | | this.volume = volume; |
| | | this.threeCode = threeCode; |
| | | this.supp = supp; |
| | | this.suppCode = suppCode; |
| | | this.deadTime = deadTime; |
| | | } |
| | | |
| | | // Mat mat = new Mat( |
| | | // null, // 编号 |
| | | // null, // 标识 |
| | | // null, // 排序 |
| | | // null, // 所属机构 |
| | | // null, // 状态 |
| | | // null, // 是否删除 |
| | | // null, // 添加时间 |
| | | // null, // 添加人员 |
| | | // null, // 修改时间 |
| | | // null, // 修改人员 |
| | | // null, // 备注 |
| | | // null, // 所属归类 |
| | | // null, // 商品编号[非空] |
| | | // null, // 商品名称 |
| | | // null, // 别名 |
| | | // null, // 规格 |
| | | // null, // 型号 |
| | | // null, // 颜色 |
| | | // null, // 品牌 |
| | | // null, // 单位 |
| | | // null, // 单价 |
| | | // null, // sku |
| | | // null, // 单位量 |
| | | // null, // 条码 |
| | | // null, // 产地 |
| | | // null, // 厂家 |
| | | // null, // 生产日期 |
| | | // null, // 品项数 |
| | | // null, // 重量 |
| | | // null, // 长度 |
| | | // null, // 体积 |
| | | // null, // 三方编码 |
| | | // null, // 供应商 |
| | | // null, // 供应商编码 |
| | | // null // 保质期 |
| | | // ); |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | | Host host = service.getById(this.hostId); |
| | | if (!Cools.isEmpty(host)){ |
| | | return String.valueOf(host.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getStatus$(){ |
| | | if (null == this.status){ return null; } |
| | | switch (this.status){ |
| | | case 1: |
| | | return "正常"; |
| | | case 0: |
| | | return "禁用"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | | } |
| | | |
| | | public String getDeleted$(){ |
| | | if (null == this.deleted){ return null; } |
| | | switch (this.deleted){ |
| | | case 1: |
| | | return "是"; |
| | | case 0: |
| | | return "否"; |
| | | default: |
| | | return String.valueOf(this.deleted); |
| | | } |
| | | } |
| | | |
| | | public String getCreateTime$(){ |
| | | if (Cools.isEmpty(this.createTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); |
| | | } |
| | | |
| | | public String getCreateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.createBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getUpdateTime$(){ |
| | | if (Cools.isEmpty(this.updateTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); |
| | | } |
| | | |
| | | public String getUpdateBy$(){ |
| | | UserService service = SpringUtils.getBean(UserService.class); |
| | | User user = service.getById(this.updateBy); |
| | | if (!Cools.isEmpty(user)){ |
| | | return String.valueOf(user.getNickname()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getTagId$(){ |
| | | TagService service = SpringUtils.getBean(TagService.class); |
| | | Tag tag = service.getById(this.tagId); |
| | | if (!Cools.isEmpty(tag)){ |
| | | return String.valueOf(tag.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.asrs.wms.asrs.mapper; |
| | | |
| | | import com.zy.asrs.wms.asrs.entity.Mat; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface MatMapper extends BaseMapper<Mat> { |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.asrs.wms.asrs.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.asrs.wms.asrs.entity.Mat; |
| | | |
| | | public interface MatService extends IService<Mat> { |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.asrs.wms.asrs.service.impl; |
| | | |
| | | import com.zy.asrs.wms.asrs.mapper.MatMapper; |
| | | import com.zy.asrs.wms.asrs.entity.Mat; |
| | | import com.zy.asrs.wms.asrs.service.MatService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | @Service("matService") |
| | | public class MatServiceImpl extends ServiceImpl<MatMapper, Mat> implements MatService { |
| | | |
| | | } |
| | |
| | | @GetMapping("/menu/get/route") |
| | | public R getByRoute(@RequestParam("route") String route) { |
| | | Menu menu = menuService.getOne(new LambdaQueryWrapper<Menu>().eq(Menu::getRoute, route).eq(Menu::getStatus, 1).last("limit 1")); |
| | | if (menu == null) { |
| | | return R.error("404"); |
| | | } |
| | | return R.ok().add(menu); |
| | | } |
| | | |
| | |
| | | // generator.username="sa"; |
| | | // generator.password="Zoneyung@zy56$"; |
| | | |
| | | generator.table="man_tag"; |
| | | generator.tableName="归类管理"; |
| | | generator.table="man_mat"; |
| | | generator.tableName="商品档案"; |
| | | generator.packagePath="com.zy.asrs.wms.asrs"; |
| | | |
| | | generator.build(); |
New file |
| | |
| | | -- save mat record |
| | | -- mysql |
| | | insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '商品档案管理', '0', '/asrs/mat', '/asrs/mat', '0' , '0', '1' , '1'); |
| | | |
| | | insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '查询商品档案', '', '1', 'asrs:mat:list', '0', '1', '1'); |
| | | insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '添加商品档案', '', '1', 'asrs:mat:save', '1', '1', '1'); |
| | | insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '修改商品档案', '', '1', 'asrs:mat:update', '2', '1', '1'); |
| | | insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '删除商品档案', '', '1', 'asrs:mat:remove', '3', '1', '1'); |
| | | |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.zy.asrs.wms.asrs.mapper.MatMapper"> |
| | | |
| | | </mapper> |