diff --git a/package.json b/package.json
index febf3ea..60c12d0 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 @@
+
+
+
+ 模板下载
+ 模板下载
+
+ 导入的时候请勿修改模版的标题名称
+
+
+
+
+ 将文件拖到此处,或点击上传
+ 只能上传xls/xlsx文件
+
+
+ 数据预览
+
+ 总共数据:{{ tableList.length }}条
+ 确认导入
+
+
+
+
+
+
+
diff --git a/src/views/component/table.vue b/src/views/component/table.vue
index d870f0e..0113ce5 100644
--- a/src/views/component/table.vue
+++ b/src/views/component/table.vue
@@ -3,7 +3,7 @@
-
+
@@ -93,10 +93,17 @@
>新增
+
+
+
@@ -129,6 +136,7 @@
+
@@ -139,21 +147,27 @@ 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 * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
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: "",
@@ -185,6 +199,27 @@ export default {
}
},
+ async exportExcel(sheetName) {
+ const res = await index(Object.assign(this.select,{ page: 1,page_size: 9999}))
+ if(res.data){
+ let headers = this.form.map(i => {
+ return {
+ key: i.field,
+ title: i.name
+ }
+ })
+ const data = res.data.map(row => headers.map(header => row[header.key]));
+ data.unshift(headers.map(header => header.title));
+ const wb = XLSX.utils.book_new();
+ const ws = XLSX.utils.aoa_to_sheet(data);
+ XLSX.utils.book_append_sheet(wb, ws, sheetName);
+ const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
+ saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${sheetName}.xlsx`);
+ }
+
+ // download('/api/admin/base-form/index','get',Object.assign(select,{ page: 1,page_size: 9999,is_export: 1 }),`${new Date().getTime()}.xlsx`)
+ },
+
//target要为内存地址引用类型
inputStartHandler(e,target) {
let temp = target?.value.split(',')[1]
@@ -195,6 +230,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 +258,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 +331,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 @@