resolver-egretimp-plus 0.0.4

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 (121) hide show
  1. package/babel.config.js +14 -0
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.LICENSE.txt +8 -0
  4. package/dist/theme/element/index.css +1 -0
  5. package/dist/theme/element/src/components/card.scss +4 -0
  6. package/dist/theme/element/src/components/collapse.scss +16 -0
  7. package/dist/theme/element/src/components/date.scss +13 -0
  8. package/dist/theme/element/src/components/form.scss +54 -0
  9. package/dist/theme/element/src/components/index.scss +42 -0
  10. package/dist/theme/element/src/components/input.scss +15 -0
  11. package/dist/theme/element/src/components/message.scss +31 -0
  12. package/dist/theme/element/src/components/scrollbar.scss +14 -0
  13. package/dist/theme/element/src/components/select.scss +17 -0
  14. package/dist/theme/element/src/components/steps.scss +6 -0
  15. package/dist/theme/element/src/components/table.scss +8 -0
  16. package/dist/theme/element/src/components/tabs.scss +68 -0
  17. package/dist/theme/element/src/components/tree.scss +0 -0
  18. package/dist/theme/element/src/index.scss +79 -0
  19. package/index.js +17 -0
  20. package/package.json +45 -0
  21. package/scripts/gulpfile.mjs +73 -0
  22. package/scripts/webpack.config.js +81 -0
  23. package/src/analysisComponent.jsx +166 -0
  24. package/src/components/helper/button.js +17 -0
  25. package/src/components/helper/dock.js +120 -0
  26. package/src/components/icons/question-filled.vue +13 -0
  27. package/src/components/packages/CmiButton.vue +84 -0
  28. package/src/components/packages/CmiCalendar.vue +138 -0
  29. package/src/components/packages/CmiCell.vue +34 -0
  30. package/src/components/packages/CmiCheckbox.vue +63 -0
  31. package/src/components/packages/CmiDatetimePicker.vue +84 -0
  32. package/src/components/packages/CmiDropdownMenu.vue +57 -0
  33. package/src/components/packages/CmiInput.vue +45 -0
  34. package/src/components/packages/CmiLink.vue +28 -0
  35. package/src/components/packages/CmiPicker.vue +120 -0
  36. package/src/components/packages/CmiRadio.vue +29 -0
  37. package/src/components/packages/CmiSearch.vue +39 -0
  38. package/src/components/packages/CmiSelect.vue +84 -0
  39. package/src/components/packages/CustomComponentCard.vue +40 -0
  40. package/src/components/packages/CustomComponentCardH5.vue +40 -0
  41. package/src/components/packages/CustomComponentCol.vue +69 -0
  42. package/src/components/packages/CustomComponentColH5.vue +8 -0
  43. package/src/components/packages/CustomComponentCollapse.vue +183 -0
  44. package/src/components/packages/CustomComponentCollapseH5.vue +37 -0
  45. package/src/components/packages/CustomComponentCycle.vue +95 -0
  46. package/src/components/packages/CustomComponentCycleTabPane.vue +92 -0
  47. package/src/components/packages/CustomComponentDialog.vue +162 -0
  48. package/src/components/packages/CustomComponentEditor.vue +43 -0
  49. package/src/components/packages/CustomComponentFormLayout.vue +63 -0
  50. package/src/components/packages/CustomComponentFormLayoutH5.vue +55 -0
  51. package/src/components/packages/CustomComponentGrid.vue +29 -0
  52. package/src/components/packages/CustomComponentGridCol.vue +29 -0
  53. package/src/components/packages/CustomComponentInputDialog.vue +144 -0
  54. package/src/components/packages/CustomComponentPlain.vue +80 -0
  55. package/src/components/packages/CustomComponentRow.vue +67 -0
  56. package/src/components/packages/CustomComponentSelectEmployees.vue +133 -0
  57. package/src/components/packages/CustomComponentSendMail.vue +72 -0
  58. package/src/components/packages/CustomComponentSteps.vue +41 -0
  59. package/src/components/packages/CustomComponentTabPane.vue +41 -0
  60. package/src/components/packages/CustomComponentTabPaneH5.vue +30 -0
  61. package/src/components/packages/CustomComponentTable.jsx +406 -0
  62. package/src/components/packages/CustomComponentTableH5.vue +58 -0
  63. package/src/components/packages/CustomComponentTabs.vue +75 -0
  64. package/src/components/packages/CustomComponentTabsH5.vue +86 -0
  65. package/src/components/packages/CustomComponentTree.vue +28 -0
  66. package/src/components/packages/ElButton.vue +90 -0
  67. package/src/components/packages/ElCheckbox.vue +55 -0
  68. package/src/components/packages/ElDatePicker.vue +58 -0
  69. package/src/components/packages/ElInput.vue +23 -0
  70. package/src/components/packages/ElInputNumber.vue +54 -0
  71. package/src/components/packages/ElPagination.vue +56 -0
  72. package/src/components/packages/ElRadio.vue +44 -0
  73. package/src/components/packages/ElSelect.vue +73 -0
  74. package/src/components/packages/ElText.vue +48 -0
  75. package/src/components/packages/ElTimePicker.vue +34 -0
  76. package/src/components/patchComponents.js +46 -0
  77. package/src/components/styles/CustomComponenTable.scss +125 -0
  78. package/src/components/tabs/index.js +8 -0
  79. package/src/components/tabs/src/constants.js +23 -0
  80. package/src/components/tabs/src/tab-bar.js +8 -0
  81. package/src/components/tabs/src/tab-bar.vue +92 -0
  82. package/src/components/tabs/src/tab-nav.jsx +413 -0
  83. package/src/components/tabs/src/tab-pane.js +15 -0
  84. package/src/components/tabs/src/tab-pane.vue +80 -0
  85. package/src/components/tabs/src/tabs.jsx +217 -0
  86. package/src/components/tabs/style/css.js +2 -0
  87. package/src/components/tabs/style/index.js +2 -0
  88. package/src/components/thirdPartyFrame/index.js +32 -0
  89. package/src/components/thirdPartyFrame/src/ThirdPartyFrame.vue +123 -0
  90. package/src/hooks/index.js +129 -0
  91. package/src/hooks/pageConfig.js +20 -0
  92. package/src/index.jsx +140 -0
  93. package/src/renderer.jsx +68 -0
  94. package/src/rules/eventsSupplement.js +439 -0
  95. package/src/rules/parseCondition.js +359 -0
  96. package/src/rules/ruleUtils.js +208 -0
  97. package/src/rules/rulesDriver.js +118 -0
  98. package/src/theme/element/components/card.scss +4 -0
  99. package/src/theme/element/components/collapse.scss +16 -0
  100. package/src/theme/element/components/date.scss +13 -0
  101. package/src/theme/element/components/form.scss +54 -0
  102. package/src/theme/element/components/index.scss +42 -0
  103. package/src/theme/element/components/input.scss +15 -0
  104. package/src/theme/element/components/message.scss +31 -0
  105. package/src/theme/element/components/scrollbar.scss +14 -0
  106. package/src/theme/element/components/select.scss +17 -0
  107. package/src/theme/element/components/steps.scss +6 -0
  108. package/src/theme/element/components/table.scss +8 -0
  109. package/src/theme/element/components/tabs.scss +68 -0
  110. package/src/theme/element/components/tree.scss +0 -0
  111. package/src/theme/element/index.scss +79 -0
  112. package/src/utils/common.js +230 -0
  113. package/src/utils/const.js +198 -0
  114. package/src/utils/defaultVal.js +23 -0
  115. package/src/utils/format.js +19 -0
  116. package/src/utils/index.js +4 -0
  117. package/src/utils/is.js +69 -0
  118. package/src/utils/preserveFunc.js +33 -0
  119. package/src/utils/render.jsx +714 -0
  120. package/src/utils/request.js +10 -0
  121. package/src/utils/valid.js +71 -0
