@longhongguo/form-create-ant-design-vue 3.3.81 → 3.3.83

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/api/crawler.js ADDED
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 爬虫/竞对相关接口(基于 frame/fetch.js)
3
+ * 每个方法返回供 api.fetch(config) 使用的 config,调用方:api.fetch(crawlerApi.xxx(params))
4
+ */
5
+ import { buildAction } from '../device/request'
6
+
7
+ /**
8
+ * 根据智鲜本地门店 ID 查询竞对门店列表
9
+ * 使用:api.fetch(crawlerApi.getCompetitionStore({ zxLocalStoreId }))
10
+ */
11
+ export function getCompetitionStore(params = {}) {
12
+ const { zxLocalStoreId, ...rest } = params
13
+ return {
14
+ action: buildAction('crawlerApi', `/competition-store/by-zx-store/${zxLocalStoreId}`),
15
+ method: 'get',
16
+ query: rest,
17
+ dataType: 'json'
18
+ }
19
+ }
20
+
21
+ /**
22
+ * 根据 ID 查询竞对门店(单条,含更新时间等)
23
+ * 使用:api.fetch(crawlerApi.getCompetitionStoreById({ zxLocalStoreId }))
24
+ */
25
+ export function getCompetitionStoreById(params = {}) {
26
+ const { zxLocalStoreId, ...rest } = params
27
+ return {
28
+ action: buildAction('crawlerApi', `/competition-store/${zxLocalStoreId}`),
29
+ method: 'get',
30
+ query: rest,
31
+ dataType: 'json'
32
+ }
33
+ }
34
+
35
+ /**
36
+ * 根据门店 ID 获取爬虫任务列表(拉取记录)
37
+ * 使用:api.fetch(crawlerApi.getCrawlerTaskByStore({ storeId }))
38
+ */
39
+ export function getCrawlerTaskByStore(params = {}) {
40
+ const { storeId, ...rest } = params
41
+ return {
42
+ action: buildAction('crawlerApi', `/crawler-task/main/by-store/${storeId}`),
43
+ method: 'get',
44
+ query: rest,
45
+ dataType: 'json'
46
+ }
47
+ }
48
+
49
+ /**
50
+ * 创建主任务(拉取竞对数据等)
51
+ * 使用:api.fetch(crawlerApi.createCrawlerTask(data))
52
+ */
53
+ export function createCrawlerTask(data = {}) {
54
+ return {
55
+ action: buildAction('crawlerApi', '/crawler-task/main'),
56
+ method: 'post',
57
+ data,
58
+ dataType: 'json'
59
+ }
60
+ }
package/api/example.js ADDED
@@ -0,0 +1,57 @@
1
+ /**
2
+ * 示例接口模块 - 统一接口管理(基于 frame/fetch.js)
3
+ * 每个方法返回供 api.fetch(config) 使用的 config,调用方:api.fetch(exampleApi.xxx(params))
4
+ */
5
+ import { buildAction } from '../device/request'
6
+
7
+ /**
8
+ * 示例:基础域 - 健康检查
9
+ * 使用:api.fetch(exampleApi.healthCheck(params))
10
+ */
11
+ export function healthCheck(params = {}) {
12
+ return {
13
+ action: buildAction('basicApi', '/health'),
14
+ method: 'get',
15
+ query: params,
16
+ dataType: 'json'
17
+ }
18
+ }
19
+
20
+ /**
21
+ * 示例:商家中心 - 建店申请数量(与 zxgj store 接口路径一致)
22
+ * 使用:api.fetch(exampleApi.getGroupByStatusCount(params))
23
+ */
24
+ export function getGroupByStatusCount(params = {}) {
25
+ return {
26
+ action: buildAction('merchantApi', '/store/getGroupByStatusCount'),
27
+ method: 'get',
28
+ query: params,
29
+ dataType: 'json'
30
+ }
31
+ }
32
+
33
+ /**
34
+ * 示例:商家中心 - 分页查询
35
+ * 使用:api.fetch(exampleApi.pageBuildApply(data))
36
+ */
37
+ export function pageBuildApply(data = {}) {
38
+ return {
39
+ action: buildAction('merchantApi', '/store/pageBuildApply'),
40
+ method: 'post',
41
+ data,
42
+ dataType: 'json'
43
+ }
44
+ }
45
+
46
+ /**
47
+ * 示例:商家中心 - 申请建店
48
+ * 使用:api.fetch(exampleApi.applyBuild(data))
49
+ */
50
+ export function applyBuild(data = {}) {
51
+ return {
52
+ action: buildAction('merchantApi', '/store/applyBuild'),
53
+ method: 'post',
54
+ data,
55
+ dataType: 'json'
56
+ }
57
+ }
package/api/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 统一接口管理入口(基于 frame/fetch.js)
3
+ * 使用方式:api.fetch(exampleApi.xxx(params)) 或 api.fetch(storeApi.getGroupByStatusCount(params))
4
+ */
5
+ export * from './example'
6
+ export * from './crawler'
@@ -0,0 +1,7 @@
1
+ /**
2
+ * device 统一导出(基于 frame/fetch.js,不使用 axios)
3
+ * api 层用 buildAction(device, path) 拼 action,调用方用 api.fetch(config) 发请求
4
+ * GET 请求可用 params,调用 api.fetch(normalizeFetchConfig(config)) 会映射为 query
5
+ */
6
+ export { getDevice, buildAction, normalizeFetchConfig }
7
+ export { default as urls } from './request'
@@ -0,0 +1,72 @@
1
+ /**
2
+ * 统一 API 服务 - device 入口(基于 frame/fetch.js,不使用 axios)
3
+ * 按业务域提供 baseURL,供 api 层拼出完整 action,由 api.fetch(config) 发请求(token 等已封装)
4
+ */
5
+ const protocol = typeof location !== 'undefined' ? location.protocol : 'https:'
6
+ const isDev = typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'development'
7
+ const isSandbox =
8
+ typeof location !== 'undefined' && location.host && location.host.lastIndexOf('sandbox') > -1
9
+
10
+ const prefix = isSandbox || isDev ? 'sandbox-' : ''
11
+
12
+ const urls = {
13
+ basicApi: `${protocol}//${prefix}zxgj.zhixianai.com/api/`,
14
+ goodsApi: `${protocol}//${prefix}goods-api.zhixianai.com`,
15
+ manageApi: `${protocol}//${prefix}manage-api.zhixianai.com`,
16
+ billApi: `${protocol}//${prefix}finance.zhixianai.com`,
17
+ orderApi: `${protocol}//${prefix}order-api.zhixianai.com`,
18
+ payApi: `${protocol}//${prefix}pay.zhixianai.com`,
19
+ operationApi: `${protocol}//${prefix}operation-api.zhixianai.com/api`,
20
+ merchantApi: `${protocol}//${prefix}merchant-api.zhixianai.com/api`,
21
+ ossApi: `${protocol}//${prefix}upload.zhixianai.com`,
22
+ marketingApi: `${protocol}//${prefix}marketing-api.zhixianai.com/api`,
23
+ customApi: `${protocol}//${prefix}custom-service.zhixianai.com/api`,
24
+ engineApi: `${protocol}//${prefix}flow.zhixianai.com/api`,
25
+ messageApi: `${protocol}//${prefix}message.zhixianai.com/api`,
26
+ warehouseApi: `${protocol}//${prefix}data-warehouse.zhixianai.com/api`,
27
+ materielApi: `${protocol}//${prefix}materiel-api.zhixianai.com/api`,
28
+ crawlerApi: `${protocol}//${prefix}crawler.zhixianai.com/api`
29
+ }
30
+
31
+ /**
32
+ * 取某域的 baseURL
33
+ * @param {string} device - 如 'basicApi' | 'merchantApi' | 'orderApi'
34
+ * @returns {string}
35
+ */
36
+ export function getDevice(device) {
37
+ return urls[device] || ''
38
+ }
39
+
40
+ /**
41
+ * 拼出完整请求地址,供 api.fetch(config) 的 config.action 使用
42
+ * @param {string} device - 如 'merchantApi'
43
+ * @param {string} path - 路径,如 '/store/getGroupByStatusCount'
44
+ * @returns {string}
45
+ */
46
+ export function buildAction(device, path) {
47
+ const base = urls[device] || ''
48
+ if (!base) return path
49
+ const p = path.startsWith('/') ? path : `/${path}`
50
+ return base.replace(/\/$/, '') + p
51
+ }
52
+
53
+ /**
54
+ * 规范化 api.fetch 的 config:GET 请求时把 params 映射到 query(frame/fetch 只认 query)
55
+ * 调用方可用:api.fetch(normalizeFetchConfig(config))
56
+ * @param {object} config - api.fetch 的 config,可含 params(GET 时)或 query
57
+ * @returns {object} 规范化后的 config,GET 且存在 params 时会有 query
58
+ */
59
+ export function normalizeFetchConfig(config) {
60
+ if (!config || typeof config !== 'object') return config
61
+ const method = (config.method || 'get').toLowerCase()
62
+ const isGet = method === 'get'
63
+ if (isGet && config.params != null && typeof config.params === 'object') {
64
+ const next = { ...config }
65
+ next.query = next.query != null ? { ...next.query, ...next.params } : next.params
66
+ delete next.params
67
+ return next
68
+ }
69
+ return config
70
+ }
71
+
72
+ export default urls
@@ -1,3 +1,9 @@
1
+ .ant-table-cell {
2
+ font-size: 14px;
3
+ color: rgba(0, 0, 0, 0.88);
4
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
5
+ }
6
+
1
7
  .form-create .form-create .ant-form-item {
2
8
  margin-bottom: 22px;
3
9
  }
