kn-cli 1.0.91 → 1.0.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/readme.md +3 -0
- package/src/.DS_Store +0 -0
- package/templates/template_admin/.gitignore +6 -0
- package/templates/template_app/.gitignore +6 -0
- package/templates/template_oa/.gitignore +6 -0
- package/templates/template_oa/jsconfig.json +5 -1
- package/templates/template_oa/public/src/components/dialog/index.jsx +237 -0
- package/templates/template_oa/public/src/components/{Empty → empty}/index.jsx +9 -0
- package/templates/template_oa/public/src/components/{FormRow → formRow}/index.jsx +25 -3
- package/templates/{template_oa_jwt/public/src/components/FormTable → template_oa/public/src/components/formTable}/index.jsx +39 -1
- package/templates/template_oa/public/src/components/iconFont/index.jsx +22 -0
- package/templates/template_oa/public/src/components/{IFrame → iframe}/index.jsx +18 -4
- package/templates/template_oa/public/src/components/{Layout/Basic → layout/basic}/index.jsx +7 -1
- package/templates/{template_oa_jwt/public/src/components/Layout/CenterBody → template_oa/public/src/components/layout/centerBody}/index.jsx +2 -0
- package/templates/{template_oa_jwt/public/src/components/Layout/FormBlock → template_oa/public/src/components/layout/formBlock}/index.jsx +3 -1
- package/templates/{template_oa_jwt/public/src/components/Layout → template_oa/public/src/components/layout}/index.jsx +12 -6
- package/templates/{template_oa_jwt/public/src/components/Layout/Provider → template_oa/public/src/components/layout/provider}/index.jsx +4 -0
- package/templates/template_oa/public/src/components/{Link → link}/index.jsx +16 -0
- package/templates/template_oa/public/src/components/{Nav → nav}/index.jsx +8 -2
- package/templates/template_oa/public/src/components/{Page/PageLoading → page/pageLoading}/index.jsx +25 -4
- package/templates/template_oa/public/src/components/{Popup → popup}/index.jsx +13 -0
- package/templates/{template_oa_jwt/public/src/components/Select/DepSelect → template_oa/public/src/components/select/depSelect}/index.jsx +15 -0
- package/templates/template_oa/public/src/components/{Select/StaffSelect → select/staffSelect}/index.jsx +27 -0
- package/templates/template_oa/public/src/components/title/index.jsx +3 -0
- package/templates/template_oa/public/src/components/{Toast → toast}/index.jsx +21 -1
- package/templates/template_oa/public/src/components/{Upload → upload}/index.jsx +41 -3
- package/templates/template_oa/public/src/hooks/index.jsx +1 -0
- package/templates/template_oa/public/src/hooks/useDelay.jsx +5 -0
- package/templates/template_oa/public/src/hooks/useImageLoader.jsx +1 -2
- package/templates/template_oa/public/src/hooks/useLoading.jsx +5 -1
- package/templates/template_oa/public/src/hooks/usePreload.jsx +2 -1
- package/templates/template_oa/public/src/hooks/useScrollTop.jsx +12 -0
- package/templates/template_oa/public/src/hooks/useSearch.jsx +28 -2
- package/templates/template_oa/public/src/hooks/useUpdate.jsx +5 -0
- package/templates/template_oa/public/src/index.jsx +15 -1
- package/templates/template_oa/public/src/pages/video/index.jsx +17 -13
- package/templates/template_oa/public/src/provider/app.jsx +33 -2
- package/templates/template_oa/public/src/route.jsx +4 -2
- package/templates/template_oa/public/src/services/common.js +11 -0
- package/templates/template_oa/public/src/services/index.js +44 -2
- package/templates/template_oa/public/src/type.js +48 -0
- package/templates/template_oa/public/src/utils/index.js +34 -17
- package/templates/template_oa_jwt/.gitignore +6 -0
- package/templates/template_oa_jwt/jsconfig.json +5 -1
- package/templates/template_oa_jwt/public/src/components/dialog/index.jsx +237 -0
- package/templates/template_oa_jwt/public/src/components/{Empty → empty}/index.jsx +9 -0
- package/templates/template_oa_jwt/public/src/components/{FormRow → formRow}/index.jsx +25 -3
- package/templates/{template_oa/public/src/components/FormTable → template_oa_jwt/public/src/components/formTable}/index.jsx +41 -2
- package/templates/template_oa_jwt/public/src/components/formTable/index.less +18 -0
- package/templates/template_oa_jwt/public/src/components/iconFont/index.jsx +22 -0
- package/templates/template_oa_jwt/public/src/components/{IFrame → iframe}/index.jsx +15 -0
- package/templates/template_oa_jwt/public/src/components/{Layout/Basic → layout/basic}/index.jsx +11 -6
- package/templates/{template_oa/public/src/components/Layout/CenterBody → template_oa_jwt/public/src/components/layout/centerBody}/index.jsx +2 -0
- package/templates/{template_oa/public/src/components/Layout/FormBlock → template_oa_jwt/public/src/components/layout/formBlock}/index.jsx +3 -1
- package/templates/{template_oa/public/src/components/Layout → template_oa_jwt/public/src/components/layout}/index.jsx +10 -4
- package/templates/{template_oa/public/src/components/Layout/Provider → template_oa_jwt/public/src/components/layout/provider}/index.jsx +4 -0
- package/templates/template_oa_jwt/public/src/components/{Link → link}/index.jsx +16 -0
- package/templates/template_oa_jwt/public/src/components/{Nav → nav}/index.jsx +11 -5
- package/templates/template_oa_jwt/public/src/components/{Page/PageLoading → page/pageLoading}/index.jsx +25 -4
- package/templates/template_oa_jwt/public/src/components/{Popup → popup}/index.jsx +13 -0
- package/templates/{template_oa/public/src/components/Select/DepSelect → template_oa_jwt/public/src/components/select/depSelect}/index.jsx +15 -0
- package/templates/template_oa_jwt/public/src/components/{Select/StaffSelect → select/staffSelect}/index.jsx +27 -0
- package/templates/template_oa_jwt/public/src/components/title/index.jsx +3 -0
- package/templates/template_oa_jwt/public/src/components/{Toast → toast}/index.jsx +21 -1
- package/templates/template_oa_jwt/public/src/components/{Upload → upload}/index.jsx +41 -3
- package/templates/template_oa_jwt/public/src/dictionary/index.js +2 -0
- package/templates/template_oa_jwt/public/src/hooks/index.jsx +2 -2
- package/templates/template_oa_jwt/public/src/hooks/useDelay.jsx +5 -0
- package/templates/template_oa_jwt/public/src/hooks/useImageLoader.jsx +1 -2
- package/templates/template_oa_jwt/public/src/hooks/useLoading.jsx +5 -1
- package/templates/template_oa_jwt/public/src/hooks/usePreload.jsx +2 -1
- package/templates/template_oa_jwt/public/src/hooks/useScrollTop.jsx +12 -0
- package/templates/template_oa_jwt/public/src/hooks/useSearch.jsx +28 -2
- package/templates/template_oa_jwt/public/src/hooks/useUpdate.jsx +5 -0
- package/templates/template_oa_jwt/public/src/pages/demo/index.jsx +17 -11
- package/templates/template_oa_jwt/public/src/provider/app.jsx +30 -1
- package/templates/template_oa_jwt/public/src/route.jsx +4 -2
- package/templates/template_oa_jwt/public/src/services/common.js +13 -1
- package/templates/template_oa_jwt/public/src/services/index.js +52 -8
- package/templates/template_oa_jwt/public/src/services/token.js +7 -0
- package/templates/template_oa_jwt/public/src/utils/index.js +62 -22
- package/templates/template_offcial/.gitignore +6 -0
- package/templates/template_oa/public/src/components/Alert/index.jsx +0 -0
- package/templates/template_oa/public/src/components/Alert/index.less +0 -0
- package/templates/template_oa/public/src/components/Auth/index.jsx +0 -44
- package/templates/template_oa/public/src/components/Dialog/index.jsx +0 -150
- package/templates/template_oa/public/src/components/Footer/index.jsx +0 -17
- package/templates/template_oa/public/src/components/Footer/index.less +0 -28
- package/templates/template_oa/public/src/components/IconFont/index.jsx +0 -10
- package/templates/template_oa/public/src/components/Loading/index.jsx +0 -14
- package/templates/template_oa/public/src/components/Loading/index.less +0 -85
- package/templates/template_oa_jwt/public/src/components/Alert/index.jsx +0 -0
- package/templates/template_oa_jwt/public/src/components/Alert/index.less +0 -0
- package/templates/template_oa_jwt/public/src/components/Auth/index.jsx +0 -44
- package/templates/template_oa_jwt/public/src/components/Dialog/index.jsx +0 -150
- package/templates/template_oa_jwt/public/src/components/Footer/index.jsx +0 -17
- package/templates/template_oa_jwt/public/src/components/Footer/index.less +0 -28
- package/templates/template_oa_jwt/public/src/components/IconFont/index.jsx +0 -10
- package/templates/template_oa_jwt/public/src/components/Loading/index.jsx +0 -16
- package/templates/template_oa_jwt/public/src/components/Loading/index.less +0 -96
- /package/templates/template_oa/public/src/components/{Dialog → dialog}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Empty → empty}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{FormRow → formRow}/index.less +0 -0
- /package/templates/{template_oa_jwt/public/src/components/FormTable → template_oa/public/src/components/formTable}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{IconFont → iconFont}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{IFrame → iframe}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Layout/Basic → layout/basic}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Layout/CenterBody → layout/centerBody}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Layout/FormBlock → layout/formBlock}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Layout → layout}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Link → link}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Nav → nav}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Page/PageLoading → page/pageLoading}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Popup → popup}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Select/StaffSelect → select/staffSelect}/index.less +0 -0
- /package/templates/template_oa/public/src/components/{Toast → toast}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Dialog → dialog}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Empty → empty}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{FormRow → formRow}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{IconFont → iconFont}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{IFrame → iframe}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Layout/Basic → layout/basic}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Layout/CenterBody → layout/centerBody}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Layout/FormBlock → layout/formBlock}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Layout → layout}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Link → link}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Nav → nav}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Page/PageLoading → page/pageLoading}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Popup → popup}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Select/StaffSelect → select/staffSelect}/index.less +0 -0
- /package/templates/template_oa_jwt/public/src/components/{Toast → toast}/index.less +0 -0
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
// @ts-ignore
|
|
1
2
|
import Axios from 'axios';
|
|
3
|
+
// @ts-ignore
|
|
2
4
|
import qs from 'qs';
|
|
5
|
+
// @ts-ignore
|
|
3
6
|
import { message } from 'antd';
|
|
7
|
+
|
|
8
|
+
|
|
4
9
|
const axios = Axios.create();
|
|
10
|
+
// @ts-ignore
|
|
5
11
|
console.log(`========API_ROOT:${API_HOST}========`);
|
|
6
12
|
|
|
13
|
+
// @ts-ignore
|
|
7
14
|
export const API_ROOT = API_HOST;
|
|
8
15
|
const tokenMode='header';//header,cookie
|
|
9
16
|
const tokenName='Authorization';
|
|
@@ -29,6 +36,7 @@ export const setJwt = (value) => {
|
|
|
29
36
|
jwt = value;
|
|
30
37
|
};
|
|
31
38
|
|
|
39
|
+
// @ts-ignore
|
|
32
40
|
window.setJwt=setJwt;
|
|
33
41
|
export const setLogout=(fn)=>{
|
|
34
42
|
logout=fn;
|
|
@@ -93,9 +101,23 @@ axios.interceptors.response.use(
|
|
|
93
101
|
);
|
|
94
102
|
|
|
95
103
|
|
|
104
|
+
/**
|
|
105
|
+
* @typedef RequestOptions 发送请求的扩展信息
|
|
106
|
+
* @property {number|boolean} ttl=false - 接口缓存周期,开启后默认为2秒,ttl单位为毫秒
|
|
107
|
+
* @property {string|boolean} noInterceptors=false - 关闭拦截类型,'all'为关闭包括401、403在内的所有异常,默认情况下只拦截response.code不为0的情况
|
|
108
|
+
*
|
|
109
|
+
*/
|
|
96
110
|
|
|
97
111
|
|
|
98
112
|
let buffer = {};
|
|
113
|
+
/**
|
|
114
|
+
* @function
|
|
115
|
+
* @description 发送一个GET请求
|
|
116
|
+
* @param {string} url - 请求地址
|
|
117
|
+
* @param {Object} [param] - 请求的参数
|
|
118
|
+
* @param {RequestOptions} [options] - 扩展参数
|
|
119
|
+
* @returns {Promise<Object>}
|
|
120
|
+
*/
|
|
99
121
|
export async function GET_DEFAULT(url, param, options) {
|
|
100
122
|
if (param) param = qs.stringify(param, { arrayFormat: 'indices' });
|
|
101
123
|
let now = Date.now();
|
|
@@ -128,6 +150,13 @@ export async function GET_DEFAULT(url, param, options) {
|
|
|
128
150
|
return response && response.data ? response.data : null;
|
|
129
151
|
}
|
|
130
152
|
|
|
153
|
+
/**
|
|
154
|
+
* @function
|
|
155
|
+
* @description 发送一个GET请求
|
|
156
|
+
* @param {string} url - 请求地址
|
|
157
|
+
* @param {Object} [param] - 请求的参数
|
|
158
|
+
* @returns {Promise<Object>}
|
|
159
|
+
*/
|
|
131
160
|
export async function GET_DEFAULT_CROSS(url, param) {
|
|
132
161
|
if (param) param = qs.stringify(param, { arrayFormat: 'indices' });
|
|
133
162
|
|
|
@@ -141,7 +170,14 @@ export async function GET_DEFAULT_CROSS(url, param) {
|
|
|
141
170
|
return response && response.data ? response.data : null;
|
|
142
171
|
}
|
|
143
172
|
|
|
144
|
-
|
|
173
|
+
/**
|
|
174
|
+
* 发送一个POST请求
|
|
175
|
+
* @param {string} url - 请求地址
|
|
176
|
+
* @param {Object} [params] - 请求的参数
|
|
177
|
+
* @param {RequestOptions} [options] - 扩展参数
|
|
178
|
+
* @returns {Promise<Object>}
|
|
179
|
+
*/
|
|
180
|
+
export async function POST_DEFAULT(url, params, options) {
|
|
145
181
|
let data = params;
|
|
146
182
|
// if (params) params = qs.stringify(params, { arrayFormat: 'indices' });
|
|
147
183
|
// if (typeof params === 'string') {
|
|
@@ -151,7 +187,7 @@ export async function POST_DEFAULT(url, params, method, options) {
|
|
|
151
187
|
// }
|
|
152
188
|
let token= await GET_TOKEN();
|
|
153
189
|
let response = await axios({
|
|
154
|
-
method:
|
|
190
|
+
method: 'POST',
|
|
155
191
|
url: url,
|
|
156
192
|
data:{
|
|
157
193
|
_token:token,
|
|
@@ -163,6 +199,12 @@ export async function POST_DEFAULT(url, params, method, options) {
|
|
|
163
199
|
return response && response.data ? response.data : null;
|
|
164
200
|
}
|
|
165
201
|
|
|
202
|
+
/**
|
|
203
|
+
* 发送一个POST请求
|
|
204
|
+
* @param {string} url - 请求地址
|
|
205
|
+
* @param {Object} [params] - 请求的参数
|
|
206
|
+
* @returns {Promise<Object>}
|
|
207
|
+
*/
|
|
166
208
|
export async function POST_DEFAULT_CROSS(url, params) {
|
|
167
209
|
let token= await GET_TOKEN();
|
|
168
210
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* 可自行扩展任意数量的属性
|
|
4
|
+
* @typedef {Object<string, any>} OtherAny
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 指向DOM节点的ref
|
|
9
|
+
* @typedef {object} RefDomElement
|
|
10
|
+
* @property {HTMLElement} current - DOM节点
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {object} FormDataInfo
|
|
17
|
+
* @property {string} btnControl
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {[FormDataInfo,Function]} UseStateFormData
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @typedef {FormDataInfo & OtherAny} TableContentData
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 分页
|
|
32
|
+
* @typedef {object} Pagination
|
|
33
|
+
* @property {number} current - 当前页码,1~N
|
|
34
|
+
* @property {number} pageSize=10 - 分页大小
|
|
35
|
+
* @property {number} total - 总记录条数
|
|
36
|
+
* @property {number} startIdx - 当前页面第一条的数据索引起始值
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 接口response数据
|
|
43
|
+
* @typedef {object} ServicesResponse
|
|
44
|
+
* @property {number} code - 接口处理结果,0为成功
|
|
45
|
+
* @property {object} data - 接口返回的数据
|
|
46
|
+
* @property {Pagination} page - 分页数据
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* 打开一个第三方链接
|
|
5
|
+
* @param {string} link - 链接地址
|
|
6
|
+
* @param {string} [target='_blank'] - 打开方式,_blank:新窗口打开
|
|
7
|
+
*/
|
|
3
8
|
export const openLink = (link, target = '_blank') => {
|
|
4
9
|
let domLink = document.createElement('a');
|
|
5
10
|
domLink.href = link;
|
|
6
11
|
domLink.setAttribute('target', target);
|
|
12
|
+
// @ts-ignore
|
|
7
13
|
domLink.style.opacity = 0;
|
|
14
|
+
// @ts-ignore
|
|
8
15
|
domLink.style.zIndex = -999;
|
|
9
16
|
document.body.appendChild(domLink);
|
|
10
17
|
domLink.click();
|
|
@@ -13,30 +20,38 @@ export const openLink = (link, target = '_blank') => {
|
|
|
13
20
|
}, 200);
|
|
14
21
|
}
|
|
15
22
|
|
|
23
|
+
/**
|
|
24
|
+
* 判断当前是否为移动端
|
|
25
|
+
* @returns {boolean}
|
|
26
|
+
*/
|
|
16
27
|
export const isMobile = () => {
|
|
17
28
|
return navigator.userAgent.match(
|
|
18
29
|
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
|
|
19
|
-
)
|
|
30
|
+
)?true:false
|
|
20
31
|
}
|
|
21
32
|
|
|
22
|
-
export const toHref = (url, replace, newWindow) => {
|
|
23
|
-
if(window.knFeishu){
|
|
24
|
-
window.knFeishu.ToHref(url,replace,newWindow);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
if (newWindow) {
|
|
28
|
-
window.open(url);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (replace) {
|
|
32
|
-
location.replace(url);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
location.href = url;
|
|
36
|
-
};
|
|
37
33
|
|
|
34
|
+
/**
|
|
35
|
+
* 跳转URL-兼容飞书
|
|
36
|
+
* @param {string} url - 链接地址
|
|
37
|
+
* @param {object} [options] - 参数
|
|
38
|
+
* @param {boolean} [options.replace] - 是否要覆盖当前URL记录
|
|
39
|
+
* @param {boolean} [options.newWindow] - 是否新窗口中打开
|
|
40
|
+
* @param {boolean} [options.reload] - 是否重载当前页面
|
|
41
|
+
*
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
38
44
|
export const jumpUrl=(url,options={})=>{
|
|
39
|
-
const {replace,newWindow,reload}= options;
|
|
45
|
+
const {replace=false,newWindow=false,reload=false}= options;
|
|
46
|
+
if(!reload){
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
if(window.knFeishu){
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
window.knFeishu.ToHref(url,replace,newWindow);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
40
55
|
if(reload){
|
|
41
56
|
location.reload();
|
|
42
57
|
return;
|
|
@@ -56,7 +71,9 @@ export const jumpUrl=(url,options={})=>{
|
|
|
56
71
|
|
|
57
72
|
// 关闭页面
|
|
58
73
|
export const closeWindow = () => {
|
|
74
|
+
// @ts-ignore
|
|
59
75
|
if (window.knFeishu && window.knFeishu.closeWindow) {
|
|
76
|
+
// @ts-ignore
|
|
60
77
|
window.knFeishu.closeWindow();
|
|
61
78
|
} else {
|
|
62
79
|
if (window.close) {
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import React from 'react';
|
|
3
|
+
// @ts-ignore
|
|
4
|
+
import ReactDOM from 'react-dom';
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
import { Button } from 'antd';
|
|
7
|
+
|
|
8
|
+
import IconFont from '@/components/iconFont';
|
|
9
|
+
|
|
10
|
+
import Popup from '@/components/popup';
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
import styles from './index.less';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 对话框组件
|
|
17
|
+
* @param {object} props
|
|
18
|
+
* @param {string} props.title - 对话框的标题内容
|
|
19
|
+
* @param {string} [props.okText='确认'] - 确认按钮文案
|
|
20
|
+
* @param {string} [props.cancelText='取消'] - 取消按钮文案
|
|
21
|
+
* @param {boolean} [props.noCancel=false] - 不显示取消按钮
|
|
22
|
+
* @param {()=>Promise<boolean>} [props.onOk] - 点击确认按钮回调
|
|
23
|
+
* @param {()=>Promise<boolean>} [props.onClose] - 点击关闭的回调
|
|
24
|
+
* @param {()=>void} [props.destory] - 对话框销毁的回调
|
|
25
|
+
* @param {JSX.Element|any} [props.children] - 子组件
|
|
26
|
+
*
|
|
27
|
+
* @returns {JSX.Element}
|
|
28
|
+
*/
|
|
29
|
+
const Dialog = (props) => {
|
|
30
|
+
const {
|
|
31
|
+
title='',
|
|
32
|
+
okText='确认',
|
|
33
|
+
cancelText='取消',
|
|
34
|
+
noCancel=false,
|
|
35
|
+
onOk:fnOnOk,
|
|
36
|
+
onClose:fnOnClose,
|
|
37
|
+
destory,
|
|
38
|
+
children
|
|
39
|
+
}= props;
|
|
40
|
+
async function onClose() {
|
|
41
|
+
if (fnOnClose) {
|
|
42
|
+
let ret = await fnOnClose();
|
|
43
|
+
if (ret) {
|
|
44
|
+
destory();
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
destory();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function onOk() {
|
|
51
|
+
if (fnOnOk) {
|
|
52
|
+
let ret = await fnOnOk();
|
|
53
|
+
if (ret) {
|
|
54
|
+
destory();
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
destory();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return (
|
|
61
|
+
<section className={styles.body}>
|
|
62
|
+
<div className={styles.mask} />
|
|
63
|
+
<section className={styles.wrap}>
|
|
64
|
+
<div className={styles.header}>
|
|
65
|
+
<span>{title}</span>
|
|
66
|
+
<IconFont icon='close' className={styles.close} onClick={onClose} />
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{children}
|
|
70
|
+
|
|
71
|
+
<div className={styles.footer}>
|
|
72
|
+
<Button type='primary' onClick={onOk}>
|
|
73
|
+
{okText}
|
|
74
|
+
</Button>
|
|
75
|
+
{noCancel ? (
|
|
76
|
+
''
|
|
77
|
+
) : (
|
|
78
|
+
<Button onClick={onClose} style={{ marginLeft: '10px' }}>
|
|
79
|
+
{cancelText}
|
|
80
|
+
</Button>
|
|
81
|
+
)}
|
|
82
|
+
</div>
|
|
83
|
+
</section>
|
|
84
|
+
</section>
|
|
85
|
+
);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* 显示一个对话框
|
|
90
|
+
* @param {Object} props
|
|
91
|
+
* @param {string} props.title - 对话框标题
|
|
92
|
+
* @param {string} [props.okText='确认'] - 确认按钮文案
|
|
93
|
+
* @param {string} [props.cancelText='取消'] - 取消按钮文案
|
|
94
|
+
* @param {boolean} [props.noCancel=false] - 不显示取消按钮
|
|
95
|
+
* @param {()=>Promise<boolean>} [props.onOk] - 点击确认按钮回调
|
|
96
|
+
* @param {()=>Promise<boolean>} [props.onClose] - 点击关闭的回调
|
|
97
|
+
* @param {JSX.Element|any} [props.component] - 对话框内的实际内容
|
|
98
|
+
*
|
|
99
|
+
* @returns {Promise<boolean>}
|
|
100
|
+
*/
|
|
101
|
+
export const ShowDialog = (props={title:''}) => {
|
|
102
|
+
const {title,onOk,okText,cancelText,noCancel,onClose,component}= props;
|
|
103
|
+
return new Promise((reslove) => {
|
|
104
|
+
let popup = Popup(reslove);
|
|
105
|
+
ReactDOM.render(
|
|
106
|
+
<Dialog
|
|
107
|
+
title={title}
|
|
108
|
+
destory={popup.destory}
|
|
109
|
+
onOk={onOk}
|
|
110
|
+
okText={okText}
|
|
111
|
+
cancelText={cancelText}
|
|
112
|
+
noCancel={noCancel}
|
|
113
|
+
onClose={onClose}
|
|
114
|
+
>
|
|
115
|
+
{component}
|
|
116
|
+
</Dialog>,
|
|
117
|
+
popup.dom
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* 一个带确认和取消的确认对话框
|
|
124
|
+
* @param {Object} props
|
|
125
|
+
* @param {string} props.title - 对话框标题
|
|
126
|
+
* @param {string} [props.okText='确认'] - 确认按钮文案
|
|
127
|
+
* @param {string} [props.cancelText='取消'] - 取消按钮文案
|
|
128
|
+
* @param {boolean} [props.noCancel=false] - 不显示取消按钮
|
|
129
|
+
* @param {JSX.Element|any} [props.content] - 对话框内的实际内容
|
|
130
|
+
* @returns {Promise<boolean>}
|
|
131
|
+
*/
|
|
132
|
+
export const ShowConfirm = async (props) => {
|
|
133
|
+
if (typeof props === 'string') {
|
|
134
|
+
// @ts-ignore
|
|
135
|
+
props = { content: props };
|
|
136
|
+
}
|
|
137
|
+
const {title='注意',okText='确认',cancelText='取消',noCancel=false,content}= props;
|
|
138
|
+
|
|
139
|
+
let result = false;
|
|
140
|
+
await ShowDialog({
|
|
141
|
+
title: title || '注意',
|
|
142
|
+
okText: okText || '确认',
|
|
143
|
+
cancelText: cancelText || '取消',
|
|
144
|
+
noCancel: noCancel,
|
|
145
|
+
onClose: async () => {
|
|
146
|
+
result = false;
|
|
147
|
+
return Promise.resolve(true);
|
|
148
|
+
},
|
|
149
|
+
onOk: async () => {
|
|
150
|
+
result = true;
|
|
151
|
+
return Promise.resolve(true);
|
|
152
|
+
},
|
|
153
|
+
component: (
|
|
154
|
+
<div className={styles.confirmWrap}>
|
|
155
|
+
{content}
|
|
156
|
+
</div>
|
|
157
|
+
),
|
|
158
|
+
});
|
|
159
|
+
return result;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* 一个只有确认按钮的提示框
|
|
164
|
+
* @param {Object} props
|
|
165
|
+
* @param {string} [props.okText='确认'] - 确认按钮文案
|
|
166
|
+
* @param {JSX.Element|any} [props.content] - 对话框内的实际内容
|
|
167
|
+
* @param {()=>void} [props.onOk] - 点击确认的回调
|
|
168
|
+
* @param {()=>void} props.destory - 关闭对话框的回调
|
|
169
|
+
* @param {string} [props.type='error'] - 警告类型,'error'|'suuccess'
|
|
170
|
+
*
|
|
171
|
+
* @returns {JSX.Element}
|
|
172
|
+
*/
|
|
173
|
+
const Alert = (props) => {
|
|
174
|
+
const {onOk:fnOnOk,destory,type,content,okText='确认'}= props;
|
|
175
|
+
function onOk() {
|
|
176
|
+
if (fnOnOk) fnOnOk();
|
|
177
|
+
destory();
|
|
178
|
+
}
|
|
179
|
+
return (
|
|
180
|
+
<section className={styles.body }>
|
|
181
|
+
<div className={styles.mask} />
|
|
182
|
+
<section className={styles.wrapAlert}>
|
|
183
|
+
<div className={styles.alertContent}>
|
|
184
|
+
<div className={type === 'success' ? styles.iconSuccess : styles.iconError} />
|
|
185
|
+
<span>{content}</span>
|
|
186
|
+
</div>
|
|
187
|
+
<div className={styles.alertFooter}>
|
|
188
|
+
<span onClick={onOk}>{okText}</span>
|
|
189
|
+
</div>
|
|
190
|
+
</section>
|
|
191
|
+
</section>
|
|
192
|
+
);
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* 显示一个alert
|
|
197
|
+
* @param {Object} props
|
|
198
|
+
* @param {JSX.Element|any} [props.content] - 对话框内的实际内容
|
|
199
|
+
* @param {()=>void} [props.onOk] - 点击确认的回调
|
|
200
|
+
* @param {string} [props.type='success'] - 警告类型,'error'|'suuccess'
|
|
201
|
+
*
|
|
202
|
+
* @returns {Promise<void>}
|
|
203
|
+
*/
|
|
204
|
+
export const ShowAlert = (props) => {
|
|
205
|
+
if (props.constructor === String) {
|
|
206
|
+
// @ts-ignore
|
|
207
|
+
props = { content: props };
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const {type='success',onOk,content}=props;
|
|
211
|
+
|
|
212
|
+
return new Promise((reslove) => {
|
|
213
|
+
let popup = Popup(reslove);
|
|
214
|
+
|
|
215
|
+
ReactDOM.render(
|
|
216
|
+
<Alert destory={popup.destory} type={type} onOk={onOk} content={content} />,
|
|
217
|
+
popup.dom
|
|
218
|
+
);
|
|
219
|
+
});
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* 显示一个错误提示alert
|
|
224
|
+
* @param {Object} props
|
|
225
|
+
* @param {JSX.Element|any} [props.content] - 对话框内的实际内容
|
|
226
|
+
* @param {()=>void} [props.onOk] - 点击确认的回调
|
|
227
|
+
*
|
|
228
|
+
* @returns {Promise<void>}
|
|
229
|
+
*/
|
|
230
|
+
export const ShowErrorAlert = (props) => {
|
|
231
|
+
if (props.constructor === String) {
|
|
232
|
+
props = { content: props };
|
|
233
|
+
}
|
|
234
|
+
return ShowAlert({ ...props, type: 'fail' });
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
export default Dialog;
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
// @ts-ignore
|
|
1
2
|
import React from 'react';
|
|
3
|
+
// @ts-ignore
|
|
2
4
|
import { Empty, Button } from 'antd';
|
|
5
|
+
|
|
6
|
+
// @ts-ignore
|
|
3
7
|
import styles from './index.less';
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* 当table数据为空时下方有“添加数据”按钮
|
|
11
|
+
* @param {object} props
|
|
12
|
+
* @param {()=>void} [props.onClick] - 点击添加数据的回调
|
|
13
|
+
* @param {boolean} [props.editmode] - 是否允许编辑模式,允许的话就会有添加数据的按钮
|
|
14
|
+
*
|
|
15
|
+
* @returns {JSX.Element}
|
|
7
16
|
*/
|
|
8
17
|
function TableEmpty(props) {
|
|
9
18
|
return (
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
// @ts-ignore
|
|
2
5
|
import styles from './index.less';
|
|
3
6
|
|
|
7
|
+
/**
|
|
8
|
+
* 表单的行组件,用于将子组件按照一行2列方式排列
|
|
9
|
+
* @param {Object} props
|
|
10
|
+
* @param {JSX.Element[]|JSX.Element} props.children
|
|
11
|
+
*
|
|
12
|
+
* @returns {JSX.Element}
|
|
13
|
+
*/
|
|
4
14
|
const FormRow = (props) => {
|
|
5
15
|
function createCol(item, idx) {
|
|
6
16
|
if (!item) return '';
|
|
@@ -9,6 +19,7 @@ const FormRow = (props) => {
|
|
|
9
19
|
<div key={idx} className={styles.formRow}>
|
|
10
20
|
<hgroup className={styles.row}>
|
|
11
21
|
<div className={styles.title}>
|
|
22
|
+
{/* @ts-ignore */}
|
|
12
23
|
<div required={editmode && item.props.required}>{item.props.label}</div>
|
|
13
24
|
</div>
|
|
14
25
|
<div className={styles.data}>{item}</div>
|
|
@@ -18,20 +29,31 @@ const FormRow = (props) => {
|
|
|
18
29
|
}
|
|
19
30
|
return (
|
|
20
31
|
<section className={styles.formRowBody}>
|
|
32
|
+
{/* @ts-ignore */}
|
|
21
33
|
{props.children.length > 0 ? props.children.map(createCol) : createCol(props.children)}
|
|
22
34
|
</section>
|
|
23
35
|
);
|
|
24
36
|
};
|
|
25
37
|
|
|
38
|
+
/**
|
|
39
|
+
* 表单的行组件中的列组件
|
|
40
|
+
* @param {Object} props
|
|
41
|
+
* @param {JSX.Element[]|JSX.Element} props.children
|
|
42
|
+
* @param {boolean} [props.editmode=true] - 可编辑模式
|
|
43
|
+
* @param {string} [props.txtdata='-'] - 列的标题
|
|
44
|
+
* @param {boolean} [props.textarea=false] - 是否多行显示文本
|
|
45
|
+
*
|
|
46
|
+
* @returns {JSX.Element|JSX.Element[]|any}
|
|
47
|
+
*/
|
|
26
48
|
function HocEditControl(props) {
|
|
27
49
|
const { editmode = true, txtdata ,textarea} = props;
|
|
28
50
|
if (editmode) {
|
|
29
51
|
return props.children;
|
|
30
52
|
}
|
|
31
53
|
if(textarea){
|
|
32
|
-
return <span style={{whiteSpace:'pre-wrap'}}>{txtdata
|
|
54
|
+
return <span style={{whiteSpace:'pre-wrap'}}>{txtdata}</span>
|
|
33
55
|
}
|
|
34
|
-
return <span>{txtdata
|
|
56
|
+
return <span>{txtdata}</span>;
|
|
35
57
|
}
|
|
36
58
|
|
|
37
59
|
FormRow.Col = HocEditControl;
|
|
@@ -1,6 +1,46 @@
|
|
|
1
|
+
// @ts-ignore
|
|
1
2
|
import React ,{useImperativeHandle,useState,forwardRef} from 'react';
|
|
3
|
+
|
|
4
|
+
// @ts-ignore
|
|
2
5
|
import uuid from 'js-uuid';
|
|
3
6
|
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
import styles from './index.less';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {object} ColumnsOptions
|
|
13
|
+
* @property {string} formItemName
|
|
14
|
+
* @property {(record:any,index:number,event:any)=>void} onDel
|
|
15
|
+
* @property {(record:any,index:number,event:any)=>void} onAdd
|
|
16
|
+
* @property {(record:any,index:number,event:any)=>void} onCopy
|
|
17
|
+
* @property {(initValue:[],event:any)=>void} onReset
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 表格表单组件
|
|
22
|
+
* @param {Object} props
|
|
23
|
+
* @param {JSX.Element|any} props.Table - Table组件,一般为antd的Table组件
|
|
24
|
+
* @param {Object} props.form - Form组件
|
|
25
|
+
* @param {string} props.formItemName - 表格FormItem的name
|
|
26
|
+
* @param {boolean} [props.saveLast=false] - 是否当没有数据时,默认保留一行数据
|
|
27
|
+
* @param {Object[]} [props.initialValue] - 初始数据
|
|
28
|
+
*
|
|
29
|
+
* @param {(record:object,index:number)=>object[]} [props.onCopy] - 点击复制的回调
|
|
30
|
+
* @param {(record:object,index:number)=>object[]} [props.onAdd] - 点击添加的回调
|
|
31
|
+
*
|
|
32
|
+
* @param {(value:any)=>void} [props.onChange] - 数据发生变动时的回调
|
|
33
|
+
* @param {(value:any)=>void} [props.onRefresh] - 刷新时的回调
|
|
34
|
+
*
|
|
35
|
+
* @param {(options:ColumnsOptions)=>[]} props.columns - 获取列配置数据的回调
|
|
36
|
+
*
|
|
37
|
+
* @param {Object} [props.newdata] - 添加新行的数据模版
|
|
38
|
+
* @param {Object} [props.antTableOptions] - antd的Table扩展参数
|
|
39
|
+
*
|
|
40
|
+
* @param {any} ref
|
|
41
|
+
*
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
4
44
|
const TableFormItem =(props,ref)=> {
|
|
5
45
|
const {Table,form,formItemName,saveLast} = props;
|
|
6
46
|
const getNewId=()=>{
|
|
@@ -119,10 +159,9 @@ const TableFormItem =(props,ref)=> {
|
|
|
119
159
|
onReset,
|
|
120
160
|
}));
|
|
121
161
|
|
|
122
|
-
|
|
123
162
|
return (
|
|
124
|
-
|
|
125
163
|
<Table
|
|
164
|
+
className={styles.table}
|
|
126
165
|
{...{rowKey: '_rowKey',...props.antTableOptions}}
|
|
127
166
|
dataSource={value}
|
|
128
167
|
columns={props.columns({formItemName,onDel, onAdd,onReset,onCopy})}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.table {
|
|
2
|
+
tr {
|
|
3
|
+
th, th>div {
|
|
4
|
+
text-align: center;
|
|
5
|
+
&[required]:before {
|
|
6
|
+
font-size: 0.12rem;
|
|
7
|
+
content: '*';
|
|
8
|
+
color: #f04134;
|
|
9
|
+
margin-right: 10px;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
:global {
|
|
14
|
+
.ant-form-item-explain-error {
|
|
15
|
+
text-align: left;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
import styles from'./index.less';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* iconFont图标
|
|
9
|
+
* @param {object} props
|
|
10
|
+
* @param {string} [props.icon] - 图标名称
|
|
11
|
+
* @param {string} [props.className] - 扩展类名
|
|
12
|
+
* @param {()=>void} [props.onClick] - 点击回调
|
|
13
|
+
*
|
|
14
|
+
* @returns {JSX.Element}
|
|
15
|
+
*/
|
|
16
|
+
const IconFont=(props)=>{
|
|
17
|
+
const {icon,className,...others} = props;
|
|
18
|
+
return (
|
|
19
|
+
<span {...others} className={`iconfont icon-${icon} ${styles.iconBox} ${className||''}`} ></span>
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
export default IconFont;
|
|
@@ -1,8 +1,22 @@
|
|
|
1
|
+
// @ts-ignore
|
|
1
2
|
import React, { useEffect,useState,useRef } from 'react';
|
|
3
|
+
|
|
2
4
|
import { setRefreshToken } from '@/services/token'
|
|
3
5
|
import { setJwt } from '@/services';
|
|
6
|
+
|
|
7
|
+
// @ts-ignore
|
|
4
8
|
import styles from './index.less';
|
|
5
9
|
|
|
10
|
+
/**
|
|
11
|
+
* iframe组件
|
|
12
|
+
* @param {object} props
|
|
13
|
+
* @param {string} props.name - iframe的唯一名称
|
|
14
|
+
* @param {string} props.url - url地址
|
|
15
|
+
*
|
|
16
|
+
* @param {string} [props.className] - 扩展样式名
|
|
17
|
+
*
|
|
18
|
+
* @returns {JSX.Element}
|
|
19
|
+
*/
|
|
6
20
|
const Iframe=(props)=>{
|
|
7
21
|
const {className=''}=props;
|
|
8
22
|
const ref = useRef();
|
|
@@ -19,6 +33,7 @@ const Iframe=(props)=>{
|
|
|
19
33
|
}else if(e?.data?.msg==='server'){
|
|
20
34
|
setRefreshToken('');
|
|
21
35
|
setJwt('');
|
|
36
|
+
// @ts-ignore
|
|
22
37
|
const url = `${OA_KSSO_HOST}?target=${encodeURIComponent(location.href)}`;
|
|
23
38
|
location.href=url;
|
|
24
39
|
}else{
|