jobsys-explore 1.0.1

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.
Files changed (127) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.cjs +38 -0
  3. package/.prettierrc.cjs +38 -0
  4. package/README.md +42 -0
  5. package/components/button/ExButton.jsx +119 -0
  6. package/components/button/index.js +4 -0
  7. package/components/button/index.less +8 -0
  8. package/components/form/ExAddress.jsx +125 -0
  9. package/components/form/ExCascader.jsx +98 -0
  10. package/components/form/ExCheckbox.jsx +59 -0
  11. package/components/form/ExDate.jsx +130 -0
  12. package/components/form/ExDatetime.jsx +152 -0
  13. package/components/form/ExField.jsx +123 -0
  14. package/components/form/ExFieldUploader.jsx +44 -0
  15. package/components/form/ExForm.jsx +395 -0
  16. package/components/form/ExNumber.jsx +49 -0
  17. package/components/form/ExRadio.jsx +58 -0
  18. package/components/form/ExRate.jsx +47 -0
  19. package/components/form/ExSelect.jsx +151 -0
  20. package/components/form/ExSlider.jsx +53 -0
  21. package/components/form/ExSwitch.jsx +49 -0
  22. package/components/form/ExTime.jsx +104 -0
  23. package/components/form/FormItem.jsx +229 -0
  24. package/components/form/PickerWrapper.jsx +111 -0
  25. package/components/form/addressData.json +1 -0
  26. package/components/form/index.js +37 -0
  27. package/components/form/index.less +108 -0
  28. package/components/form/utils.js +47 -0
  29. package/components/grid/ExGrid.jsx +53 -0
  30. package/components/grid/index.js +4 -0
  31. package/components/grid/index.less +3 -0
  32. package/components/index.js +9 -0
  33. package/components/pagination/ExPagination.jsx +148 -0
  34. package/components/pagination/index.js +5 -0
  35. package/components/pagination/index.less +15 -0
  36. package/components/provider/ExProvider.jsx +91 -0
  37. package/components/provider/index.js +4 -0
  38. package/components/qrcode/ExQrcode.jsx +86 -0
  39. package/components/qrcode/index.js +5 -0
  40. package/components/qrcode/index.less +8 -0
  41. package/components/result/ExResult.jsx +122 -0
  42. package/components/result/index.js +5 -0
  43. package/components/result/index.less +60 -0
  44. package/components/search/ExSearch.jsx +252 -0
  45. package/components/search/components/Expand.jsx +77 -0
  46. package/components/search/components/Field.jsx +27 -0
  47. package/components/search/components/Quick.jsx +53 -0
  48. package/components/search/components/index.js +5 -0
  49. package/components/search/index.js +5 -0
  50. package/components/search/index.less +119 -0
  51. package/components/search/utils.js +30 -0
  52. package/components/theme/ExTheme.jsx +10 -0
  53. package/components/theme/index.js +4 -0
  54. package/components/theme/index.less +97 -0
  55. package/components/uploader/ExUploader.jsx +248 -0
  56. package/components/uploader/index.js +5 -0
  57. package/components/utils.js +150 -0
  58. package/dist/__vite-browser-external-2447137e.mjs +5 -0
  59. package/dist/__vite-browser-external-2447137e.mjs.map +1 -0
  60. package/dist/__vite-browser-external-b3701507.js +2 -0
  61. package/dist/__vite-browser-external-b3701507.js.map +1 -0
  62. package/dist/hooks.cjs +2 -0
  63. package/dist/hooks.cjs.map +1 -0
  64. package/dist/hooks.js +35 -0
  65. package/dist/hooks.js.map +1 -0
  66. package/dist/index-82d74e5f.mjs +2120 -0
  67. package/dist/index-82d74e5f.mjs.map +1 -0
  68. package/dist/index-b8729555.js +2 -0
  69. package/dist/index-b8729555.js.map +1 -0
  70. package/dist/jobsys-explore.cjs +9 -0
  71. package/dist/jobsys-explore.cjs.map +1 -0
  72. package/dist/jobsys-explore.js +18673 -0
  73. package/dist/jobsys-explore.js.map +1 -0
  74. package/dist/style.css +1 -0
  75. package/docgen.config.cjs +9 -0
  76. package/docs/.vitepress/cache/deps/_metadata.json +19 -0
  77. package/docs/.vitepress/cache/deps/package.json +3 -0
  78. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +162 -0
  79. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  80. package/docs/.vitepress/cache/deps/vue.js +10795 -0
  81. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  82. package/docs/.vitepress/config.mjs +43 -0
  83. package/docs/.vitepress/dist/404.html +19 -0
  84. package/docs/.vitepress/dist/assets/app.e0eb4814.js +1 -0
  85. package/docs/.vitepress/dist/assets/chunks/framework.7a64ad8e.js +2 -0
  86. package/docs/.vitepress/dist/assets/chunks/theme.ffc5f35c.js +7 -0
  87. package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 +0 -0
  88. package/docs/.vitepress/dist/assets/inter-italic-cyrillic.ea42a392.woff2 +0 -0
  89. package/docs/.vitepress/dist/assets/inter-italic-greek-ext.4fbe9427.woff2 +0 -0
  90. package/docs/.vitepress/dist/assets/inter-italic-greek.8f4463c4.woff2 +0 -0
  91. package/docs/.vitepress/dist/assets/inter-italic-latin-ext.bd8920cc.woff2 +0 -0
  92. package/docs/.vitepress/dist/assets/inter-italic-latin.bd3b6f56.woff2 +0 -0
  93. package/docs/.vitepress/dist/assets/inter-italic-vietnamese.6ce511fb.woff2 +0 -0
  94. package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.e75737ce.woff2 +0 -0
  95. package/docs/.vitepress/dist/assets/inter-roman-cyrillic.5f2c6c8c.woff2 +0 -0
  96. package/docs/.vitepress/dist/assets/inter-roman-greek-ext.ab0619bc.woff2 +0 -0
  97. package/docs/.vitepress/dist/assets/inter-roman-greek.d5a6d92a.woff2 +0 -0
  98. package/docs/.vitepress/dist/assets/inter-roman-latin-ext.0030eebd.woff2 +0 -0
  99. package/docs/.vitepress/dist/assets/inter-roman-latin.2ed14f66.woff2 +0 -0
  100. package/docs/.vitepress/dist/assets/inter-roman-vietnamese.14ce25a6.woff2 +0 -0
  101. package/docs/.vitepress/dist/assets/style.6747f984.css +1 -0
  102. package/docs/.vitepress/dist/hashmap.json +1 -0
  103. package/docs/.vitepress/theme/index.css +0 -0
  104. package/docs/.vitepress/theme/index.js +12 -0
  105. package/hooks/cipher.js +40 -0
  106. package/hooks/form.js +176 -0
  107. package/hooks/index.js +4 -0
  108. package/hooks/network.js +153 -0
  109. package/hooks/utils.js +61 -0
  110. package/index.html +17 -0
  111. package/index.js +10 -0
  112. package/package.json +75 -0
  113. package/playground/App.vue +45 -0
  114. package/playground/TestButton.vue +15 -0
  115. package/playground/TestForm.vue +271 -0
  116. package/playground/TestFormItem.vue +110 -0
  117. package/playground/TestGrid.vue +22 -0
  118. package/playground/TestPagination.vue +89 -0
  119. package/playground/TestQrcode.vue +7 -0
  120. package/playground/TestResult.vue +12 -0
  121. package/playground/TestSearch.vue +84 -0
  122. package/playground/http.js +23 -0
  123. package/playground/main.js +12 -0
  124. package/postcss.config.cjs +8 -0
  125. package/utils/style.js +13 -0
  126. package/utils/withInstall.js +7 -0
  127. package/vite.config.js +52 -0