@@ -6,10 +12,7 @@
6
12
  margin-bottom: 3px;
7
13
  }
8
14
 
9
- .form-create
10
- .form-create
11
- .ant-form-item
12
- .ant-form-item.ant-form-item-with-help {
15
+ .form-create .form-create .ant-form-item .ant-form-item.ant-form-item-with-help {
13
16
  margin-bottom: -22px;
14
17
  }
15
18
 
@@ -19,10 +22,7 @@
19
22
 
20
23
  .form-create.is-preview .fc-clock,
21
24
  .form-create .fc-none,
22
- .form-create.is-preview
23
- .ant-form-item
24
- .ant-form-item-label
25
- > label.ant-form-item-required::before {
25
+ .form-create.is-preview .ant-form-item .ant-form-item-label>label.ant-form-item-required::before {
26
26
  display: none !important;
27
27
  }
28
28
 
@@ -40,10 +40,7 @@
40
40
  margin-bottom: 4px !important;
41
41
  }
42
42
 
43
- .form-create.is-preview
44
- .form-create
45
- .ant-form-item
46
- .ant-form-item.ant-form-item-with-help {
43
+ .form-create.is-preview .form-create .ant-form-item .ant-form-item.ant-form-item-with-help {
47
44
  margin-bottom: -8px !important;
48
45
  }
49
46
 
@@ -65,8 +62,8 @@
65
62
  .form-create.is-preview .ant-input-group,
66
63
  /* 只读模式的样式(通过 readOnly 属性或 disabled 属性识别) */
67
64
  .ant-input[readonly],
68
- .ant-input[readonly] ~ .ant-input-wrapper,
69
- .ant-input[readonly] ~ .ant-input-affix-wrapper,
65
+ .ant-input[readonly]~.ant-input-wrapper,
66
+ .ant-input[readonly]~.ant-input-affix-wrapper,
70
67
  .ant-textarea[readonly],
71
68
  .ant-picker-disabled,
72
69
  .ant-cascader-disabled .ant-cascader-picker,
@@ -141,16 +138,12 @@ textarea[readonly].ant-input {
141
138
  .form-create.is-preview .ant-form-item-explain,
142
139
  .form-create.is-preview .ant-form-item-extra,
143
140
  .form-create.is-preview .ant-form-item-feedback-icon,
144
- .form-create.is-preview
145
- .ant-form-item-has-feedback
146
- .ant-form-item-children-icon {
141
+ .form-create.is-preview .ant-form-item-has-feedback .ant-form-item-children-icon {
147
142
  display: none !important;
148
143
  }
149
144
 
150
145
  /* 隐藏必填标记 */
151
- .form-create.is-preview
152
- .ant-form-item-label
153
- > label.ant-form-item-required::before,
146
+ .form-create.is-preview .ant-form-item-label>label.ant-form-item-required::before,
154
147
  .form-create.is-preview label.ant-form-item-required::before {
155
148
  display: none !important;
156
149
  }
@@ -292,14 +285,9 @@ textarea[readonly].ant-input {
292
285
  .form-create.is-preview .ant-upload-list-item-actions-preview,
293
286
  .form-create.is-preview .ant-upload-list-item-actions .anticon-eye,
294
287
  .form-create.is-preview .ant-upload-list-item-info,
295
- .form-create.is-preview .ant-upload-list-item-info > span,
296
- .form-create.is-preview
297
- .ant-upload-picture-card
298
- .ant-upload-list-item-thumbnail,
299
- .form-create.is-preview
300
- .ant-upload-picture-card
301
- .ant-upload-list-item-thumbnail
302
- * {
288
+ .form-create.is-preview .ant-upload-list-item-info>span,
289
+ .form-create.is-preview .ant-upload-picture-card .ant-upload-list-item-thumbnail,
290
+ .form-create.is-preview .ant-upload-picture-card .ant-upload-list-item-thumbnail * {
303
291
  pointer-events: auto !important;
304
292
  cursor: pointer !important;
305
293
  }
@@ -591,8 +579,7 @@ textarea[readonly].ant-input {
591
579
  }
592
580
 
593
581
  /* 只读模式:防止 readOnly 的 disabled select 的多选选项显示为灰色 */
594
- .fc-select-readonly.ant-select-disabled.ant-select-multiple
595
- .ant-select-selection-item {
582
+ .fc-select-readonly.ant-select-disabled.ant-select-multiple .ant-select-selection-item {
596
583
  opacity: 1 !important;
597
584
  color: rgba(0, 0, 0, 0.88) !important;
598
585
  background-color: #f0f0f0 !important;
@@ -601,9 +588,7 @@ textarea[readonly].ant-input {
601
588
  }
602
589
 
603
590
  /* 预览模式:防止 disabled select 的多选选项显示为灰色,并允许文本选择 */
604
- .form-create.is-preview
605
- .ant-select-disabled.ant-select-multiple
606
- .ant-select-selection-item {
591
+ .form-create.is-preview .ant-select-disabled.ant-select-multiple .ant-select-selection-item {
607
592
  opacity: 1 !important;
608
593
  color: inherit !important;
609
594
  background-color: #f0f0f0 !important;
@@ -739,8 +724,8 @@ textarea[readonly].ant-input {
739
724
  /* 预览模式:禁用选择器下拉 */
740
725
  .form-create.is-preview .ant-select-dropdown,
741
726
  /* 只读模式:禁用选择器下拉 */
742
- .ant-select-disabled + .ant-select-dropdown,
743
- .ant-select.ant-select-disabled ~ .ant-select-dropdown {
727
+ .ant-select-disabled+.ant-select-dropdown,
728
+ .ant-select.ant-select-disabled~.ant-select-dropdown {
744
729
  display: none !important;
745
730
  }
746
731
 
@@ -801,16 +786,13 @@ textarea[readonly].ant-input {
801
786
  box-shadow: none !important;
802
787
  }
803
788
 
804
- .fc-cus-select:not(.fc-cus-select-disabled):hover
805
- .fc-cus-select-selector-borderless {
789
+ .fc-cus-select:not(.fc-cus-select-disabled):hover .fc-cus-select-selector-borderless {
806
790
  border: none !important;
807
791
  box-shadow: none !important;
808
792
  }
809
793
 
810
- .fc-cus-select:focus:not(.fc-cus-select-disabled)
811
- .fc-cus-select-selector-borderless,
812
- .fc-cus-select:focus-within:not(.fc-cus-select-disabled)
813
- .fc-cus-select-selector-borderless {
794
+ .fc-cus-select:focus:not(.fc-cus-select-disabled) .fc-cus-select-selector-borderless,
795
+ .fc-cus-select:focus-within:not(.fc-cus-select-disabled) .fc-cus-select-selector-borderless {
814
796
  border: none !important;
815
797
  box-shadow: none !important;
816
798
  outline: none !important;
@@ -906,8 +888,7 @@ textarea[readonly].ant-input {
906
888
  box-shadow: 0 0 0 2px rgba(64, 150, 255, 0.2);
907
889
  }
908
890
 
909
- .fc-cus-select:focus-within:not(.fc-cus-select-disabled)
910
- .fc-cus-select-selector {
891
+ .fc-cus-select:focus-within:not(.fc-cus-select-disabled) .fc-cus-select-selector {
911
892
  border-color: #4096ff;
912
893
  outline: 0;
913
894
  box-shadow: 0 0 0 2px rgba(64, 150, 255, 0.2);
@@ -1069,14 +1050,14 @@ textarea[readonly].ant-input {
1069
1050
  cursor: pointer;
1070
1051
  }
1071
1052
 
1072
- ._fc-table-form > .ant-btn {
1053
+ ._fc-table-form>.ant-btn {
1073
1054
  display: flex;
1074
1055
  align-items: center;
1075
1056
  padding: 2px;
1076
1057
  }
1077
1058
 
1078
1059
  ._fc-table-form._fc-disabled ._fc-tf-btn .fc-icon,
1079
- ._fc-table-form._fc-disabled > .ant-btn {
1060
+ ._fc-table-form._fc-disabled>.ant-btn {
1080
1061
  cursor: not-allowed;
1081
1062
  }
1082
1063
 
@@ -1089,17 +1070,21 @@ textarea[readonly].ant-input {
1089
1070
  border-bottom: 0 none;
1090
1071
  }
1091
1072
 
1092
- ._fc-table-form ._fc-tf-table > thead > tr > th {
1073
+ ._fc-table-form ._fc-tf-table>thead>tr>th {
1093
1074
  border: 0 none;
1094
1075
  border-bottom: 1px solid #ebeef5;
1095
1076
  height: 40px;
1096
1077
  font-weight: 500;
1097
1078
  padding: 0 5px;
1098
1079
  box-sizing: border-box;
1080
+ color: rgba(0, 0, 0, 0.88);
1081
+ font-size: 14px;
1099
1082
  }
1100
1083
 
1101
- ._fc-table-form ._fc-tf-table > thead > tr > th + th {
1084
+ ._fc-table-form ._fc-tf-table>thead>tr>th+th {
1102
1085
  border-left: 1px solid #ebeef5;
1086
+ color: rgba(0, 0, 0, 0.88);
1087
+ font-size: 14px;
1103
1088
  }
1104
1089
 
1105
1090
  ._fc-table-form tr {
@@ -1121,9 +1106,11 @@ textarea[readonly].ant-input {
1121
1106
  overflow: hidden;
1122
1107
  border: 0 none;
1123
1108
  border-bottom: 1px solid #ebeef5;
1109
+ color: rgba(0, 0, 0, 0.88);
1110
+ font-size: 14px;
1124
1111
  }
1125
1112
 
1126
- ._fc-table-form td + td {
1113
+ ._fc-table-form td+td {
1127
1114
  border-left: 1px solid #ebeef5;
1128
1115
  }
1129
1116
 
@@ -1158,7 +1145,7 @@ textarea[readonly].ant-input {
1158
1145
  overflow: auto;
1159
1146
  }
1160
1147
 
1161
- ._fd-tf-wrap > ._fd-drag-tool {
1148
+ ._fd-tf-wrap>._fd-drag-tool {
1162
1149
  flex-shrink: 0;
1163
1150
  display: flex;
1164
1151
  margin: 2px;
@@ -1201,27 +1188,14 @@ textarea[readonly].ant-input {
1201
1188
 
1202
1189
  /* 仅在设计器中展示红色星号(不参与校验) */
1203
1190
  /* 设计器特定场景 */
1204
- ._fc-designer
1205
- ._fc-m-drag
1206
- ._fc-fake-required
1207
- .ant-form-item-label
1208
- > label::before,
1209
- ._fc-designer
1210
- ._fc-m-drag
1211
- ._fc-fake-required
1212
- label.ant-form-item-no-colon::before,
1191
+ ._fc-designer ._fc-m-drag ._fc-fake-required .ant-form-item-label>label::before,
1192
+ ._fc-designer ._fc-m-drag ._fc-fake-required label.ant-form-item-no-colon::before,
1213
1193
  /* 通用场景 - 带 label 容器 */
1214
- ._fc-fake-required
1215
- .ant-form-item-label
1216
- > label::before,
1217
- ._fc-fake-required
1218
- .ant-form-item-label
1219
- > label.ant-form-item-required::before,
1194
+ ._fc-fake-required .ant-form-item-label>label::before,
1195
+ ._fc-fake-required .ant-form-item-label>label.ant-form-item-required::before,
1220
1196
  /* 通用场景 - 无 label 容器(直接 label) */
1221
- ._fc-fake-required
1222
- label.ant-form-item-no-colon::before,
1223
- ._fc-fake-required
1224
- label::before {
1197
+ ._fc-fake-required label.ant-form-item-no-colon::before,
1198
+ ._fc-fake-required label::before {
1225
1199
  display: inline-block;
1226
1200
  margin-inline-end: 4px;
1227
1201
  color: #ff4d4f;
@@ -1236,7 +1210,7 @@ textarea[readonly].ant-input {
1236
1210
  margin-right: 4px;
1237
1211
  }
1238
1212
 
1239
- ._fd-tf-con ._fc-l-item > * {
1213
+ ._fd-tf-con ._fc-l-item>* {
1240
1214
  display: none !important;
1241
1215
  }
1242
1216
 
@@ -1253,22 +1227,22 @@ textarea[readonly].ant-input {
1253
1227
  }
1254
1228
 
1255
1229
  /* Flex 容器子项 flex 样式 - 使用通用选择器,匹配所有直接子元素 */
1256
- .ant-flex._fc-flex-container > * {
1230
+ .ant-flex._fc-flex-container>* {
1257
1231
  flex: var(--fc-child-flex) !important;
1258
1232
  }
1259
1233
 
1260
1234
  /* 更具体的选择器,针对被 form-item 包裹的子元素 */
1261
- .ant-flex._fc-flex-container > .ant-form-item {
1235
+ .ant-flex._fc-flex-container>.ant-form-item {
1262
1236
  flex: var(--fc-child-flex) !important;
1263
1237
  }
1264
1238
 
1265
1239
  /* 垂直方向的 Flex 容器子项宽度样式 - 使用通用选择器 */
1266
- .ant-flex._fc-flex-vertical > * {
1240
+ .ant-flex._fc-flex-vertical>* {
1267
1241
  width: var(--fc-child-width, 100%) !important;
1268
1242
  }
1269
1243
 
1270
1244
  /* 更具体的选择器,针对被 form-item 包裹的子元素 */
1271
- .ant-flex._fc-flex-vertical > .ant-form-item {
1245
+ .ant-flex._fc-flex-vertical>.ant-form-item {
1272
1246
  width: var(--fc-child-width, 100%) !important;
1273
1247
  }
1274
1248
 
@@ -1281,7 +1255,7 @@ textarea[readonly].ant-input {
1281
1255
  overflow: auto;
1282
1256
  }
1283
1257
 
1284
- ._fc-table > table {
1258
+ ._fc-table>table {
1285
1259
  width: 100%;
1286
1260
  height: 100%;
1287
1261
  overflow: hidden;
@@ -1318,7 +1292,6 @@ textarea[readonly].ant-input {
1318
1292
  padding: 0;
1319
1293
  margin: 0;
1320
1294
  }
1321
-
1322
1295
  @font-face {
1323
1296
  font-family: "fc-icon";
1324
1297
  src: url(fonts/fc-icons.woff) format('woff');