New file |
| | |
| | | { |
| | | "hash": "f62d655b", |
| | | "configHash": "23d88a0b", |
| | | "lockfileHash": "e3b0c442", |
| | | "browserHash": "43a93352", |
| | | "optimized": {}, |
| | | "chunks": {} |
| | | } |
New file |
| | |
| | | { |
| | | "type": "module" |
| | | } |
| | |
| | | 'page.table.no': 'No', |
| | | 'page.add': 'Add New', |
| | | 'page.adding':'In process of adding', |
| | | 'page.add.field':'Add Field', |
| | | 'page.add.success':'Add Successful', |
| | | 'page.add.fail':'Add failed, please try again!', |
| | | 'page.updating':'Updating now', |
| | |
| | | } |
| | | |
| | | watch(formData, (newVal, oldVal) => { |
| | | let contain = JSON.parse(formData.value.contain) |
| | | if (contain != null && contain.length > 0) { |
| | | locTypeSelected.value = contain; |
| | | }else { |
| | | if(formData.value.contain == null) { |
| | | locTypeSelected.value = []; |
| | | return |
| | | } |
| | | |
| | | if(formData.value.contain.length == 0) { |
| | | locTypeSelected.value = []; |
| | | }else { |
| | | let contain = JSON.parse(formData.value.contain); |
| | | locTypeSelected.value = contain; |
| | | } |
| | | }) |
| | | |
| | |
| | | import { get, post, postBlob, postForm } from '@/utils/request.js' |
| | | import { formatMessage } from '@/utils/localeUtils.js'; |
| | | import { message } from 'ant-design-vue'; |
| | | import { |
| | | MinusCircleOutlined, |
| | | } from "@ant-design/icons-vue"; |
| | | |
| | | const formTable = ref(null); |
| | | const submitButton = ref(null); |
| | |
| | | }; |
| | | |
| | | 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; |
| | |
| | | <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="{ |
| | | :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', |
New file |
| | |
| | | <script setup> |
| | | import { ref, nextTick, reactive } from 'vue'; |
| | | import { get, post, postBlob, postForm } from '@/utils/request.js' |
| | | import { formatMessage } from '@/utils/localeUtils.js'; |
| | | import { message } from 'ant-design-vue'; |
| | | import { |
| | | MinusCircleOutlined, |
| | | } from "@ant-design/icons-vue"; |
| | | |
| | | const formTable = ref(null); |
| | | const submitButton = ref(null); |
| | | const open = ref(false); |
| | | const initFormData = {} |
| | | let formData = ref([]); |
| | | |
| | | const dynamicField = reactive({ |
| | | col: [], |
| | | }); |
| | | |
| | | const removeCol = item => { |
| | | const index = dynamicField.col.indexOf(item); |
| | | if (index !== -1) { |
| | | dynamicField.col.splice(index, 1); |
| | | } |
| | | }; |
| | | const addCol = () => { |
| | | dynamicField.col.push({ |
| | | name: '', |
| | | type: '', |
| | | require: false, |
| | | desc: '', |
| | | language: '', |
| | | }); |
| | | }; |
| | | |
| | | const emit = defineEmits(['tableReload']) |
| | | |
| | | const handleOk = (e) => { |
| | | nextTick(() => { |
| | | setTimeout(() => { |
| | | submitButton.value.$el.click(); |
| | | }, 100); |
| | | }); |
| | | }; |
| | | |
| | | const onFinish = values => { |
| | | // console.log('Success:', values); |
| | | // console.log(dynamicField); |
| | | open.value = false; |
| | | // post('/api/mat/addField', dynamicField).then((resp) => { |
| | | // let result = resp.data; |
| | | // if (result.code === 200) { |
| | | // message.success(isSave.value ? formatMessage('page.add.success', '新增成功') : formatMessage('page.update.success', '更新成功')); |
| | | // } else { |
| | | // message.error(result.msg); |
| | | // } |
| | | // emit('tableReload', 'reload') |
| | | // nextTick(() => { |
| | | // formTable.value.resetFields() |
| | | // }) |
| | | // }) |
| | | }; |
| | | const onFinishFailed = errorInfo => { |
| | | console.log('Failed:', errorInfo); |
| | | }; |
| | | |
| | | |
| | | defineExpose({ |
| | | open, |
| | | }) |
| | | |
| | | </script> |
| | | |
| | | <script> |
| | | export default { |
| | | name: '商品档案-field' |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div> |
| | | <a-modal v-model:open="open" |
| | | :title="formatMessage('page.add.field', '添加字段')" @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"> |
| | | <div v-for="(item, index) in dynamicField.col" :key="item.id" |
| | | style="display: flex;justify-content: space-between;flex-wrap: wrap;"> |
| | | <a-form-item :label="formatMessage('dynamicField.name', '字段')" :name="['col-name', index,]" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="item.name" /> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('dynamicField.type', '类型')" :name="['col-type', index]" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="item.type"/> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('dynamicField.desc', '描述')" :name="['col-desc', index]" |
| | | style="width: 250px;"> |
| | | <a-input v-model:value="item.desc"/> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('dynamicField.language', '国际化')" |
| | | :name="['col-language', index]" style="width: 250px;"> |
| | | <a-input v-model:value="item.language"/> |
| | | </a-form-item> |
| | | <a-form-item :label="formatMessage('dynamicField.delete', '删除')" |
| | | :name="['col-delete', index]" style="width: 250px;"> |
| | | <MinusCircleOutlined @click="removeCol(item)" /> |
| | | </a-form-item> |
| | | </div> |
| | | |
| | | <a-form-item> |
| | | <a-button type="primary" html-type="submit" ref="submitButton" |
| | | style="visibility: hidden;">Submit</a-button> |
| | | </a-form-item> |
| | | |
| | | </a-form> |
| | | |
| | | <a-button type="dashed" style="width: 100%" @click="addCol"> |
| | | <PlusOutlined /> |
| | | {{ formatMessage('page.add.field', '添加字段') }} |
| | | </a-button> |
| | | </a-modal> |
| | | </div> |
| | | </template> |
| | | |
| | | <style></style> |
| | |
| | | import { message, Modal } from 'ant-design-vue'; |
| | | import { logout } from '@/config.js'; |
| | | import EditView from './edit.vue' |
| | | import FieldView from './field.vue' |
| | | import { formatMessage } from '@/utils/localeUtils.js'; |
| | | const context = getCurrentInstance()?.appContext.config.globalProperties; |
| | | |
| | |
| | | let pageSize = 10; |
| | | const searchInput = ref("") |
| | | const editChild = ref(null) |
| | | const fieldChild = ref(null) |
| | | |
| | | let tableData = ref([]); |
| | | getPage(); |
| | |
| | | editChild.value.isSave = item == null; |
| | | } |
| | | |
| | | const handleField = () => { |
| | | fieldChild.value.open = true; |
| | | } |
| | | |
| | | const handleDel = (rows) => { |
| | | Modal.confirm({ |
| | | title: formatMessage('page.delete', '删除'), |
| | |
| | | |
| | | <template> |
| | | <div> |
| | | <FieldView ref="fieldChild" @tableReload="handleTableReload" /> |
| | | <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="handleField" type="primary">{{ formatMessage('page.add.field', '添加字段') }}</a-button> |
| | | <a-button @click="handleExport">{{ formatMessage('page.export', '导出') }}</a-button> |
| | | </div> |
| | | </div> |