-
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/chart/README.md b/ant-design-jeecg-vue/src/components/chart/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..20c74a809eb6f9ab7bb53bc0e44d1c4c31fb09ce
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/chart/README.md
@@ -0,0 +1,328 @@
+# 报表组件文档
+
+## 柱状图
+
+##### 引用方式
+
+```js
+import Bar from '@/components/chart/Bar'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|------------|
+| title | string | | 报表标题 |
+| dataSource | array | ✔️ | 报表数据源 |
+| height | number | | 报表高度,默认254 |
+
+##### dataSource 示例
+
+```json
+[
+ {
+ "x": "1月",
+ "y": 320
+ },
+ {
+ "x": "2月",
+ "y": 457
+ },
+ {
+ "x": "3月",
+ "y": 182
+ }
+]
+```
+
+## 多列柱状图
+
+##### 引用方式
+
+```js
+import BarMultid from '@/components/chart/BarMultid'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|------------|
+| title | string | | 报表标题 |
+| fields | array | | 主列字段列表 |
+| dataSource | array | | 报表数据源 |
+| height | number | | 报表高度,默认254 |
+
+##### fields 示例
+
+```json
+["Jan.", "Feb.", "Mar.", "Apr.", "May", "Jun.", "Jul.", "Aug."]
+```
+
+##### dataSource 示例
+
+```json
+[
+ {
+ "type": "Jeecg", // 列名
+ "Jan.": 18.9,
+ "Feb.": 28.8,
+ "Mar.": 39.3,
+ "Apr.": 81.4,
+ "May": 47,
+ "Jun.": 20.3,
+ "Jul.": 24,
+ "Aug.": 35.6
+ },
+ {
+ "type": "Jeebt",
+ "Jan.": 12.4,
+ "Feb.": 23.2,
+ "Mar.": 34.5,
+ "Apr.": 99.7,
+ "May": 52.6,
+ "Jun.": 35.5,
+ "Jul.": 37.4,
+ "Aug.": 42.4
+ }
+]
+```
+
+## 迷你柱状图
+
+不带标题和数据轴的柱状图
+
+##### 引用方式
+
+```js
+import MiniBar from '@/components/chart/MiniBar'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|---------------|
+| width | number | | 报表宽度度,默认自适应宽度 |
+| height | number | | 报表高度,默认200 |
+| dataSource | array | | 报表数据源 |
+
+##### dataSource 示例
+
+```json
+[
+ {
+ "x": "1月",
+ "y": 320
+ },
+ {
+ "x": "2月",
+ "y": 457
+ },
+ {
+ "x": "3月",
+ "y": 182
+ }
+]
+```
+
+## 面积图
+
+##### 引用方式
+
+```js
+import AreaChartTy from '@/components/chart/AreaChartTy'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|------------|
+| title | string | | 报表标题 |
+| dataSource | array | ✔️ | 报表数据源 |
+| height | number | | 报表高度,默认254 |
+| lineSize | number | | 线的粗细,默认2 |
+
+##### dataSource 示例
+
+```json
+[
+ {
+ "x": "1月",
+ "y": 320
+ },
+ {
+ "x": "2月",
+ "y": 457
+ },
+ {
+ "x": "3月",
+ "y": 182
+ }
+]
+```
+
+## 多行折线图
+
+##### 引用方式
+
+```js
+import LineChartMultid from '@/components/chart/LineChartMultid'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|------------|
+| title | string | | 报表标题 |
+| fields | array | | 主列字段列表 |
+| dataSource | array | | 报表数据源 |
+| height | number | | 报表高度,默认254 |
+
+##### fields 示例
+
+```json
+["jeecg", "jeebt"]
+```
+
+##### dataSource 示例
+
+```json
+[
+ {
+ "type": "Jan", // 列名
+ "jeecg": 7,
+ "jeebt": 3.9
+ },
+ { "type": "Feb", "jeecg": 6.9, "jeebt": 4.2 },
+ { "type": "Mar", "jeecg": 9.5, "jeebt": 5.7 },
+ { "type": "Apr", "jeecg": 14.5, "jeebt": 8.5 },
+ { "type": "May", "jeecg": 18.4, "jeebt": 11.9 },
+ { "type": "Jun", "jeecg": 21.5, "jeebt": 15.2 },
+ { "type": "Jul", "jeecg": 25.2, "jeebt": 17 },
+ { "type": "Aug", "jeecg": 26.5, "jeebt": 16.6 },
+ { "type": "Sep", "jeecg": 23.3, "jeebt": 14.2 },
+ { "type": "Oct", "jeecg": 18.3, "jeebt": 10.3 },
+ { "type": "Nov", "jeecg": 13.9, "jeebt": 6.6 },
+ { "type": "Dec", "jeecg": 9.6, "jeebt": 4.8 }
+]
+```
+
+## 饼状图
+
+##### 引用方式
+
+```js
+import Pie from '@/components/chart/Pie'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|------------|
+| dataSource | array | | 报表数据源 |
+| height | number | | 报表高度,默认254 |
+
+##### dataSource 示例
+
+```json
+[
+ // 所有的 percent 相加等于 100
+ { "item": "一月", "percent": 40 },
+ { "item": "二月", "percent": 21 },
+ { "item": "三月", "percent": 17 },
+ { "item": "四月", "percent": 13 },
+ { "item": "五月", "percent": 9 }
+]
+```
+
+## 雷达图
+
+##### 引用方式
+
+```js
+import Radar from '@/components/chart/Radar'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|------------|
+| dataSource | array | | 报表数据源 |
+| height | number | | 报表高度,默认254 |
+
+##### dataSource 示例
+
+```json
+[
+ // score 最小值为 0,最大值为 100
+ { "item": "一月", "score": 40 },
+ { "item": "二月", "score": 20 },
+ { "item": "三月", "score": 67 },
+ { "item": "四月", "score": 43 },
+ { "item": "五月", "score": 90 }
+]
+```
+
+## 进度条
+
+##### 引用方式
+
+```js
+import MiniProgress from '@/components/chart/MiniProgress'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|------------|--------|----|-------------------|
+| percentage | number | | 当前进度百分比,默认0,最高100 |
+| target | number | | 目标值,默认10 |
+| height | number | | 进度条高度,默认10 |
+| color | string | | 进度条颜色,默认 #13C2C2 |
+
+## 仪表盘
+
+##### 引用方式
+
+```js
+import DashChartDemo from '@/components/chart/DashChartDemo'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|--------|--------|----|----------------|
+| title | string | | 报表标题 |
+| value | number | | 当前值,默认6.7,最大为9 |
+| height | number | | 报表高度,默认254 |
+
+## 排名列表
+
+##### 引用方式
+
+```js
+import RankList from '@/components/chart/RankList'
+```
+
+##### 参数列表
+
+| 参数名 | 类型 | 必填 | 说明 |
+|--------|--------|----|--------------|
+| title | string | | 报表标题 |
+| list | array | | 排名列表数据 |
+| height | number | | 报表高度,默认自适应高度 |
+
+##### list 示例
+
+```json
+[
+ {
+ "name": "北京朝阳 1 号店",
+ "total": 1981
+ },
+ { "name": "北京朝阳 2 号店", "total": 1359 },
+ { "name": "北京朝阳 3 号店", "total": 1354 },
+ { "name": "北京朝阳 4 号店", "total": 263 },
+ { "name": "北京朝阳 5 号店", "total": 446 },
+ { "name": "北京朝阳 6 号店", "total": 796 }
+]
+```
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/chart/Radar.vue b/ant-design-jeecg-vue/src/components/chart/Radar.vue
index 087526224ad34918ffb0832ac52afb14809623d2..b7b30b05d3b1e7bea24adb9433c372a23e136b00 100644
--- a/ant-design-jeecg-vue/src/components/chart/Radar.vue
+++ b/ant-design-jeecg-vue/src/components/chart/Radar.vue
@@ -1,12 +1,12 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -38,26 +38,48 @@
{
dataKey: 'score',
min: 0,
- max: 80
+ max: 100
}, {
dataKey: 'user',
alias: '类型'
}
]
+ const sourceData = [
+ { item: '示例一', score: 40 },
+ { item: '示例二', score: 20 },
+ { item: '示例三', score: 67 },
+ { item: '示例四', score: 43 },
+ { item: '示例五', score: 90 }
+ ]
+
export default {
name: 'Radar',
props: {
- data: {
+ height: {
+ type: Number,
+ default: 254
+ },
+ dataSource: {
type: Array,
- default: null,
+ default: () => []
}
},
- data () {
+ data() {
return {
axis1Opts,
axis2Opts,
- scale
+ scale,
+ data: sourceData
+ }
+ },
+ watch: {
+ dataSource(newVal) {
+ if (newVal.length === 0) {
+ this.data = sourceData
+ } else {
+ this.data = newVal
+ }
}
}
}
diff --git a/ant-design-jeecg-vue/src/components/chart/RankList.vue b/ant-design-jeecg-vue/src/components/chart/RankList.vue
index d6744ae480e5c6d757da7ea8fe7b1280882569b3..a50b02af9975dc9e918fc5cef6d6e676a127177e 100644
--- a/ant-design-jeecg-vue/src/components/chart/RankList.vue
+++ b/ant-design-jeecg-vue/src/components/chart/RankList.vue
@@ -1,7 +1,7 @@
{{ title }}
-
+
-
{{ index + 1 }}
{{ item.name }}
@@ -23,6 +23,10 @@
list: {
type: Array,
default: null
+ },
+ height: {
+ type: Number,
+ default: null
}
}
}
diff --git a/ant-design-jeecg-vue/src/components/chart/TransferBar.vue b/ant-design-jeecg-vue/src/components/chart/TransferBar.vue
index 33e178ab59d6a741a42a380a8691f7a5606562db..bb953e9f97a5eb0876278a3959421ed5b312ed71 100644
--- a/ant-design-jeecg-vue/src/components/chart/TransferBar.vue
+++ b/ant-design-jeecg-vue/src/components/chart/TransferBar.vue
@@ -2,63 +2,65 @@
{{ title }}
-
-
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/chart/Trend.vue b/ant-design-jeecg-vue/src/components/chart/Trend.vue
index ca8f591ca84d3f6625cd37e30ef6a33c5273c696..95cae98cb6931e1605362444de048d6495daf802 100644
--- a/ant-design-jeecg-vue/src/components/chart/Trend.vue
+++ b/ant-design-jeecg-vue/src/components/chart/Trend.vue
@@ -10,11 +10,13 @@
export default {
name: "Trend",
props: {
+ // 同title
term: {
type: String,
default: '',
required: true
},
+ // 百分比
percentage: {
type: Number,
default: null
diff --git a/ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue b/ant-design-jeecg-vue/src/components/dict/JDictSelectTag.vue
similarity index 84%
rename from ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue
rename to ant-design-jeecg-vue/src/components/dict/JDictSelectTag.vue
index e50125467f69a38f52f6487aba836d63eb584f3f..fe93b013d8ad039c42477e5bdd68f6a09c29ecee 100644
--- a/ant-design-jeecg-vue/src/components/dict/DictSelectTag.vue
+++ b/ant-design-jeecg-vue/src/components/dict/JDictSelectTag.vue
@@ -9,10 +9,11 @@
import {ajaxGetDictItems} from '@/api/api'
export default {
- name: "DictSelectTag",
+ name: "JDictSelectTag",
props: {
dictCode: String,
placeholder: String,
+ triggerChange: Boolean,
value: String,// 1.接收一个 value prop
},
data() {
@@ -37,7 +38,11 @@
},
handleInput(val) {
console.log(val);
- this.$emit('input', val); // 2.触发 input 事件,并传入新值
+ if(this.triggerChange){
+ this.$emit('change', val);
+ }else{
+ this.$emit('input', val);
+ }
}
}
}
diff --git a/ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js b/ant-design-jeecg-vue/src/components/dict/JDictSelectUtil.js
similarity index 70%
rename from ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js
rename to ant-design-jeecg-vue/src/components/dict/JDictSelectUtil.js
index e7d03389dd9674b85411075059641110db071239..df16af2aea4c4a6a413f868a34f21af09cb7f263 100644
--- a/ant-design-jeecg-vue/src/components/dict/DictSelectUtil.js
+++ b/ant-design-jeecg-vue/src/components/dict/JDictSelectUtil.js
@@ -37,6 +37,32 @@ export function filterDictText(dictOptions, text) {
return re;
}
+/**
+ * 字典值替换文本通用方法(多选)
+ * @param dictOptions 字典数组
+ * @param text 字典值
+ * @return String
+ */
+export function filterMultiDictText(dictOptions, text) {
+ if(!text){
+ return ""
+ }
+ let re = "";
+ let arr = text.split(",")
+ dictOptions.forEach(function (option) {
+ for(let i=0;i
+- 从字典表获取数据,dictCode格式说明: 字典code
+```html
+
+```
+
+v-decorator用法:
+```html
+
+```
+- 从数据库表获取字典数据,dictCode格式说明: 表名,文本字段,取值字段
+```html
+
+```
-DictSelectUtil.js 列表字典函数用法说明
-===
-例子
+# JDictSelectUtil.js 列表字典函数用法
----
-第一步: 引入依赖方法
- import {initDictOptions, filterDictText} from '@/components/dict/DictSelectUtil'
+- 第一步: 引入依赖方法
+```html
+ import {initDictOptions, filterDictText} from '@/components/dict/JDictSelectUtil'
+```
-第二步: 在created()初始化方法执行字典配置方法
+- 第二步: 在created()初始化方法执行字典配置方法
+```html
//初始化字典配置
- this.initDictConfig();
-第三步: 实现initDictConfig方法,加载列表所需要的字典(列表上有多个字典项,就执行多次initDictOptions方法)
- //sexDictOptions 自行定义
+ this.initDictConfig();
+```
+
+- 第三步: 实现initDictConfig方法,加载列表所需要的字典(列表上有多个字典项,就执行多次initDictOptions方法)
+
+```html
initDictConfig() {
//初始化字典 - 性别
initDictOptions('sex').then((res) => {
@@ -29,8 +45,12 @@ DictSelectUtil.js 列表字典函数用法说明
}
});
},
-第四步:实现字段的customRender方法
+```
+
+- 第四步: 实现字段的customRender方法
+```html
customRender: (text, record, index) => {
//字典值替换通用方法
return filterDictText(this.sexDictOptions, text);
- }
\ No newline at end of file
+ }
+```
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue b/ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue
deleted file mode 100644
index 867e55926a12535b1d19a71af5385e0caf02f038..0000000000000000000000000000000000000000
--- a/ant-design-jeecg-vue/src/components/dict/UserInfoTag.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/dict/index.js b/ant-design-jeecg-vue/src/components/dict/index.js
index 8bb2a957ea8de0615b4f7c9bba02ed4448252597..22c3235de9cf8e92aeb219f51229cd82fc48ab06 100644
--- a/ant-design-jeecg-vue/src/components/dict/index.js
+++ b/ant-design-jeecg-vue/src/components/dict/index.js
@@ -1,7 +1,7 @@
-import T from './DictSelectTag.vue'
-const DictSelectTag = {
+import T from './JDictSelectTag.vue'
+const JDictSelectTag = {
install: function (Vue) {
- Vue.component('DictSelectTag',T);
+ Vue.component('JDictSelectTag',T);
}
}
-export default DictSelectTag;
\ No newline at end of file
+export default JDictSelectTag;
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JCheckbox.vue b/ant-design-jeecg-vue/src/components/jeecg/JCheckbox.vue
new file mode 100644
index 0000000000000000000000000000000000000000..70f2d785b1ca2e8934c1769b3b292140f9ba95ab
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JCheckbox.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JDate.vue b/ant-design-jeecg-vue/src/components/jeecg/JDate.vue
index ed64d1611238e9750eab68ee7976b3b56bf6f266..7d6322cbb750b1d47353722726bfa821772ba83c 100644
--- a/ant-design-jeecg-vue/src/components/jeecg/JDate.vue
+++ b/ant-design-jeecg-vue/src/components/jeecg/JDate.vue
@@ -20,7 +20,6 @@
},
value:{
type: String,
- default: '',
required: false
},
dateFormat:{
@@ -71,4 +70,5 @@
}
}
}
+ //note: do not set the prop value one default property
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JEditableTable.vue b/ant-design-jeecg-vue/src/components/jeecg/JEditableTable.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7eefc457691ccb807c094f2aa9be2a7bdbefddaf
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JEditableTable.vue
@@ -0,0 +1,1248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JEditor.vue b/ant-design-jeecg-vue/src/components/jeecg/JEditor.vue
new file mode 100644
index 0000000000000000000000000000000000000000..90d5cd58c1d443300a2f073e1258763823515978
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JEditor.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JEllipsis.vue b/ant-design-jeecg-vue/src/components/jeecg/JEllipsis.vue
new file mode 100644
index 0000000000000000000000000000000000000000..627113f497af069eeb5d4e6eb1fb42c3ed14bd02
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JEllipsis.vue
@@ -0,0 +1,29 @@
+
+
+
+ {{value}}
+
+ {{ value | ellipsis(length) }}
+
+
+
+
+
+
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JImportModal.vue b/ant-design-jeecg-vue/src/components/jeecg/JImportModal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..50df1c4d1db9f1048313e8ccad61d9c66822d9b9
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JImportModal.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+ 选择导入文件
+
+
+
+
+ 关闭
+
+ {{ uploading ? '上传中...' : '开始上传' }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JSelectMultiple.vue b/ant-design-jeecg-vue/src/components/jeecg/JSelectMultiple.vue
new file mode 100644
index 0000000000000000000000000000000000000000..323ad32abd7042f5c93dbd47037c332cb1bfb598
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JSelectMultiple.vue
@@ -0,0 +1,65 @@
+
+
+
+ {{ item.text }}
+
+
+
+
+
diff --git a/ant-design-jeecg-vue/src/components/jeecg/JSuperQuery.vue b/ant-design-jeecg-vue/src/components/jeecg/JSuperQuery.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c5cd8cef38bd7d148006f5711f31ce0a3a35a85f
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/JSuperQuery.vue
@@ -0,0 +1,152 @@
+
+
+
+ 关 闭
+ 重 置
+ 查 询
+
+
+
+
+
+
+
+
+ handleSelected(option,item)">
+ {{ f.text }}
+
+
+
+
+
+ 等于
+ 不等于
+ 大于
+ 大于等于
+ 小于
+ 小于等于
+ 以..开始
+ 以..结尾
+ 包含
+ 在...中
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecg/README.md b/ant-design-jeecg-vue/src/components/jeecg/README.md
index 0c1e3444e76130db17eb4a147dc20c7e6cd58ce2..0947e1c173693ee6d4a8fe4f6fef5660a318ae7c 100644
--- a/ant-design-jeecg-vue/src/components/jeecg/README.md
+++ b/ant-design-jeecg-vue/src/components/jeecg/README.md
@@ -1,43 +1,198 @@
-日期组件
-说明:antd-vue日期组件需要用moment中转一下,用起来不是很方便,特二次封装,使用时只需要传字符串即可
-====
-
-参数说明
-----
-placeholder:placeholder
-readOnly:true/false
-value:绑定v-model或是v-decorator后不需要设置
-showTime:是否展示时间true/false
-dateFormat:日期格式 默认'YYYY-MM-DD' 若showTime设置为true则需要将其设置成对应的时间格式(如:YYYY-MM-DD HH:mm:ss)
-triggerChange:触发组件值改变的事件是否是change,当使用v-decorator时且没有设置decorator的option.trigger为input需要设置该值为true
-
+# JDate 日期组件 使用文档
+
+###### 说明: antd-vue日期组件需要用moment中转一下,用起来不是很方便,特二次封装,使用时只需要传字符串即可
+## 参数配置
+| 参数 | 类型 | 必填 |说明|
+|--------------|---------|----|---------|
+| placeholder |string | | placeholder |
+| readOnly | boolean | | true/false 默认false |
+| value | string | | 绑定v-model或是v-decorator后不需要设置 |
+| showTime | boolean | | 是否展示时间true/false 默认false |
+| dateFormat | string | |日期格式 默认'YYYY-MM-DD' 若showTime设置为true则需要将其设置成对应的时间格式(如:YYYY-MM-DD HH:mm:ss) |
+| triggerChange | string | |触发组件值改变的事件是否是change,当使用v-decorator时且没有设置decorator的option.trigger为input需要设置该值为true |
使用示例
----
1.组件带有v-model的使用方法
+```vue
+```
-2.组件带有v-decorator的使用方法
+2.组件带有v-decorator的使用方法
a).设置trigger-change属性为true
+ ```vue
+ ```
+
b).设置decorator的option.trigger为input
+ ```vue
+ ```
3.其他使用
添加style
-
+```vue
+
+```
添加placeholder
-
+```vue
+
+```
添加readOnly
-
+```vue
+
+```
备注:
script内需引入jdate
+```vue
+```
+
+
+ ---
+
+
+# JSuperQuery 高级查询 使用文档
+## 参数配置
+| 参数 | 类型 | 必填 | 说明 |
+|--------------|---------|----|----------------------|
+| fieldList | array |✔| 需要查询的列集合示例如下,type类型有:date/datetime/string/int/number |
+| callback | array | | 回调函数名称(非必须)默认handleSuperQuery |
+
+fieldList结构示例:
+```vue
+ const superQueryFieldList=[{
+ type:"date",
+ value:"birthday",
+ text:"生日"
+ },{
+ type:"string",
+ value:"name",
+ text:"用户名"
+ },{
+ type:"int",
+ value:"age",
+ text:"年龄"
+ }]
+```
+页面代码概述:
+----
+1.import之后再components之内声明
+```vue
+import JSuperQuery from '@/components/jeecg/JSuperQuery.vue';
+ export default {
+ name: "JeecgDemoList",
+ components: {
+ JSuperQuery
},
-....
-
\ No newline at end of file
+
+```
+2.页面引用
+```vue
+
+
+```
+3.list页面data中需要定义三个属性:
+```vue
+ fieldList:superQueryFieldList,
+ superQueryFlag:false,
+ superQueryParams:""
+```
+4.list页面声明回调事件handleSuperQuery(与组件的callback对应即可)
+```vue
+//高级查询方法
+handleSuperQuery(arg) {
+ if(!arg){
+ this.superQueryParams=''
+ this.superQueryFlag = false
+ }else{
+ this.superQueryFlag = true
+ this.superQueryParams=JSON.stringify(arg)
+ }
+ this.loadData()
+},
+```
+5.改造list页面方法
+```vue
+ // 获取查询条件
+ getQueryParams() {
+ let sqp = {}
+ if(this.superQueryParams){
+ sqp['superQueryParams']=encodeURI(this.superQueryParams)
+ }
+ var param = Object.assign(sqp, this.queryParam, this.isorter);
+ param.field = this.getQueryField();
+ param.pageNo = this.ipagination.current;
+ param.pageSize = this.ipagination.pageSize;
+ return filterObj(param);
+ },
+```
+6.打开弹框调用show方法:
+```vue
+this.$refs.superQueryModal.show();
+```
+
+# JEllipsis 字符串超长截取省略号显示
+
+###### 说明: 遇到超长文本展示,通过此标签可以截取省略号显示,鼠标放置会提示全文本
+## 参数配置
+| 参数 | 类型 | 必填 | 说明 |
+|--------|---------|----|----------------|
+| value |string | 必填 | 字符串文本|
+| length | number | 非必填 | 默认25 |
+使用示例
+----
+1.组件带有v-model的使用方法
+```vue
+
+
+
+# Modal弹框实现最大化功能
+
+1.定义modal的宽度:
+```vue
+
+```
+2.自定义modal的title,居右显示切换图标
+```vue
+
+
+
+```
+3.定义toggleScreen事件,用于切换modal宽度
+```vue
+ toggleScreen(){
+ if(this.modaltoggleFlag){
+ this.modalWidth = window.innerWidth;
+ }else{
+ this.modalWidth = 800;
+ }
+ this.modaltoggleFlag = !this.modaltoggleFlag;
+ },
+```
+4.data中声明上述用到的属性
+```vue
+ data () {
+ return {
+ modalWidth:800,
+ modaltoggleFlag:true,
+```
+
diff --git a/ant-design-jeecg-vue/src/components/jeecg/README_JEditableTable.md b/ant-design-jeecg-vue/src/components/jeecg/README_JEditableTable.md
new file mode 100644
index 0000000000000000000000000000000000000000..2604410dc44d1541349a99d330a28a148a3edfa0
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecg/README_JEditableTable.md
@@ -0,0 +1,396 @@
+# JEditableTable 帮助文档
+
+## 参数配置
+
+| 参数 | 类型 | 必填 | 说明 |
+|--------------|---------|----|---------------------------------|
+| columns | array | ✔️ | 表格列的配置描述,具体项见下表 |
+| dataSource | array | ✔️ | 表格数据 |
+| loading | boolean | | 是否正在加载,加载中不会显示任何行,默认false |
+| actionButton | boolean | | 是否显示操作按钮,包括"新增"、"删除",默认false |
+| rowNumber | boolean | | 是否显示行号,默认false |
+| rowSelection | boolean | | 是否可选择行,默认false |
+| maxHeight | number | | 设定最大高度(px),默认400 |
+| disabledRows | object | | 设定禁用的行,被禁用的行无法被选择和编辑,配置方法可以查看示例 |
+
+### columns 参数详解
+
+| 参数 | 类型 | 必填 | 说明 |
+|---------------|--------|----|----------------------------------------------------------------------|
+| title | string | ✔️ | 表格列头显示的问题 |
+| key | string | ✔️ | 列数据在数据项中对应的 key,必须是唯一的 |
+| type | string | ✔️ | 表单的类型,可以通过`JEditableTableUtil.FormTypes`赋值 |
+| width | string | | 列的宽度,可以是百分比,也可以是`px`或其他单位,建议设置为百分比,且每一列的宽度加起来不应超过100%,否则可能会不能达到预期的效果。留空会自动计算百分比 |
+| placeholder | string | | 表单预期值的提示信息,可以使用`${...}`变量替换文本(详见`${...} 变量使用方式`) |
+| defaultValue | string | | 默认值,在新增一行时生效 |
+| validateRules | array | | 表单验证规则,配置方式见[validateRules 配置规则](#validaterules-配置规则) |
+| props | object | | 设置添加给表单元素的自定义属性,例如:`props:{title: 'show title'}` |
+
+#### 当 type=checkbox 时所需的参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|----------------|---------|----|------------------------------------------------------------------------------------------------------------------------------------------|
+| defaultChecked | boolean | | 默认值是否选中 |
+| customValue | array | | 自定义值,checkbox需要的是boolean值,如果数据是其他值(例如`'Y' or 'N'`)时,就会导致错误,所以提供了该属性进行转换,例:`customValue: ['Y','N']`,会将`true`转换为`'Y'`,`false`转换为`'N'`,反之亦然 |
+
+#### 当 type=select 时所需的参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|---------|-------|----|-------------|
+| options | array | ✔️ | 下拉选项列表,详见下表 |
+
+##### options 所需参数
+
+| 参数 | 类型 | 必填 | 说明 |
+|-------|--------|----|------|
+| title | string | ✔️ | 显示标题 |
+| value | string | ✔️ | 真实值 |
+
+### validateRules 配置规则
+
+`validateRules` 需要的是一个数组,数组里每项都是一个规则,规则是object类型,规则的各个参数如下
+
+- `required` 是否必填,可选值为`true`or`false`
+- `pattern` 正则表达式验证,只有成功匹配该正则的值才能成功通过验证
+- `message` 当验证未通过时显示的提示文本,可以使用`${...}`变量替换文本(详见`${...} 变量使用方式`)
+- 配置示例请看[示例二](#示例二)
+
+## 事件
+
+| 事件名 | 触发时机 | 参数 |
+|-----------------|---------------------------|--------------------------|
+| added | 当添加行操作完成后触发 | |
+| deleted | 当删除行操作完成后触发(批量删除操作只会触发一次) | `deleteIds` 被逻辑删除的id |
+| selectRowChange | 当行被选中或取消选中时触发 | `selectedRowIds` 被选中行的id |
+
+## 方法
+
+关于方法的如何调用的问题,请在**FAQ**中查看[方法如何调用](#方法如何调用)
+
+### initialize
+
+用于初始化表格(清空表格)
+
+- `参数:` 无
+- `返回值:` 无
+
+### resetScrollTop
+
+重置滚动条Top位置
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-----|--------|----|--------------------------------------------------------|
+| top | number | | 新top位置,留空则滚动到上次记录的位置,用于解决切换tab选项卡时导致白屏以及自动将滚动条滚动到顶部的问题 |
+
+- `返回值:` 无
+
+### add
+
+主动添加行,默认情况下,当用户的滚动条已经在底部的时候,会将滚动条固定在底部,即添加后无需用户手动滚动,而会自动滚动到底部
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|---------------------|---------|----|--------------------------------------|
+| num | number | | 添加几行,默认为1 |
+| forceScrollToBottom | boolean | | 是否在添加后无论用户的滚动条在什么位置都强制滚动到底部,默认为false |
+
+- `返回值:` 无
+
+### removeRows
+
+主动删除一行或多行
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-----|----------------|----|--------------------------------------------------|
+| id | string 或 array | ✔️ | 被删除行的id。如果要删除一个,可以直接传id,如果要删除多个,需要将多个id封装成一个数组传入 |
+
+- `返回值:` 无
+
+### removeSelectedRows
+
+主动删除被选中的行
+
+- `参数:` 无
+- `返回值:` 无
+
+### getValues
+
+用于获取表格里所有表单的值,可进行表单验证
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|----------|----------|----|-----------------------------------------------------------------------------------------------|
+| callback | function | ✔️ | 获取值的回调方法,会传入`error`和`values`两个参数。`error`:未通过验证的数量,当等于`0`时代表验证通过;`values`:获取的值(即使未通过验证该字段也有数据) |
+| validate | boolean | | 是否进行表单验证,默认为`true`,设为`false`则代表忽略表单验证 |
+
+- `返回值:` 无
+
+### getValuesPromise
+
+`getValues`的promise版,会在`resolve`中传入获取到的值,会在`reject`中传入失败原因,例如`VALIDATE_NO_PASSED`
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|----------|---------|----|---------------------------|
+| validate | boolean | | 同`getValues`的`validate`参数 |
+
+- `返回值:` Promise
+
+### getDeleteIds
+
+用于获取被逻辑删除的行的id,返回一个数组,用户可将该数组传入后台,并进行批量删除
+
+- `参数:` 无
+- `返回值:` array
+
+### getAll
+
+获取所有的数据,包括values、deleteIds
+会在`resolve`中传入获取到的值:`{values, deleteIds}`
+会在`reject`中传入失败原因,例如`VALIDATE_NO_PASSED`
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|----------|---------|----|---------------------------|
+| validate | boolean | | 同`getValues`的`validate`参数 |
+
+- `返回值:` Promise
+
+### setValues
+
+主动设置表格中某行某列的值
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|--------|-------|----|-------------------------------|
+| values | array | | 传入一个数组,数组中的每项都是一行的新值,具体见下面的示例 |
+
+- `返回值:` 无
+- `示例:`
+
+```js
+setValues([
+ {
+ rowKey: id1, // 行的id
+ values: { // 在这里 values 中的 name 是你 columns 中配置的 key
+ 'name': 'zhangsan',
+ 'age': '20'
+ }
+ },
+ {
+ rowKey: id2,
+ values: {
+ 'name': 'lisi',
+ 'age': '23'
+ }
+ }
+])
+```
+
+## ${...} 变量使用方式
+
+在`placeholder`和`message`这两个属性中可以使用`${...}`变量来替换文本
+在[示例二](#示例二)中,配置了`title`为`名称`的一列,而`placeholder`配置成了`请输入${title}`,那么最终显示效果为`请输入名称`
+这就是`${...}`变量的使用方式,在`${}`中可以使用的变量有`title`、`key`、`defaultValue`这三个属性的值
+
+## JEditableTableUtil 使用说明
+
+在之前配置`columns`时提到过`JEditableTableUtil`这个工具类,那么如果想要知道详细的使用说明就请看这里
+
+### export 的常量
+
+#### FormTypes
+
+这是配置`columns.type`时用到的常量值,其中包括
+
+- `normal` 默认,直接显示值,不渲染表单
+- `input` 显示输入框
+- `inputNumber` 显示数字输入框
+- `checkbox` 显示多选框
+- `select` 显示选择器(下拉框)
+- `date` 日期选择器
+- `datetime` 日期时间选择器
+
+### VALIDATE_NO_PASSED
+
+在判断表单验证是否通过时使用,如果 reject 的值 === VALIDATE_NO_PASSED 则代表表单验证未通过,你可以做相应的其他处理,反之则可能是发生了报错,可以使用 `console.error` 输出
+
+### 封装的方法
+
+#### validateTables
+
+当你的页面中存在多个JEditableTable实例的时候,如果要获取每个实例的值、判断表单验证是否通过,就会让代码变得极其冗余、繁琐,于是我们就将该操作封装成了一个函数供你调用,它可以同时获取并验证多个JEditableTable实例的值,只有当所有实例的表单验证都通过后才会返回值,否则将会告诉你具体哪个实例没有通过验证。具体使用方法请看下面的示例
+
+- `参数:`
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|-------|----|------------------------------------|
+| cases | array | | 传入一个数组,数组中的每项都是一个JEditableTable的实例 |
+
+- `返回值:` Promise
+- `示例:`
+
+```js
+import { validateTables, VALIDATE_NO_PASSED } from '@/utils/JEditableTableUtil'
+// 封装cases
+let cases = []
+cases.push(this.$refs.editableTable1)
+cases.push(this.$refs.editableTable2)
+cases.push(this.$refs.editableTable3)
+cases.push(this.$refs.editableTable4)
+cases.push(this.$refs.editableTable5)
+// 同时验证并获取多个实例的值
+validateTables(cases).then((all) => {
+ // all 是一个数组,每项都对应传入cases的下标,包含values和deleteIds
+ console.log('所有实例的值:', all)
+}).catch((e = {}) => {
+ // 判断表单验证是否未通过
+ if (e.error === VALIDATE_NO_PASSED) {
+ console.log('未通过验证的实例下标:', e.index)
+ } else {
+ console.error('发生异常:', e)
+ }
+})
+```
+
+## FAQ
+
+### 方法如何调用?
+
+在[示例一](#示例一)中,设定了一个 `ref="editableTable"` 的属性,那么在vue中就可以使用`this.$refs.editableTable`获取到该表格的实例,并调取其中的方法。
+假如我要调取`initialize`方法,就可以这么写:`this.$refs.editableTable.initialize()`
+
+### 如何获取表单的值?
+
+使用`getValue`方法进行获取,详见[示例三](#示例三)
+
+### 如何进行表单验证?
+
+在获取值的时候默认会进行表单验证操作,用户在输入的时候也会对正在输入的表单进行验证,只要配置好规则就可以了
+
+### 如何添加或删除一行?
+
+该功能已封装到组件中,你只需要将 `actionButton` 设置为 `true` 即可,当然你也可以在代码中主动调用新增方法或修改,具体见上方的方法介绍。
+
+### 为什么使用了ATab组件后,切换选项卡会导致白屏或滚动条位置会归零?
+
+在ATab组件中确实会导致滚动条位置归零,且不会触发`onscroll`方法,所以无法动态加载行,导致白屏的问题出现。
+解决方法是在ATab组件的`onChange`事件触发时执行`resetScrollTop()`即可,但是需要注意的是:代码主动改变ATab的`activeKey`不会触发`onChange`事件,还需要你手动调用下
+
+- `示例`
+
+```html
+
+
+
+
+
+
+
+
+
+
+```
+
+```js
+/*--- 忽略部分代码片段 ---*/
+methods: {
+
+ /** 切换tab选项卡的时候重置editableTable的滚动条状态 */
+ handleChangeTab(key) {
+ this.$refs[`editableTable${key}`].resetScrollTop()
+ }
+
+}
+/*--- 忽略部分代码片段 ---*/
+```
+
+----
+
+## 示例一
+
+```html
+
+```
+
+## 示例二
+
+```js
+
+import { FormTypes } from '@/utils/JEditableTableUtil'
+
+/*--- 忽略部分代码片断 ---*/
+columns: [
+ {
+ title: '名称',
+ key: 'name',
+ type: FormTypes.input,
+ placeholder: '请输入${title}',
+ defaultValue: '称名',
+ // 表单验证规则
+ validateRules: [
+ {
+ required: true, // 必填
+ message: '${title}不能为空' // 提示的文本
+ },
+ {
+ pattern: /^[a-z|A-Z][a-z|A-Z\d_-]{0,}$/, // 正则
+ message: '${title}必须以字母开头,可包含数字、下划线、横杠'
+ }
+ ]
+ },
+ {
+ title: '年龄',
+ key: 'age',
+ type: FormTypes.inputNumber,
+ placeholder: '请输入${title}',
+ defaultValue: 18,
+ validateRules: [{required: true, message: '${title}不能为空'}]
+ }
+]
+/*--- 忽略部分代码片断 ---*/
+```
+
+## 示例三
+
+```js
+// 获取被逻辑删除的字段id
+let deleteIds = this.$refs.editableTable.getDeleteIds();
+// 获取所有表单的值,并进行验证
+this.$refs.editableTable.getValues((error, values) => {
+ // 错误数 = 0 则代表验证通过
+ if (error === 0) {
+ this.$message.success('验证通过')
+ // 将通过后的数组提交到后台或自行进行其他处理
+ console.log(deleteIds, values)
+ } else {
+ this.$message.error('验证未通过')
+ }
+})
+```
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecgbiz/JSearchUserByDep.vue b/ant-design-jeecg-vue/src/components/jeecgbiz/JSearchUserByDep.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e3dc7e0c84f7e0839246457093d8e1018c5766a9
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecgbiz/JSearchUserByDep.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户账号:
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecgbiz/JSearchUserByDepModal.vue b/ant-design-jeecg-vue/src/components/jeecgbiz/JSearchUserByDepModal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f4982b729360d9753479168c9c9917468471d588
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecgbiz/JSearchUserByDepModal.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户账号:
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecgbiz/JSelectUser.vue b/ant-design-jeecg-vue/src/components/jeecgbiz/JSelectUser.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e20485cfbb7c9c393afc31431514beec98d34426
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecgbiz/JSelectUser.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
diff --git a/ant-design-jeecg-vue/src/components/jeecgbiz/SearchUserByDepModal.vue b/ant-design-jeecg-vue/src/components/jeecgbiz/SearchUserByDepModal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..20c9768b5851e5e25fb69af96cba128a21c6a632
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecgbiz/SearchUserByDepModal.vue
@@ -0,0 +1,308 @@
+
+
+
+
+
+
+
+
+
+
+
+ 用户账号:
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecgbiz/SelectMultipleUserModal.vue b/ant-design-jeecg-vue/src/components/jeecgbiz/SelectMultipleUserModal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..70d65b273a0c95edad80e7d0aea7cf5336dc7691
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecgbiz/SelectMultipleUserModal.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/jeecgbiz/modal/SelectUserListModal.vue b/ant-design-jeecg-vue/src/components/jeecgbiz/modal/SelectUserListModal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..60bca0ec548a2133f1d7cbf5ecf9d61c955236af
--- /dev/null
+++ b/ant-design-jeecg-vue/src/components/jeecgbiz/modal/SelectUserListModal.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue b/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue
index 65c8e8657dcdd5d67012eadd06718132b03dc3cb..1ef77ab046a13a47744817b8df28011fb02ea509 100644
--- a/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue
+++ b/ant-design-jeecg-vue/src/components/layouts/TabLayout.vue
@@ -1,11 +1,12 @@
-
+
onContextmenu(e)"
v-if="multipage"
:active-key="activePage"
- style="margin-top: -8px; margin-bottom: -10px"
+ class="tab-layout-tabs"
+ style="height:52px"
:hide-add="true"
type="editable-card"
@change="changePage"
@@ -14,26 +15,33 @@
{{ page.meta.title }}
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -206,8 +237,63 @@
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
+
/*美化弹出Tab样式*/
.ant-tabs-nav-container {
margin-top: 4px;
}
+
+ /* 修改 ant-tabs 样式 */
+ .tab-layout-tabs.ant-tabs {
+ border-bottom: 1px solid #ccc;
+ border-left: 1px solid #ccc;
+ background-color: white;
+ padding: 0 20px;
+
+ .ant-tabs-bar {
+ margin: 4px 0 0;
+ border: none;
+ }
+
+ }
+
+ .ant-tabs {
+
+ &.ant-tabs-card .ant-tabs-tab {
+
+ padding: 0 24px !important;
+ background-color: white !important;
+ margin-right: 10px !important;
+
+ .ant-tabs-close-x {
+ width: 12px !important;
+ height: 12px !important;
+ opacity: 0 !important;
+ cursor: pointer !important;
+ font-size: 12px !important;
+ margin: 0 !important;
+ position: absolute;
+ top: 36%;
+ right: 6px;
+ }
+
+ &:hover .ant-tabs-close-x {
+ opacity: 1 !important;
+ }
+
+ }
+
+ }
+
+ .ant-tabs.ant-tabs-card > .ant-tabs-bar {
+ .ant-tabs-tab {
+ border: none !important;
+ border-bottom: 1px solid transparent !important;
+ }
+ .ant-tabs-tab-active {
+ border-color: #1890ff !important;
+ }
+ }
+
+
\ No newline at end of file
diff --git a/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue b/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue
index 180d5b559a3ac384079c9a18844c8c57058c4ec4..fa4aac68e59be43a398bafa81d89ca00c33e7219 100644
--- a/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue
+++ b/ant-design-jeecg-vue/src/components/layouts/UserLayout.vue
@@ -17,9 +17,9 @@