@@ -0,0 +1,229 @@
1
+ import { inject } from "vue"
2
+ import { EX_UPLOADER } from "../provider/ExProvider.jsx"
3
+ import { isString, pick } from "lodash-es"
4
+ import ExField from "./ExField.jsx"
5
+ import ExSelect from "./ExSelect.jsx"
6
+ import ExDate from "./ExDate.jsx"
7
+ import ExSwitch from "./ExSwitch.jsx"
8
+ import ExCheckbox from "./ExCheckbox.jsx"
9
+ import ExRadio from "./ExRadio.jsx"
10
+ import ExDatetime from "./ExDatetime.jsx"
11
+ import ExNumber from "./ExNumber.jsx"
12
+ import ExRate from "./ExRate.jsx"
13
+ import ExSlider from "./ExSlider.jsx"
14
+ import ExAddress from "./ExAddress.jsx"
15
+ import ExCascader from "./ExCascader.jsx"
16
+ import ExTime from "./ExTime.jsx"
17
+ import ExFieldUploader from "./ExFieldUploader.jsx"
18
+ import { Divider } from "vant"
19
+
20
+ export const RERENDER = "rerender"
21
+
22
+ /**
23
+ *
24
+ * @param item
25
+ * @param submitForm
26
+ * @param props
27
+ * @param slots
28
+ * @return {*|JSX.Element}
29
+ */
30
+ const render = (item, submitForm, { props, slots }) => {
31
+ const uploaderProvider = inject(EX_UPLOADER, () => ({}))
32
+
33
+ if (item.type === "slot" && slots[item.key]) {
34
+ return slots[item.key]({ submitForm })
35
+ }
36
+ let renderItem = null
37
+
38
+ const pickerTypes = ["select", "date", "datetime", "time", "address", "cascade"]
39
+ const isPicker = pickerTypes.includes(item.type)
40
+
41
+ const fieldProps = pick(item, ["placeholder", "help", "required", "disabled", "rules", "readonly", "isLink", "fieldProps"])
42
+ fieldProps.label = item.title
43
+ fieldProps.name = item.key
44
+ fieldProps.placeholder = fieldProps.placeholder || (isPicker ? `请选择${item.title}` : `请填写${item.title}`)
45
+ fieldProps.rules = fieldProps.rules || []
46
+
47
+ let componentProps = pick(item, ["options"])
48
+ if (item.defaultProps) {
49
+ componentProps = { ...componentProps, ...item.defaultProps }
50
+ }
51
+
52
+ const componentSlots = item.slots || {}
53
+ item.type = item.type ? item.type.toLowerCase() : item.type
54
+ if (item.required) {
55
+ fieldProps.rules.push({
56
+ required: true,
57
+ message: isPicker ? `请选择${item.title}` : `请填写${item.title}`,
58
+ trigger: isPicker ? "onChange" : "onBlur", //特意
59
+ })
60
+ }
61
+
62
+ if (item.customRender) {
63
+ renderItem = item.customRender({ submitForm, item })
64
+ }
65
+
66
+ if ((!item.customRender && !renderItem) || renderItem === RERENDER) {
67
+ switch (item.type) {
68
+ case "select":
69
+ renderItem = (
70
+ <ExSelect v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
71
+ {componentSlots}
72
+ </ExSelect>
73
+ )
74
+ break
75
+ case "date":
76
+ renderItem = (
77
+ <ExDate v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
78
+ {componentSlots}
79
+ </ExDate>
80
+ )
81
+ break
82
+ case "datetime":
83
+ renderItem = (
84
+ <ExDatetime v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
85
+ {componentSlots}
86
+ </ExDatetime>
87
+ )
88
+ break
89
+ case "time":
90
+ renderItem = (
91
+ <ExTime v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
92
+ {componentSlots}
93
+ </ExTime>
94
+ )
95
+ break
96
+ case "switch":
97
+ renderItem = (
98
+ <ExSwitch v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
99
+ {componentSlots}
100
+ </ExSwitch>
101
+ )
102
+ break
103
+ case "radio":
104
+ renderItem = (
105
+ <ExRadio v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
106
+ {componentSlots}
107
+ </ExRadio>
108
+ )
109
+ break
110
+ case "checkbox":
111
+ renderItem = (
112
+ <ExCheckbox v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
113
+ {componentSlots}
114
+ </ExCheckbox>
115
+ )
116
+ break
117
+ case "address":
118
+ renderItem = (
119
+ <ExAddress v-model={submitForm[item.key]} {...fieldProps}>
120
+ {componentSlots}
121
+ </ExAddress>
122
+ )
123
+ break
124
+ case "cascade":
125
+ renderItem = (
126
+ <ExCascader v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
127
+ {componentSlots}
128
+ </ExCascader>
129
+ )
130
+ break
131
+ case "number":
132
+ renderItem = (
133
+ <ExNumber v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
134
+ {componentSlots}
135
+ </ExNumber>
136
+ )
137
+ break
138
+ case "rate":
139
+ renderItem = (
140
+ <ExRate v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
141
+ {componentSlots}
142
+ </ExRate>
143
+ )
144
+ break
145
+ case "slider":
146
+ renderItem = (
147
+ <ExSlider v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
148
+ {componentSlots}
149
+ </ExSlider>
150
+ )
151
+ break
152
+ case "uploader":
153
+ renderItem = (
154
+ <ExFieldUploader v-model={submitForm[item.key]} {...componentProps} {...fieldProps}>
155
+ {componentSlots}
156
+ </ExFieldUploader>
157
+ )
158
+ if (item.required) {
159
+ if (!Object.keys(uploaderProvider).length) {
160
+ console.error("请在根组件中注入 NEWBIE_UPLOADER 配置项")
161
+ renderItem = null
162
+ break
163
+ }
164
+
165
+ /*if (item.defaultProps?.maxNum && item.defaultProps?.maxNum > 1) {
166
+ rules.type = "array"
167
+ rules.message = `请上传${item.title}`
168
+ } else {
169
+ rules = {
170
+ type: "object",
171
+ required: true,
172
+ message: `请上传${item.title}`,
173
+ fields: {
174
+ [uploaderProvider.path]: {
175
+ type: "string",
176
+ required: true,
177
+ message: `请上传${item.title}`,
178
+ },
179
+ },
180
+ }
181
+ }*/
182
+ }
183
+ break
184
+ /* case "html":
185
+ renderItem = Fields.createHtml(item, submitForm)
186
+ break
187
+
188
+ case "text":
189
+ renderItem = Fields.createText(item, submitForm)
190
+ break
191
+ case "group":
192
+ renderItem = Fields.createGroup(item, submitForm, { provider: { uploaderProvider } })
193
+ break*/
194
+ case "textarea":
195
+ fieldProps.type = "textarea"
196
+ renderItem = (
197
+ <ExField v-model={submitForm[item.key]} {...fieldProps}>
198
+ {componentSlots}
199
+ </ExField>
200
+ )
201
+ break
202
+ case "password":
203
+ fieldProps.type = "password"
204
+ renderItem = (
205
+ <ExField v-model={submitForm[item.key]} {...fieldProps}>
206
+ {componentSlots}
207
+ </ExField>
208
+ )
209
+ break
210
+ default:
211
+ renderItem = (
212
+ <ExField v-model={submitForm[item.key]} {...fieldProps}>
213
+ {componentSlots}
214
+ </ExField>
215
+ )
216
+ break
217
+ }
218
+ }
219
+
220
+ const formItem = [renderItem]
221
+
222
+ if (item.break) {
223
+ formItem.unshift(<Divider {...props.dividerProps}>{{ default: () => (isString(item.break) ? item.break : null) }}</Divider>)
224
+ }
225
+
226
+ return formItem
227
+ }
228
+
229
+ export default render
@@ -0,0 +1,111 @@
1
+ import { defineComponent, ref } from "vue"
2
+ import { Popup } from "vant"
3
+ import ExField from "./ExField.jsx"
4
+ import { omit, pick } from "lodash-es"
5
+ import { defaultFieldProps } from "../utils"
6
+
7
+ export default defineComponent({
8
+ name: "PickerWrapper",
9
+
10
+ props: {
11
+ /**
12
+ * Picker 标题
13
+ */
14
+ title: { type: String, default: "" },
15
+
16
+ /**
17
+ * 是否启用卡片模式
18
+ */
19
+ inset: { type: Boolean, default: false },
20
+
21
+ /**
22
+ * 是否显示关闭
23
+ */
24
+ closeable: { type: Boolean, default: true },
25
+ },
26
+ emits: ["close", "open"],
27
+ setup: (props, { emit, slots, expose }) => {
28
+ const showPopup = ref(false)
29
+
30
+ const onClickWrapper = () => {
31
+ showPopup.value = true
32
+ emit("open")
33
+ }
34
+
35
+ const close = () => {
36
+ showPopup.value = false
37
+ emit("close")
38
+ }
39
+
40
+ expose({ close })
41
+
42
+ return () => {
43
+ // 为了让 ExField 的 onClickInput 事件才触发 Popup
44
+ // 所以会手动获取 trigger slot 的第一个组件来手动监听 onClick 事件
45
+ // 如果以后有需要多个组件的情况,再做调整
46
+
47
+ let TriggerElem = slots.trigger ? slots.trigger() : null
48
+
49
+ if (TriggerElem && TriggerElem.length) {
50
+ TriggerElem = TriggerElem[0]
51
+ }
52
+
53
+ return [
54
+ <span class={"ex-field-popup-wrapper"}>
55
+ <TriggerElem onClick={onClickWrapper}></TriggerElem>
56
+ </span>,
57
+
58
+ <Popup
59
+ v-model:show={showPopup.value}
60
+ closeable={props.closeable}
61
+ position={"bottom"}
62
+ round={true}
63
+ teleport={"body"}
64
+ closeOnPopstate={true}
65
+ class={`ex-field-popup ${props.inset ? "ex-field-popup-inset" : ""}`}
66
+ safeAreaInsetBottom={true}
67
+ safeAreaInsetTop={true}
68
+ onClickOverlay={close}
69
+ onClickCloseIcon={close}
70
+ >
71
+ {{
72
+ default: () => [
73
+ props.closeable ? (
74
+ <div class={"ex-field-popup__header"}>
75
+ <h2 class={"ex-field-popup__title"}>{props.title}</h2>
76
+ </div>
77
+ ) : null,
78
+ slots.default?.(),
79
+ ],
80
+ }}
81
+ </Popup>,
82
+ ]
83
+ }
84
+ },
85
+ })
86
+
87
+ export const pickerProps = (props) => {
88
+ return {
89
+ title: props.title || `请选择${props.label}`,
90
+ }
91
+ }
92
+
93
+ export const pickerSlots = (slots, props) => {
94
+ let triggerElem = slots.default ? slots.default() : null
95
+
96
+ if (!triggerElem) {
97
+ const fieldProps = pick(props, Object.keys(defaultFieldProps))
98
+ // default slot 是 trigger, 其它的 slots 全部传给 ExField
99
+ const fieldSlots = omit(slots, "default")
100
+
101
+ triggerElem = (
102
+ <ExField {...fieldProps} mask={true}>
103
+ {fieldSlots}
104
+ </ExField>
105
+ )
106
+ }
107
+
108
+ return {
109
+ trigger: () => triggerElem,
110
+ }
111
+ }