mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-11 13:13:49 +08:00
v3.15.0【新增】升级SaToken到最新版本;【新增】重磅优化 数据字典;【新增】升级wangEditor-next;【新增】优化缓存实现redis与caffeine
This commit is contained in:
@@ -1,28 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<template v-for="(item, index) in options">
|
||||
<template v-if="values.includes(item.valueCode)">
|
||||
{{ item.valueName }}
|
||||
<span> </span>
|
||||
</template>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
// 数据
|
||||
options: {
|
||||
type: Array,
|
||||
default: null,
|
||||
},
|
||||
// 当前的值
|
||||
value: [Number, String, Array],
|
||||
});
|
||||
const values = computed(() => {
|
||||
if (props.value === null || typeof props.value === 'undefined' || props.value === '') return [];
|
||||
return Array.isArray(props.value) ? props.value.map((item) => item.valueCode) : props.value.split(',');
|
||||
});
|
||||
</script>
|
||||
@@ -29,7 +29,7 @@
|
||||
import { ref, watch } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
value: Number,
|
||||
value: Boolean,
|
||||
width: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
import { onMounted, ref, nextTick } from 'vue';
|
||||
import { Modal } from 'ant-design-vue';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import SmartCopyIcon from '/@/components/smart-copy-icon/index.vue';
|
||||
import SmartCopyIcon from '/@/components/framework/smart-copy-icon/index.vue';
|
||||
|
||||
const props = defineProps({
|
||||
text: {
|
||||
@@ -25,8 +25,8 @@
|
||||
import { shallowRef, onBeforeUnmount, watch, ref } from 'vue';
|
||||
import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
|
||||
import { fileApi } from '/@/api/support/file-api';
|
||||
import '@wangeditor/editor/dist/css/style.css';
|
||||
import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
|
||||
import '@wangeditor-next/editor/dist/css/style.css';
|
||||
import { Editor, Toolbar } from '@wangeditor-next/editor-for-vue';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
//菜单
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
@change="onChange"
|
||||
:disabled="disabled"
|
||||
>
|
||||
<a-select-option v-for="item in dictKeyCodeList" :key="item.keyCode" :value="item.keyCode">
|
||||
{{ item.keyName }}
|
||||
<a-select-option v-for="item in dictList" :key="item.dictCode" :value="item.dictCode">
|
||||
{{ item.dictName }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
@@ -58,10 +58,10 @@
|
||||
|
||||
// -------------------------- 查询 字典数据 --------------------------
|
||||
|
||||
const dictKeyCodeList = ref([]);
|
||||
const dictList = ref([]);
|
||||
async function queryDict() {
|
||||
let responseModel = await dictApi.queryAllKey();
|
||||
dictKeyCodeList.value = responseModel.data;
|
||||
let response = await dictApi.getAllDict();
|
||||
dictList.value = response.data;
|
||||
}
|
||||
|
||||
onMounted(queryDict);
|
||||
@@ -0,0 +1,16 @@
|
||||
<template>
|
||||
<span>{{ dataLabels }}</span>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
import { useDictStore } from '/@/store/modules/system/dict.js';
|
||||
|
||||
const props = defineProps({
|
||||
dictCode: String,
|
||||
dataValue: String,
|
||||
});
|
||||
const dataLabels = computed(() => {
|
||||
return useDictStore().getDataLabels(props.dictCode, props.dataValue);
|
||||
});
|
||||
</script>
|
||||
@@ -20,13 +20,8 @@
|
||||
@change="onChange"
|
||||
:disabled="disabled"
|
||||
>
|
||||
<a-select-option
|
||||
v-for="item in dictValueList"
|
||||
:key="item.valueCode"
|
||||
:value="item.valueCode"
|
||||
:disabled="disabledOption.includes(item.valueCode)"
|
||||
>
|
||||
{{ item.valueName }}
|
||||
<a-select-option v-for="item in dictDataList" :key="item.dataValue" :value="item.dataValue" :disabled="disabledOption.includes(item.valueCode)">
|
||||
{{ item.dataLabel }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
@@ -34,10 +29,10 @@
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { dictApi } from '/@/api/support/dict-api';
|
||||
import { useDictStore } from '/@/store/modules/system/dict.js';
|
||||
|
||||
const props = defineProps({
|
||||
keyCode: String,
|
||||
dictCode: String,
|
||||
value: [Array, String],
|
||||
mode: {
|
||||
type: String,
|
||||
@@ -74,13 +69,13 @@
|
||||
|
||||
// -------------------------- 查询 字典数据 --------------------------
|
||||
|
||||
const dictValueList = ref([]);
|
||||
async function queryDict() {
|
||||
let res = await dictApi.valueList(props.keyCode);
|
||||
dictValueList.value = res.data.filter((item) => !props.hiddenOption.includes(item.valueCode));
|
||||
const dictDataList = ref([]);
|
||||
function initDictData() {
|
||||
let list = useDictStore().getDictData(props.dictCode);
|
||||
dictDataList.value = list.filter((item) => !props.hiddenOption.includes(item.dataValue) && !item.disabledFlag);
|
||||
}
|
||||
|
||||
onMounted(queryDict);
|
||||
onMounted(initDictData);
|
||||
|
||||
// -------------------------- 选中 相关、事件 --------------------------
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
width="100%"
|
||||
v-model:value="modelValue"
|
||||
:multiple="column.filterOptions.multiple"
|
||||
:keyCode="column.filterOptions.keyCode"
|
||||
:dictCode="column.filterOptions.dictCode"
|
||||
:enumName="column.filterOptions.enumName"
|
||||
:systemConfigKey="column.filterOptions.systemConfigKey"
|
||||
:placeholder="column.placeholder"
|
||||
@@ -78,12 +78,12 @@
|
||||
});
|
||||
|
||||
const components = {
|
||||
'enum-select': defineAsyncComponent(() => import('/@/components/framework/smart-enum-select/index.vue')),
|
||||
'dict-select': defineAsyncComponent(() => import('/@/components/support/dict-select/index.vue')),
|
||||
'employee-select': defineAsyncComponent(() => import('/@/components/system/employee-select/index.vue')),
|
||||
'enterprise-select': defineAsyncComponent(() => import('/@/components/business/oa/enterprise-select/index.vue')),
|
||||
'boolean-select': defineAsyncComponent(() => import('/@/components/framework/boolean-select/index.vue')),
|
||||
'category-tree': defineAsyncComponent(() => import('/@/components/business/category-tree-select/index.vue')),
|
||||
'enum-select': defineAsyncComponent(() => import('/src/components/framework/smart-enum-select/index.vue')),
|
||||
'dict-select': defineAsyncComponent(() => import('/src/components/support/dict-select/index.vue')),
|
||||
'employee-select': defineAsyncComponent(() => import('/src/components/system/employee-select/index.vue')),
|
||||
'enterprise-select': defineAsyncComponent(() => import('/src/components/business/oa/enterprise-select/index.vue')),
|
||||
'boolean-select': defineAsyncComponent(() => import('/src/components/framework/boolean-select/index.vue')),
|
||||
'category-tree': defineAsyncComponent(() => import('/src/components/business/category-tree-select/index.vue')),
|
||||
};
|
||||
|
||||
const componentsKey = Object.keys(components);
|
||||
@@ -61,16 +61,25 @@
|
||||
type: Number,
|
||||
require: true,
|
||||
},
|
||||
//如果开启表格scroll,需要传递 scroll标识,由于main.js中设置的全局默认的表格高度,所以scroll默认值设置为true
|
||||
scroll: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
||||
// 原始表格列数据(复制一份最原始的columns集合,以供后续各个地方使用)
|
||||
let originalColumn = reactive(_.cloneDeep(props.modelValue));
|
||||
// 存储最新的列数据
|
||||
let newColumn = reactive(_.cloneDeep(props.modelValue));
|
||||
|
||||
// 用于监听表格拖拽后新的列数据
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(value) => {
|
||||
originalColumn = value;
|
||||
newColumn = value;
|
||||
},
|
||||
{
|
||||
deep: true,
|
||||
@@ -170,13 +179,19 @@
|
||||
|
||||
const smartTableColumnModal = ref();
|
||||
function showModal() {
|
||||
smartTableColumnModal.value.show(originalColumn, props.tableId);
|
||||
smartTableColumnModal.value.show(newColumn, props.tableId,props.scroll);
|
||||
}
|
||||
|
||||
// 将弹窗修改的列数据,赋值给原表格 列数组
|
||||
function updateColumn(changeColumnArray) {
|
||||
let obj={}
|
||||
// 如果为空数组代表恢复默认,使用原始表格数据
|
||||
//合并列
|
||||
let obj = mergeColumn(_.cloneDeep(originalColumn), changeColumnArray);
|
||||
if(_.isEmpty(changeColumnArray)){
|
||||
obj = mergeColumn(_.cloneDeep(originalColumn), changeColumnArray);
|
||||
}else{
|
||||
obj = mergeColumn(_.cloneDeep(newColumn), changeColumnArray);
|
||||
}
|
||||
const newColumns = obj.newColumns;
|
||||
emit(
|
||||
'update:modelValue',
|
||||
@@ -190,6 +205,7 @@
|
||||
(e) => {
|
||||
if (e) {
|
||||
originalColumn = _.cloneDeep(props.modelValue);
|
||||
newColumn = _.cloneDeep(props.modelValue);
|
||||
buildUserTableColumns();
|
||||
}
|
||||
},
|
||||
|
||||
@@ -93,9 +93,11 @@
|
||||
// ---------------- 显示 / 隐藏 --------------------
|
||||
let tableId = null;
|
||||
const visible = ref(false);
|
||||
const scroll = ref(true);
|
||||
//显示
|
||||
function show(columns, showTableId) {
|
||||
function show(columns, showTableId,scrollFlag) {
|
||||
tableId = showTableId;
|
||||
scroll.value = scrollFlag;
|
||||
visible.value = true;
|
||||
getUserTableColumns(tableId, _.cloneDeep(columns));
|
||||
}
|
||||
@@ -181,7 +183,12 @@
|
||||
if (newIndex === oldIndex) {
|
||||
return;
|
||||
}
|
||||
moveTableData(oldIndex, newIndex);
|
||||
// 如果表格开启scroll会多一个虚拟列,所以要减1
|
||||
if(scroll.value){
|
||||
moveTableData(oldIndex-1, newIndex-1);
|
||||
}else{
|
||||
moveTableData(oldIndex, newIndex);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user