|
|
@@ -0,0 +1,212 @@
|
|
|
+import {mapGetters} from "vuex";
|
|
|
+
|
|
|
+export default (app, option = {}) => {
|
|
|
+ const mixins = {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ selectionList: [],
|
|
|
+ data: [],
|
|
|
+ form: {},
|
|
|
+ params: {},
|
|
|
+ loading: false,
|
|
|
+ api: require(`@/api/${option.name}`),
|
|
|
+ option: require(`@/option/${option.name}`).default,
|
|
|
+ page: {
|
|
|
+ pageSizes: [10, 30, 50, 100, 200],
|
|
|
+ pageSize: 10
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapGetters(['userInfo', 'permission', 'roles']),
|
|
|
+ ids() {
|
|
|
+ const ids = [];
|
|
|
+ this.selectionList.forEach(ele => {
|
|
|
+ ids.push(ele[this.rowKey]);
|
|
|
+ });
|
|
|
+ return ids.join(",");
|
|
|
+ },
|
|
|
+ bindVal() {
|
|
|
+ return {
|
|
|
+ ref: 'crud',
|
|
|
+ option: this.option,
|
|
|
+ data: this.data,
|
|
|
+ tableLoading: this.loading
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onEvent() {
|
|
|
+ return {
|
|
|
+ 'on-load': this.getList,
|
|
|
+ 'row-save': this.rowSave,
|
|
|
+ 'row-update': this.rowUpdate,
|
|
|
+ 'row-del': this.rowDel,
|
|
|
+ 'selection-change': this.selectionChange,
|
|
|
+ 'refresh-change': this.refreshChange,
|
|
|
+ 'date-change': this.dateChange,
|
|
|
+ 'search-change': this.searchChange,
|
|
|
+ 'search-reset': this.searchChange
|
|
|
+ }
|
|
|
+ },
|
|
|
+ rowKey() {
|
|
|
+ return this.option.rowKey || option.rowKey || 'id'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getList() {
|
|
|
+ const callback = () => {
|
|
|
+ this.loading = true;
|
|
|
+ const pageParams = {};
|
|
|
+ pageParams[option.size || 'size'] = this.page.pageSize;
|
|
|
+ pageParams[option.current || 'current'] = this.page.currentPage;
|
|
|
+ this.api[option.list || 'list'](Object.assign(pageParams, this.params)).then(res => {
|
|
|
+ let data;
|
|
|
+ if (option.res) {
|
|
|
+ data = option.res(res.data);
|
|
|
+ } else {
|
|
|
+ data = res.data.data;
|
|
|
+ }
|
|
|
+ this.page.total = data[option.total || 'total'] || 0;
|
|
|
+ this.data = data[option.records || 'records'];
|
|
|
+ if (this.listAfter) {
|
|
|
+ this.listAfter(data);
|
|
|
+ }
|
|
|
+ this.loading = false;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (this.listBefore) {
|
|
|
+ this.listBefore();
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ },
|
|
|
+ rowSave(row, done, loading) {
|
|
|
+ const callback = () => {
|
|
|
+ delete this.form.params;
|
|
|
+ this.api[option.add || 'add'](this.form).then((data) => {
|
|
|
+ this.getList();
|
|
|
+ if (this.addAfter) {
|
|
|
+ this.addAfter(data);
|
|
|
+ } else {
|
|
|
+ this.$message.success('新增成功');
|
|
|
+ }
|
|
|
+ done();
|
|
|
+ }).catch(() => {
|
|
|
+ loading();
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (this.addBefore) {
|
|
|
+ this.addBefore();
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ },
|
|
|
+ rowUpdate(row, index, done, loading) {
|
|
|
+ const callback = () => {
|
|
|
+ delete this.form.params;
|
|
|
+ this.api[option.update || 'update'](this.form).then((data) => {
|
|
|
+ this.getList();
|
|
|
+ if (this.updateAfter) {
|
|
|
+ this.updateAfter(data);
|
|
|
+ } else {
|
|
|
+ this.$message.success('更新成功');
|
|
|
+ }
|
|
|
+ done();
|
|
|
+ }).catch(() => {
|
|
|
+ loading();
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (this.updateBefore) {
|
|
|
+ this.updateBefore();
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ },
|
|
|
+ rowDel(row, index) {
|
|
|
+ const callback = () => {
|
|
|
+ this.api[option.del || 'remove'](row[this.rowKey], row).then((data) => {
|
|
|
+ this.getList();
|
|
|
+ if (this.delAfter) {
|
|
|
+ this.delAfter(data, row, index)
|
|
|
+ } else {
|
|
|
+ this.$message.success('删除成功');
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (this.delBefore) {
|
|
|
+ this.delBefore();
|
|
|
+ callback();
|
|
|
+ } else {
|
|
|
+ this.$confirm('确定将选择数据删除?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ callback();
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleDelete() {
|
|
|
+ if (this.selectionList.length === 0) {
|
|
|
+ this.$message.warning("请选择至少一条数据");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.$confirm("确定将选择数据删除?", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning"
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ this.api[option.del || 'remove'](this.ids).then((data) => {
|
|
|
+ this.getList();
|
|
|
+ if (this.delMultiAfter) {
|
|
|
+ this.delMultiAfter(data, this.ids);
|
|
|
+ } else {
|
|
|
+ this.$message.success('删除成功');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ searchChange(params, done) {
|
|
|
+ if (done) done();
|
|
|
+ if (this.validatenull(params)) {
|
|
|
+ Object.keys(this.params).forEach(ele => {
|
|
|
+ if (!['createTime_dategt', 'createTime_datelt'].includes(ele)) {
|
|
|
+ delete this.params[ele];
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ Object.keys(params).forEach(ele => {
|
|
|
+ if (this.validatenull(params[ele])) {
|
|
|
+ delete this.params[ele];
|
|
|
+ delete params[ele];
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.params = Object.assign(this.params, params);
|
|
|
+ this.page.currentPage = 1;
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ dateChange(date) {
|
|
|
+ if (date) {
|
|
|
+ this.params.createTime_dategt = date[0];
|
|
|
+ this.params.createTime_datelt = date[1];
|
|
|
+ } else {
|
|
|
+ delete this.params.createTime_dategt;
|
|
|
+ delete this.params.createTime_datelt;
|
|
|
+ }
|
|
|
+ this.page.currentPage = 1;
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ selectionChange(list) {
|
|
|
+ this.selectionList = list;
|
|
|
+ },
|
|
|
+ selectionClear() {
|
|
|
+ this.selectionList = [];
|
|
|
+ this.$refs.crud.toggleSelection();
|
|
|
+ },
|
|
|
+ refreshChange() {
|
|
|
+ this.getList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ app.mixins = app.mixins || [];
|
|
|
+ app.mixins.push(mixins);
|
|
|
+ return app;
|
|
|
+}
|