diff --git a/package.json b/package.json index 87db874..3036189 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "core-js": "3.6.5", "echarts": "^4.2.1", "element-ui": "2.15.13", + "file-saver": "^2.0.5", "js-cookie": "2.2.0", "less-loader": "^5.0.0", "moment": "^2.29.2", @@ -33,7 +34,8 @@ "vue-count-to": "^1.0.13", "vue-router": "3.0.6", "vuedraggable": "^2.24.3", - "vuex": "3.1.0" + "vuex": "3.1.0", + "xlsx": "^0.18.5" }, "devDependencies": { "@vue/cli-plugin-babel": "4.4.4", diff --git a/src/api/system/baseForm.js b/src/api/system/baseForm.js index d2443c8..d16d26a 100644 --- a/src/api/system/baseForm.js +++ b/src/api/system/baseForm.js @@ -49,3 +49,10 @@ export function destroy(params) { }) } +export function imports(data) { + return request({ + method: "post", + url: "/api/admin/base-form/import", + data + }) +} diff --git a/src/api/system/customForm.js b/src/api/system/customForm.js index 6b19be6..63a7b24 100644 --- a/src/api/system/customForm.js +++ b/src/api/system/customForm.js @@ -9,11 +9,12 @@ export function index(params,isLoading = false) { }) } -export function show(params) { +export function show(params,isLoading = true) { return request({ method: "get", url: "/api/admin/custom-form/show", - params + params, + isLoading }) } diff --git a/src/components/XyMap/index.vue b/src/components/XyMap/index.vue new file mode 100644 index 0000000..a8546ed --- /dev/null +++ b/src/components/XyMap/index.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/const/inputType.js b/src/const/inputType.js index 62da3aa..032629c 100644 --- a/src/const/inputType.js +++ b/src/const/inputType.js @@ -10,5 +10,5 @@ export const domMap = new Map([ ["textarea", "el-input"], - ["map", "el-input"], + ["map", "my-map"], ]) diff --git a/src/main.js b/src/main.js index 28f3f5e..4c756ca 100644 --- a/src/main.js +++ b/src/main.js @@ -46,9 +46,12 @@ import Message from 'element-ui/lib/message'; Vue.config.productionTip = false -import avue from '@smallwei/avue' +import avue from '@smallwei/avue'; import '@smallwei/avue/lib/index.css'; Vue.use(avue) +import AvueMap from 'avue-plugin-map' +Vue.use(AvueMap); + Vue.directive('loadMore', { bind(el, binding) { const selectWrap = el.querySelector('.el-scrollbar__wrap') @@ -72,6 +75,10 @@ import XySelectors from '@/components/XySelectors' Vue.component('xy-selectors',XySelectors) import draggable from 'vuedraggable'; Vue.component('draggable',draggable) +import tinymce from '@/components/XyTinymce' +Vue.component('my-tinymce',tinymce) +import myMap from "@/components/XyMap" +Vue.component('my-map',myMap) Vue.prototype.$integrateData = (target,value) => { for(let i in target){ diff --git a/src/views/component/data.js b/src/views/component/data.js deleted file mode 100644 index 3d5067b..0000000 --- a/src/views/component/data.js +++ /dev/null @@ -1,66 +0,0 @@ -const data = [ - { - id:1, - name:'a', - age:10, - birth:'2022-01-01' - }, - { - id:2, - name:'b', - age:11, - birth:'2022-01-01' - }, - { - id:3, - name:'c', - age:14, - birth:'2022-01-01' - }, - { - id:4, - name:'b', - age:11, - birth:'2022-01-01' - }, - { - id:5, - name:'e', - age:20, - birth:'2022-01-02' - }, - { - id:6, - name:'f', - age:20, - birth:'2022-01-02' - }, - { - id:7, - name:'g', - age:20, - birth:'2022-01-02' - }, - { - id:8, - name:'h', - age:20, - birth:'2022-01-02' - } -] - -const getData = (params) => { - const { page,page_size } = params - let start = (page - 1) * page_size - let res = data.slice(start,start + page_size) - return { - per_page:page_size, - total:data.length, - data:res, - current_page:page - } -} - -export { - getData -} diff --git a/src/views/component/dialog.vue b/src/views/component/dialog.vue index 8c7ac58..31563f1 100644 --- a/src/views/component/dialog.vue +++ b/src/views/component/dialog.vue @@ -63,7 +63,7 @@ export default { ref: `elEdit_${i.field}`, props: { ...addPropsMap.get(i.edit_input), - ...this.extraProps(i.edit_input), + ...this.extraProps(i), placeholder: i.help, value: this.form[i.field], }, @@ -136,6 +136,9 @@ export default { dialogVisible: false, form: {}, rules: {}, + file: { + + } }; }, methods: { @@ -217,6 +220,7 @@ export default { extraProps(info) { let props = {}; if (info.edit_input === "file" || info.edit_input === "files") { + props.fileList = this.file[info.field]; props.beforeUpload = (file) => { if (file.size / 1000 > 500) { this.$message({ @@ -228,11 +232,11 @@ export default { }; props.onSuccess = (response, file, fileList) => { - info._fileList = fileList; + this.file[info.field] = fileList; }; props.onRemove = (file, fileList) => { - info._fileList = fileList; + this.file[info.field] = fileList; }; } return props; @@ -298,6 +302,9 @@ export default { (i) => i?.response?.id ); } + if(info.edit_input === "file") { + this.form[info.field] = this.file[info.field][0]?.response?.id + } }); console.log(this.form); save(Object.assign(this.form, { table_name: this.tableName })).then( @@ -319,6 +326,7 @@ export default { handler: function (newVal) { this.form = {}; this.rules = {}; + this.file = {}; newVal.forEach((i) => { if (i.field) { this.form[i.field] = ""; @@ -327,9 +335,12 @@ export default { { required: true, message: `请填写${i.name}` }, ]; } - if (i.edit_input === "file" || i.edit_input === "files") { + if (i.edit_input === "files") { this.form[i.field] = []; } + if(i.edit_input === "files" || i.edit_input === "file") { + this.file[i.field] = []; + } if (i.edit_input === "checkbox") { this.form[i.field] = []; } diff --git a/src/views/component/imports.vue b/src/views/component/imports.vue new file mode 100644 index 0000000..3ed0977 --- /dev/null +++ b/src/views/component/imports.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/src/views/component/table.vue b/src/views/component/table.vue index d870f0e..46fe702 100644 --- a/src/views/component/table.vue +++ b/src/views/component/table.vue @@ -3,7 +3,7 @@
- +
@@ -93,6 +93,13 @@ >新增 + @@ -139,21 +147,25 @@ import { index,destroy } from "@/api/system/baseForm"; import { op } from "@/const/op"; import { download } from "@/utils/downloadRequest"; import { getparameter } from "@/api/system/dictionary"; +import { show } from "@/api/system/customForm"; import dialoger from './dialog.vue'; import LxHeader from "@/components/LxHeader/index.vue"; import headerContent from "@/components/LxHeader/XyContent.vue"; import drawer from "@/views/component/drawer.vue"; +import imports from "./imports.vue" export default { components:{ LxHeader, dialoger, headerContent, drawer, + imports }, mixins: [authMixin], data() { return { + title: "", op, select: { table_name: "", @@ -195,6 +207,11 @@ export default { target.value = `${temp ? temp : ""},${e}` }, + async getFormDetail() { + const res = await show({ id: this.customForm.customFormId },false) + this.title = res.name + }, + async getField() { if(this.$route.meta.params?.custom_form) { let decode = decodeURIComponent(this.$route.meta.params?.custom_form) @@ -218,9 +235,6 @@ export default { if(res.data && res.data instanceof Array) { res.data.forEach(i => { if (i.field) { - if (i.edit_input === "file" || i.edit_input === "files") { - i._fileList = []; - } if ( (i.edit_input === "checkbox" || i.edit_input === "radio") && i.parameter_id @@ -294,7 +308,7 @@ export default { }, created() { this.getField() - + this.getFormDetail() } } diff --git a/src/views/system/components/editPane.vue b/src/views/system/components/editPane.vue index 58dff3a..1c4666d 100644 --- a/src/views/system/components/editPane.vue +++ b/src/views/system/components/editPane.vue @@ -76,7 +76,7 @@