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.
- package/babel.config.js +14 -0
- package/dist/index.js +2 -0
- package/dist/index.js.LICENSE.txt +8 -0
- package/dist/theme/element/index.css +1 -0
- package/dist/theme/element/src/components/card.scss +4 -0
- package/dist/theme/element/src/components/collapse.scss +16 -0
- package/dist/theme/element/src/components/date.scss +13 -0
- package/dist/theme/element/src/components/form.scss +54 -0
- package/dist/theme/element/src/components/index.scss +42 -0
- package/dist/theme/element/src/components/input.scss +15 -0
- package/dist/theme/element/src/components/message.scss +31 -0
- package/dist/theme/element/src/components/scrollbar.scss +14 -0
- package/dist/theme/element/src/components/select.scss +17 -0
- package/dist/theme/element/src/components/steps.scss +6 -0
- package/dist/theme/element/src/components/table.scss +8 -0
- package/dist/theme/element/src/components/tabs.scss +68 -0
- package/dist/theme/element/src/components/tree.scss +0 -0
- package/dist/theme/element/src/index.scss +79 -0
- package/index.js +17 -0
- package/package.json +45 -0
- package/scripts/gulpfile.mjs +73 -0
- package/scripts/webpack.config.js +81 -0
- package/src/analysisComponent.jsx +166 -0
- package/src/components/helper/button.js +17 -0
- package/src/components/helper/dock.js +120 -0
- package/src/components/icons/question-filled.vue +13 -0
- package/src/components/packages/CmiButton.vue +84 -0
- package/src/components/packages/CmiCalendar.vue +138 -0
- package/src/components/packages/CmiCell.vue +34 -0
- package/src/components/packages/CmiCheckbox.vue +63 -0
- package/src/components/packages/CmiDatetimePicker.vue +84 -0
- package/src/components/packages/CmiDropdownMenu.vue +57 -0
- package/src/components/packages/CmiInput.vue +45 -0
- package/src/components/packages/CmiLink.vue +28 -0
- package/src/components/packages/CmiPicker.vue +120 -0
- package/src/components/packages/CmiRadio.vue +29 -0
- package/src/components/packages/CmiSearch.vue +39 -0
- package/src/components/packages/CmiSelect.vue +84 -0
- package/src/components/packages/CustomComponentCard.vue +40 -0
- package/src/components/packages/CustomComponentCardH5.vue +40 -0
- package/src/components/packages/CustomComponentCol.vue +69 -0
- package/src/components/packages/CustomComponentColH5.vue +8 -0
- package/src/components/packages/CustomComponentCollapse.vue +183 -0
- package/src/components/packages/CustomComponentCollapseH5.vue +37 -0
- package/src/components/packages/CustomComponentCycle.vue +95 -0
- package/src/components/packages/CustomComponentCycleTabPane.vue +92 -0
- package/src/components/packages/CustomComponentDialog.vue +162 -0
- package/src/components/packages/CustomComponentEditor.vue +43 -0
- package/src/components/packages/CustomComponentFormLayout.vue +63 -0
- package/src/components/packages/CustomComponentFormLayoutH5.vue +55 -0
- package/src/components/packages/CustomComponentGrid.vue +29 -0
- package/src/components/packages/CustomComponentGridCol.vue +29 -0
- package/src/components/packages/CustomComponentInputDialog.vue +144 -0
- package/src/components/packages/CustomComponentPlain.vue +80 -0
- package/src/components/packages/CustomComponentRow.vue +67 -0
- package/src/components/packages/CustomComponentSelectEmployees.vue +133 -0
- package/src/components/packages/CustomComponentSendMail.vue +72 -0
- package/src/components/packages/CustomComponentSteps.vue +41 -0
- package/src/components/packages/CustomComponentTabPane.vue +41 -0
- package/src/components/packages/CustomComponentTabPaneH5.vue +30 -0
- package/src/components/packages/CustomComponentTable.jsx +406 -0
- package/src/components/packages/CustomComponentTableH5.vue +58 -0
- package/src/components/packages/CustomComponentTabs.vue +75 -0
- package/src/components/packages/CustomComponentTabsH5.vue +86 -0
- package/src/components/packages/CustomComponentTree.vue +28 -0
- package/src/components/packages/ElButton.vue +90 -0
- package/src/components/packages/ElCheckbox.vue +55 -0
- package/src/components/packages/ElDatePicker.vue +58 -0
- package/src/components/packages/ElInput.vue +23 -0
- package/src/components/packages/ElInputNumber.vue +54 -0
- package/src/components/packages/ElPagination.vue +56 -0
- package/src/components/packages/ElRadio.vue +44 -0
- package/src/components/packages/ElSelect.vue +73 -0
- package/src/components/packages/ElText.vue +48 -0
- package/src/components/packages/ElTimePicker.vue +34 -0
- package/src/components/patchComponents.js +46 -0
- package/src/components/styles/CustomComponenTable.scss +125 -0
- package/src/components/tabs/index.js +8 -0
- package/src/components/tabs/src/constants.js +23 -0
- package/src/components/tabs/src/tab-bar.js +8 -0
- package/src/components/tabs/src/tab-bar.vue +92 -0
- package/src/components/tabs/src/tab-nav.jsx +413 -0
- package/src/components/tabs/src/tab-pane.js +15 -0
- package/src/components/tabs/src/tab-pane.vue +80 -0
- package/src/components/tabs/src/tabs.jsx +217 -0
- package/src/components/tabs/style/css.js +2 -0
- package/src/components/tabs/style/index.js +2 -0
- package/src/components/thirdPartyFrame/index.js +32 -0
- package/src/components/thirdPartyFrame/src/ThirdPartyFrame.vue +123 -0
- package/src/hooks/index.js +129 -0
- package/src/hooks/pageConfig.js +20 -0
- package/src/index.jsx +140 -0
- package/src/renderer.jsx +68 -0
- package/src/rules/eventsSupplement.js +439 -0
- package/src/rules/parseCondition.js +359 -0
- package/src/rules/ruleUtils.js +208 -0
- package/src/rules/rulesDriver.js +118 -0
- package/src/theme/element/components/card.scss +4 -0
- package/src/theme/element/components/collapse.scss +16 -0
- package/src/theme/element/components/date.scss +13 -0
- package/src/theme/element/components/form.scss +54 -0
- package/src/theme/element/components/index.scss +42 -0
- package/src/theme/element/components/input.scss +15 -0
- package/src/theme/element/components/message.scss +31 -0
- package/src/theme/element/components/scrollbar.scss +14 -0
- package/src/theme/element/components/select.scss +17 -0
- package/src/theme/element/components/steps.scss +6 -0
- package/src/theme/element/components/table.scss +8 -0
- package/src/theme/element/components/tabs.scss +68 -0
- package/src/theme/element/components/tree.scss +0 -0
- package/src/theme/element/index.scss +79 -0
- package/src/utils/common.js +230 -0
- package/src/utils/const.js +198 -0
- package/src/utils/defaultVal.js +23 -0
- package/src/utils/format.js +19 -0
- package/src/utils/index.js +4 -0
- package/src/utils/is.js +69 -0
- package/src/utils/preserveFunc.js +33 -0
- package/src/utils/render.jsx +714 -0
- package/src/utils/request.js +10 -0
- 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>
|