@@ -0,0 +1,166 @@
1
+ import { computed, defineAsyncComponent, getCurrentInstance, inject, onBeforeMount, provide, ref } from 'vue'
2
+ import { getComponentPropsKeys, hasOwn } from './utils/index.js'
3
+ import { useVmodels } from './hooks/index.js'
4
+ import { getRenderComponentProps, generateFormItemPolyfill } from './utils/index.js'
5
+ import rulesDriver from './rules/rulesDriver'
6
+ import { penddingRules } from './rules/ruleUtils.js'
7
+
8
+ export default {
9
+ name: 'AnalysisComponent',
10
+ inheritAttrs: false,
11
+ props: {
12
+ config: {
13
+ type: Object,
14
+ default: () => ({})
15
+ },
16
+ // 这个组件通过v-model进行数据的绑定
17
+ modelValue: {
18
+ // type: [String, Number, Object],
19
+ default: null
20
+ },
21
+ component: {
22
+ type: [Function, Object, String],
23
+ default: null
24
+ },
25
+ // 如果是表格中列的组件,会传入行数据,{row, $index}
26
+ rowScope: {
27
+ type: [Object],
28
+ default: () => null
29
+ },
30
+ // 当前模式;操作:operate(默认)、详情:detail、日志:log
31
+ mode: {
32
+ type: String,
33
+ default: 'operate', // 操作:operate(默认)、详情:detail、日志:log
34
+ },
35
+ additionConfigs: {
36
+ type: Array,
37
+ default: () => []
38
+ },
39
+ },
40
+ emits: ['update:modelValue'],
41
+ setup(props, { emit, attrs }) {
42
+ const selects = inject('selects')
43
+ // 当前组件的实例
44
+ const instance = getCurrentInstance()
45
+ props.config.wrapVm = instance
46
+ const refFn = e => {
47
+ // 具体渲染的组件
48
+ props.config.vm = e
49
+ }
50
+ const onVnodeMounted = (e) => {
51
+ props.config.vmIsBind = true
52
+ if (props.config.onVnodeMounted && typeof props.config.onVnodeMounted === 'function') {
53
+ props.config.onVnodeMounted(props, e, selects)
54
+ }
55
+ if (props.config.onMounted) {
56
+ let onMounted = props.config.onMounted
57
+ if (typeof onMounted === 'string') {
58
+ onMounted = eval(`(function({props, e, selects}) {
59
+ ${props.config.onMounted}
60
+ })`)
61
+ }
62
+ typeof onMounted === 'function' && onMounted({props, e, selects})
63
+ }
64
+
65
+ // 执行没有执行完的规则
66
+ const hireRelat = props.config?.hireRelat
67
+ if (penddingRules[hireRelat]?.length) {
68
+ penddingRules[hireRelat].forEach(context => {
69
+ const rules = context.rules
70
+ delete context.rules
71
+ setTimeout(() => {
72
+ rulesDriver.call(context, rules)
73
+ }, 0)
74
+ })
75
+ penddingRules[hireRelat] = null
76
+ }
77
+ }
78
+ const onVnodeUnmounted = () => {
79
+ props.config.vmIsBind = false
80
+ if (props.config.onVnodeUnmounted && typeof props.config.onVnodeUnmounted === 'function') {
81
+ props.config.onVnodeUnmounted(props)
82
+ }
83
+ }
84
+
85
+ const { vModelObjs, initVmodels, modelValue } = useVmodels(props, emit) // 过个v-model绑定对象,实现可以组件过赋值
86
+ props.config.refValue = modelValue
87
+ // onBeforeMount(() => {
88
+ // defaultVal(props.config, modelValue) // 设置默认值
89
+ // })
90
+
91
+
92
+ // 获取组件中定义的props,赋值对应的属性====start====
93
+ const componentProps = ref({})
94
+ if (typeof props.component === 'function') {
95
+ props.component()?.then(res => {
96
+ const obj = {}
97
+ if (res?.default?.emits) {
98
+ initVmodels(res?.default?.emits)
99
+ }
100
+ const propsKeys = getComponentPropsKeys(res?.default)
101
+ propsKeys.forEach(key => {
102
+ if (hasOwn(props.config, key)) {
103
+ obj[key] = props.config[key]
104
+ }
105
+ })
106
+ componentProps.value = obj
107
+ })
108
+ } else {
109
+ if (props.component?.emits) {
110
+ initVmodels(props.component?.emits)
111
+ }
112
+ }
113
+ // 获取组件中定义的props,赋值对应的属性===en===
114
+ const currentComponent = computed(() => {
115
+ if (typeof props.component === 'function') {
116
+ return defineAsyncComponent(props.component)
117
+ } else {
118
+ return props.component
119
+ }
120
+ })
121
+ /**
122
+ * 动态赋值parent跟dynamicHireRelat
123
+ * 同时设置dynamicMapComp(动态dynamicHireRelat对应的config集合)
124
+ */
125
+ const parent = inject('parent', null)
126
+ const dynamicMapComp = inject('dynamicMapComp')
127
+
128
+ const configLinks = [parent, ...props.additionConfigs, props.config]
129
+ configLinks.reduce((parent, config) => {
130
+ config.parent = parent
131
+ config.dynamicMapComp = dynamicMapComp
132
+ config.dynamicHireRelat = parent?.dynamicHireRelat ? `${parent?.dynamicHireRelat}${hasOwn(props.config, 'rowIndex') ? `[${props.config.rowIndex}]` : ''}->${(props.config.metaCode || '')}` : props.config.metaCode
133
+ config.dynamicHireRelat && (dynamicMapComp[props.config.dynamicHireRelat] = props.config)
134
+ })
135
+
136
+ // props.config.parent = parent
137
+ // props.config.dynamicMapComp = dynamicMapComp
138
+ // props.config.dynamicHireRelat = parent?.dynamicHireRelat ? `${parent?.dynamicHireRelat}${hasOwn(props.config, 'rowIndex') ? `[${props.config.rowIndex}]` : ''}->${(props.config.metaCode || '')}` : props.config.metaCode
139
+ // props.config.dynamicHireRelat && (dynamicMapComp[props.config.dynamicHireRelat] = props.config)
140
+ provide('parent', props.config)
141
+
142
+ const _isH5 = inject('_isH5')
143
+ const lang = inject('lang')
144
+ const rootValue = inject('rootValue')
145
+ return () => {
146
+ const compProps = getRenderComponentProps({config: props.config, props, component: props.component, modelValue, selects})
147
+ const formItemPolyfill = generateFormItemPolyfill(props.config, lang.value, compProps, _isH5?.value, {
148
+ lang,
149
+ rootValue,
150
+ dynamicMapComp,
151
+ props
152
+ }) // 生成formItem()的辅助函数
153
+ return formItemPolyfill(
154
+ <currentComponent.value
155
+ ref={refFn}
156
+ onVnodeMounted={onVnodeMounted}
157
+ onVnodeUnmounted={onVnodeUnmounted}
158
+ {...attrs}
159
+ {...componentProps.value}
160
+ {...compProps}
161
+ {...vModelObjs}
162
+ ></currentComponent.value>
163
+ )
164
+ }
165
+ }
166
+ }
@@ -0,0 +1,17 @@
1
+ import { ElMessage } from 'element-plus';
2
+
3
+ export async function dispatchClickEvents ({serviceList = [], axiosInstance, reqData}) {
4
+ for (let i = 0; i < serviceList.length; i++) {
5
+ const service = serviceList[i]
6
+ const url = service.serviceCode
7
+ const ret = await (axiosInstance.value && axiosInstance.value({
8
+ url,
9
+ method: "post",
10
+ data: reqData
11
+ }))
12
+ if (!ret?.data?.success) {
13
+ ElMessage.error(ret?.data?.resultMessage || '')
14
+ await Promise.reject()
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,120 @@
1
+ // import { http } from '../../../http'
2
+
3
+ // 获取当前日期String
4
+ const getDateTime = () => {
5
+ let now = new Date()
6
+ let year = now.getFullYear()
7
+ let month = now.getMonth() + 1
8
+ let day = now.getDate()
9
+ let clock = year
10
+ if (month < 10) {
11
+ clock += "0"
12
+ }
13
+ clock += month.toString()
14
+ if (day < 10) {
15
+ clock += "0"
16
+ }
17
+ clock += day
18
+ return clock
19
+ }
20
+
21
+ export const isLocal = location.host.indexOf('uat') > -1 || location.host.indexOf('localhost') > -1 || location.host.indexOf('uip-uat.cmitry.com:18080') > -1
22
+
23
+ // 动态加载单条资源js、css
24
+ export const dynamicLoadScript = (src = { type: 'js', url: '', id: '' }) => {
25
+ return new Promise((resolve, reject) => {
26
+ if (!src.url) {
27
+ reject(new Error('Failed to load ' + 'url is empty'))
28
+ return
29
+ }
30
+ if (src.type === 'js') {
31
+ const script = document.createElement('script')
32
+ script.src = src.url
33
+ script.id = src.id
34
+ script.onload = function () {
35
+ resolve(src.url)
36
+ }
37
+ script.onerror = function () {
38
+ reject(new Error('Failed to load ' + src.url), script)
39
+ }
40
+ document.body.appendChild(script)
41
+ } else if (src.type === 'css') {
42
+ const link = document.createElement('link')
43
+ link.rel = 'stylesheet'
44
+ link.href = src.url
45
+ link.id = src.id
46
+ link.onload = function () {
47
+ resolve(src.url)
48
+ }
49
+ link.onerror = function () {
50
+ reject(new Error('Failed to load ' + src.url), link)
51
+ }
52
+ document.head.appendChild(link)
53
+ }
54
+ })
55
+ }
56
+
57
+ // 动态加载多条资源
58
+ export const loadAllResource = (urls) => {
59
+ return Promise.all(urls.map((url) => dynamicLoadScript(url)))
60
+ }
61
+
62
+ export const getFeiShuTokensApi = async (params) => {
63
+ return fetch('/sa-base/api/v1/feishucommon/getFeiShuTokens', {
64
+ method: 'POST',
65
+ body: JSON.stringify(params),
66
+ headers: {
67
+ 'content-type': 'application/json'
68
+ },
69
+ }).then(res => {
70
+ return new Promise((resolve) => {
71
+ res.json().then((data) => {
72
+ res.data = data
73
+ resolve(res)
74
+ })
75
+ })
76
+ })
77
+ }
78
+
79
+ // https://cmitry.feishu.cn/docs/doccnCtL96HOryMUErjXBMBrn4c#
80
+ // 选人选部门Select组件(原生js版本)
81
+ const token = ''
82
+ export const useSelEmployeeJs = () => {
83
+ const getToken = async () => {
84
+ if (token) {
85
+ return token
86
+ }
87
+ let { data: { result } } = await getFeiShuTokensApi({ "busiType": "CONSULTING_HELP" })
88
+ return result
89
+ }
90
+
91
+ const loadStyle = async () => {
92
+ if (!document.getElementById('selUserJqCss')) {
93
+ let url = `https://ncoa${isLocal ? '-uat' : ''}.cmitry.com/components/css/selUserJq.css?ver=${getDateTime()}`
94
+ return dynamicLoadScript({ type: 'css', url: url, id: 'selUserJqCss' })
95
+ }
96
+ }
97
+ const loadScript = async () => {
98
+ let url1 = ''
99
+ let url2 = ''
100
+ let urls = []
101
+ if (!window.xmSelect) {
102
+ url1 = `https://ncoa${isLocal ? '-uat' : ''}.cmitry.com/components/plugin/xm-select.js?ver=${getDateTime()}`
103
+ urls.push({ type: 'js', url: url1, id: 'xmSelectJs' })
104
+ }
105
+ if (!window.init_selUser) {
106
+ url2 = `https://ncoa${isLocal ? '-uat' : ''}.cmitry.com/components/lib/selUserJq.min.js?ver=${getDateTime()}`
107
+ urls.push({ type: 'js', url: url2, id: 'selUserJqJs' })
108
+ }
109
+ return loadAllResource(urls)
110
+ }
111
+ const initSelUser = (params) => {
112
+ return window.init_selUser(params)
113
+ }
114
+ return {
115
+ getToken,
116
+ loadStyle,
117
+ loadScript,
118
+ initSelUser
119
+ }
120
+ }
@@ -0,0 +1,13 @@
1
+ <template>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
3
+ <path
4
+ fill="currentColor"
5
+ d="M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784"
6
+ />
7
+ </svg>
8
+ </template>
9
+ <script setup>
10
+ defineOptions({
11
+ name: 'QuestionFilled',
12
+ })
13
+ </script>
@@ -0,0 +1,84 @@
1
+ <script setup>
2
+ import { defineProps, inject, getCurrentInstance, computed, useAttrs } from 'vue'
3
+ import { commonPropsType } from '../../utils/index.js'
4
+ import { useRoute } from 'vue-router'
5
+ import { dispatchClickEvents } from '../helper/button.js';
6
+
7
+ const appContext = getCurrentInstance()?.appContext
8
+
9
+ const props = defineProps({
10
+ ...commonPropsType,
11
+ displayType: String,
12
+ widgetSize: String,
13
+ plain: String,
14
+ color: String,
15
+ loading: String,
16
+ loadtype: String,
17
+ loadingcolor: String,
18
+ })
19
+ const calcPorps = computed(() => {
20
+ return ['displayType', 'widgetSize', 'plain', 'color', 'loading', 'loadtype', 'loadingcolor'].reduce((ret, key) => {
21
+ if (['plain', 'loading', 'loadtype'].includes(key)) {
22
+ ret[key] = props[key] === '1' ? true : false
23
+ } else if (key === 'displayType') {
24
+ ret.type = props[key]
25
+ } else if (key === 'widgetSize') {
26
+ ret.size = props[key]
27
+ } else {
28
+ ret[key] = props[key]
29
+ }
30
+ return ret
31
+ }, {})
32
+ })
33
+
34
+ const attrs = useAttrs()
35
+
36
+ const lang = inject('lang')
37
+
38
+ const label = computed(() => {
39
+ return lang.value.indexOf('zh') > -1 ? (props.config?.labelZh || props.config?.metaNameZh) : (props.config?.labelEn || props.config?.metaNameEn)
40
+ })
41
+ const route = useRoute()
42
+ const buttonActions = inject('buttonActions', {})
43
+
44
+ const dynamicMapComp = inject('dynamicMapComp')
45
+ const hireRelatMapRules = inject('hireRelatMapRules')
46
+ const components = inject('components')
47
+ const selects = inject('selects')
48
+ const rootValue = inject('rootValue')
49
+ const dataLoad = inject('dataLoad')
50
+ const rootForm = inject('rootForm')
51
+ const _axiosInstance = inject('_axiosInstance')
52
+ const routeQuery= route?.query
53
+
54
+
55
+ const buttonAction = () => {
56
+ attrs?.onClick?.(e) // 如果配置中有点击事件
57
+ const actionKey = props.config?.clickActionKey || props.config?.buttonActionKey || props.config?.hireRelat
58
+ const actionFn = buttonActions[actionKey]
59
+ actionFn && actionFn(props, {
60
+ dynamicMapComp,
61
+ hireRelatMapRules,
62
+ components,
63
+ selects,
64
+ rootValue,
65
+ dataLoad,
66
+ rootForm,
67
+ routeQuery
68
+ }, appContext)
69
+
70
+ const PageServiceMapVOList = props.config.lcpPageServiceMapVOList
71
+ if (PageServiceMapVOList?.length) {
72
+ dispatchClickEvents({
73
+ serviceList: PageServiceMapVOList,
74
+ axiosInstance: _axiosInstance
75
+ })
76
+ }
77
+ }
78
+ </script>
79
+
80
+ <template>
81
+ <cmi-button @click="buttonAction" v-bind="{ ...attrs, ...calcPorps,}">
82
+ {{label}}
83
+ </cmi-button>
84
+ </template>
@@ -0,0 +1,138 @@
1
+ <script setup>
2
+ import { computed, defineProps, watch, inject, ref, useAttrs } from 'vue'
3
+ import { commonPropsType } from '../../utils/index.js'
4
+ import dayjs from "dayjs"
5
+
6
+ const calendarRef = ref(null)
7
+ const attrs = useAttrs()
8
+ const lang = inject('lang')
9
+ const modelValue = defineModel()
10
+ const props = defineProps({
11
+ ...commonPropsType,
12
+ })
13
+ const open = computed({
14
+ get() {
15
+ return props?.config?.open === '1'
16
+ },
17
+ set(val) {
18
+ props.config.open = val ? '1' : '0'
19
+ }
20
+ })
21
+ const prefixIcon = computed(() => {
22
+ return props?.config?.prefixIcon
23
+ })
24
+ const suffixIcon = computed(() => {
25
+ return props?.config?.suffixIcon
26
+ })
27
+ const format = computed(() => {
28
+ return props?.config?.format || "YYYY-MM-DD"
29
+ })
30
+
31
+ const formatValue = computed({
32
+ get() {
33
+ return modelValue.value
34
+ },
35
+ set(val) {
36
+ let valueArr = Array.isArray(val) ? val : [val]
37
+ let formatVal = valueArr.reduce((pre, cur, i) => {
38
+ pre = pre + dayjs(cur).format(format.value) + (i === valueArr.length - 1 ? "" : ",")
39
+ return pre
40
+ }, "")
41
+ modelValue.value = formatVal
42
+ }
43
+ })
44
+
45
+ const separator = computed(() => {
46
+ if (props?.config?.displayType === "multiple") {
47
+ return "; "
48
+ } else if (props?.config?.displayType === "range") {
49
+ return " ~ "
50
+ }
51
+ return ""
52
+ })
53
+
54
+ const valueDesc = computed(() => {
55
+ let desc = ""
56
+ if (formatValue.value) {
57
+ let valueArr = formatValue.value.split(",")
58
+ desc = valueArr.reduce((pre, cur, i) => {
59
+ pre = pre + dayjs(cur).format(format.value) + (i === valueArr.length - 1 ? "" : separator.value)
60
+ return pre
61
+ }, "")
62
+ }
63
+ return desc
64
+ })
65
+
66
+ const calcProps = computed(() => {
67
+ const ret = {
68
+ type: props?.config?.displayType,
69
+ title: lang.value?.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn,
70
+ readonly: props?.config?.readonly === '1',
71
+ tiled: props?.config?.tiled === '1',
72
+ mindate: props?.config?.mindate,
73
+ maxdate: props?.config?.maxdate,
74
+ hidemark: props?.config?.hidemark === '1',
75
+ hidetitle: props?.config?.hidetitle === '1',
76
+ hidesubtitle: props?.config?.hidesubtitle === '1',
77
+ hideconfirm: props?.config?.hideconfirm === '1',
78
+ eagerrender: props?.config?.eagerrender === '1',
79
+ confirmtext: props?.config?.confirmtext,
80
+ confirmdisabledtext: props?.config?.confirmdisabledtext,
81
+ weekfirstday: props?.config?.weekfirstday,
82
+ forbidmaskclick: props?.config?.forbidmaskclick === '1',
83
+
84
+ maxrange: props?.config?.maxrange,
85
+ rangeprompt: props?.config?.rangeprompt,
86
+ hiderangeprompt: props?.config?.hiderangeprompt === '1',
87
+ allowsameday: props?.config?.allowsameday === '1',
88
+ }
89
+ return ret
90
+ })
91
+ const onClose = () => {
92
+ props.config?.onClose?.()
93
+ open.value = false
94
+ }
95
+ const onConfirm = (e) => {
96
+ formatValue.value = e.detail.value
97
+ props.config?.onConfirm?.(formatValue.value)
98
+ open.value = false
99
+ }
100
+
101
+ let setValueUnWatch = null
102
+ watch(() => {
103
+ return calcProps.tiled
104
+ }, (val) => {
105
+ setValueUnWatch && setValueUnWatch()
106
+ if (val) {
107
+ setValueUnWatch = watch(formatValue, (val) => {
108
+ let valueArr = val.split(",")
109
+ if (calcProps.type == single) {
110
+ calendarRef.value?.setValue?.(dayjs(valueArr[0])?.toDate())
111
+ } else {
112
+ calendarRef.value?.setValue?.(valueArr?.map(curVal => dayjs(curVal)?.toDate()) || [])
113
+ }
114
+ })
115
+ }
116
+ }, {
117
+ immediate: true
118
+ })
119
+
120
+ </script>
121
+
122
+ <template>
123
+ <cmi-input v-if="!calcProps.tiled" :value="valueDesc" suffixIcon @focus="open = true">
124
+ <div slot="suffix-icon" v-if="suffixIcon">
125
+ <component :is="`cmi-icon-${suffixIcon}`" color="#4E5969"></component>
126
+ </div>
127
+ <span slot="prefix" v-if="prefixIcon">
128
+ <component :is="`cmi-icon-${prefixIcon}`" color="#4E5969"></component>
129
+ </span>
130
+ </cmi-input>
131
+ <cmi-calendar
132
+ ref="calendarRef"
133
+ v-bind="{...attrs, ...calcProps}"
134
+ :open="open"
135
+ @close="onClose"
136
+ @confirm="onConfirm"
137
+ />
138
+ </template>
@@ -0,0 +1,34 @@
1
+ <script setup>
2
+ import { computed, defineProps, inject, useAttrs } from 'vue'
3
+ import { commonPropsType } from '../../utils/index.js'
4
+
5
+ const lang = inject('lang')
6
+ const modelValue = defineModel()
7
+ const props = defineProps({
8
+ ...commonPropsType,
9
+ })
10
+ const calcProps = computed(() => {
11
+ return {
12
+ title: lang?.value?.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn,
13
+ desc: modelValue.value || props.config?.desc,
14
+ content: props.config?.content,
15
+ to: props.config?.min,
16
+ islink: props.config?.islink === '1',
17
+ icon: props.config?.icon,
18
+ selfadaption: props.config?.selfadaption === '1',
19
+ noborder: props.noborder === '1',
20
+ }
21
+ })
22
+ const attrs = useAttrs()
23
+ const onChange = (e) => {
24
+ modelValue.value = e.detail.value
25
+ }
26
+
27
+ </script>
28
+
29
+ <template>
30
+ <cmi-cell
31
+ :value="modelValue" v-bind="{ ...attrs, ...calcProps}"
32
+ @change="onChange"
33
+ ></cmi-cell>
34
+ </template>
@@ -0,0 +1,63 @@
1
+ <script setup>
2
+ import { useAttrs, computed, inject } from 'vue'
3
+ import { commonPropsType, hasOwn } from '../../utils/index.js'
4
+
5
+ const props = defineProps({
6
+ ...commonPropsType,
7
+ })
8
+
9
+ const lang = inject('lang')
10
+
11
+ const label = computed(() => {
12
+ return lang.value.indexOf('zh') > -1 ? (props.config?.labelZh || props.config?.metaNameZh) : (props.config?.labelEn || props.config?.metaNameEn)
13
+ })
14
+
15
+ const checkboxGroupProps = computed(() => {
16
+ return {
17
+ direction: props.config?.direction,
18
+ }
19
+ })
20
+
21
+ const checkboxProps = computed(() => {
22
+ return {
23
+ size: props?.config?.size,
24
+ disabled: props.disabled,
25
+ block: props?.config?.block === '1',
26
+ indeterminate: props?.config?.indeterminate === '1',
27
+ }
28
+ })
29
+ const attrs = useAttrs()
30
+ const modeValue = defineModel()
31
+
32
+ const aa = [
33
+ {
34
+ columnValue: 'aaa',
35
+ columnDesc_zh: 'aaa',
36
+ },
37
+ {
38
+ columnValue: 'bbb',
39
+ columnDesc_zh: 'bbb',
40
+ }
41
+ ]
42
+ const onChange = ({ detail }) => {
43
+ modeValue.value = detail.value
44
+ }
45
+ const onSigleChange = ({ detail }) => {
46
+ modeValue.value = detail.value ? '1' : '0'
47
+ }
48
+ </script>
49
+
50
+ <template>
51
+ <cmi-checkbox-group :value="modeValue" @change="onChange" v-if="props.options && props.options.length" v-bind="{...checkboxGroupProps, ...attrs}">
52
+ <cmi-checkbox
53
+ v-for="option in props.options" :key="option.columnValue"
54
+ :disabled="option.columnStatus == '0' || option.columnStatus == '2'"
55
+ :name="option.columnValue" :label="lang.indexOf('zh') > -1 ? option.columnDesc_zh : option.columnDesc"
56
+ >
57
+ {{lang.indexOf('zh') > -1 ? option.columnDesc_zh : option.columnDesc}}
58
+ </cmi-checkbox>
59
+ </cmi-checkbox-group>
60
+ <cmi-checkbox v-else v-bind="{...checkboxProps, ...attrs}" :checked="modeValue === '1'" :value="modeValue" @change="onSigleChange">
61
+ {{ label }}
62
+ </cmi-checkbox>
63
+ </template>