kouxiangtang 0.1.33 → 0.1.34
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/README.md +411 -411
- package/dist/{AttachmentUploader-B7kkPU2C.js → AttachmentUploader-CGL54aBb.js} +16 -16
- package/dist/AttachmentUploader-CGL54aBb.js.map +1 -0
- package/dist/{ImageUploader-ByDQtIvq.js → ImageUploader-CcFlcSpQ.js} +15 -15
- package/dist/ImageUploader-CcFlcSpQ.js.map +1 -0
- package/dist/{ImagesUploader-D6-3HM_D.js → ImagesUploader-CG88IU_g.js} +7 -7
- package/dist/ImagesUploader-CG88IU_g.js.map +1 -0
- package/dist/{RichTextEditor-BL6xqftk.js → RichTextEditor-D4TE30tP.js} +2 -2
- package/dist/{RichTextEditor-BL6xqftk.js.map → RichTextEditor-D4TE30tP.js.map} +1 -1
- package/dist/color-DbNhHNpt.js.map +1 -1
- package/dist/{config-CkOTyA6M.js → config-6Nd09Jjv.js} +2 -2
- package/dist/config-6Nd09Jjv.js.map +1 -0
- package/dist/{config-Dd3jwmiE.js → config-B8Kl3wi6.js} +5 -5
- package/dist/config-B8Kl3wi6.js.map +1 -0
- package/dist/{config-8QYaFvNM.js → config-B8xbilFY.js} +15 -15
- package/dist/config-B8xbilFY.js.map +1 -0
- package/dist/{config-CVpuFBZU.js → config-BJ05VOJS.js} +2 -2
- package/dist/config-BJ05VOJS.js.map +1 -0
- package/dist/{config-QcC384MA.js → config-Bq3afnqQ.js} +2 -2
- package/dist/config-Bq3afnqQ.js.map +1 -0
- package/dist/{config-CyTeIX36.js → config-CAV930xL.js} +2 -2
- package/dist/config-CAV930xL.js.map +1 -0
- package/dist/{config-DhFx4vma.js → config-CaNnHrXu.js} +2 -2
- package/dist/config-CaNnHrXu.js.map +1 -0
- package/dist/{config-CGN5-J3g.js → config-D0bD_igE.js} +2 -2
- package/dist/config-D0bD_igE.js.map +1 -0
- package/dist/{config-HHs-1vYi.js → config-D1fFnyeg.js} +2 -2
- package/dist/config-D1fFnyeg.js.map +1 -0
- package/dist/{config-BRlZRcCp.js → config-DEU4rXLM.js} +11 -11
- package/dist/config-DEU4rXLM.js.map +1 -0
- package/dist/{config-DNjYwWf2.js → config-DEuYj7n8.js} +3 -3
- package/dist/config-DEuYj7n8.js.map +1 -0
- package/dist/{config-aPvPNn1F.js → config-DFCrgtZu.js} +2 -2
- package/dist/config-DFCrgtZu.js.map +1 -0
- package/dist/{config-Cy9I3Yww.js → config-DLUKJ00O.js} +6 -6
- package/dist/config-DLUKJ00O.js.map +1 -0
- package/dist/{config-DvLe94XY.js → config-Da7Ds_Wm.js} +2 -2
- package/dist/config-Da7Ds_Wm.js.map +1 -0
- package/dist/{config-lUL3nYIJ.js → config-DpS-vbol.js} +15 -15
- package/dist/config-DpS-vbol.js.map +1 -0
- package/dist/{config-BnpixRqt.js → config-Dtn2JkO5.js} +12 -12
- package/dist/config-Dtn2JkO5.js.map +1 -0
- package/dist/{config-Bu0VHLBr.js → config-H7UfnxyZ.js} +14 -14
- package/dist/config-H7UfnxyZ.js.map +1 -0
- package/dist/{config-BeR4PpdP.js → config-HEkYpTmG.js} +8 -8
- package/dist/config-HEkYpTmG.js.map +1 -0
- package/dist/{config-CoRLR8yc.js → config-ZqJ_p7Re.js} +3 -3
- package/dist/config-ZqJ_p7Re.js.map +1 -0
- package/dist/{config-R1n9p5mL.js → config-_n6i3lwk.js} +2 -2
- package/dist/config-_n6i3lwk.js.map +1 -0
- package/dist/{index-Bq_Z8Hm7.js → index-D5MVRDok.js} +2028 -2063
- package/dist/index-D5MVRDok.js.map +1 -0
- package/dist/kouxiangtang.js +16 -18
- package/dist/kouxiangtang.umd.cjs +9 -9
- package/dist/kouxiangtang.umd.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +56 -56
- package/dist/AttachmentUploader-B7kkPU2C.js.map +0 -1
- package/dist/ImageUploader-ByDQtIvq.js.map +0 -1
- package/dist/ImagesUploader-D6-3HM_D.js.map +0 -1
- package/dist/config-8QYaFvNM.js.map +0 -1
- package/dist/config-BRlZRcCp.js.map +0 -1
- package/dist/config-BeR4PpdP.js.map +0 -1
- package/dist/config-BnpixRqt.js.map +0 -1
- package/dist/config-Bu0VHLBr.js.map +0 -1
- package/dist/config-CGN5-J3g.js.map +0 -1
- package/dist/config-CVpuFBZU.js.map +0 -1
- package/dist/config-CkOTyA6M.js.map +0 -1
- package/dist/config-CoRLR8yc.js.map +0 -1
- package/dist/config-Cy9I3Yww.js.map +0 -1
- package/dist/config-CyTeIX36.js.map +0 -1
- package/dist/config-DNjYwWf2.js.map +0 -1
- package/dist/config-Dd3jwmiE.js.map +0 -1
- package/dist/config-DhFx4vma.js.map +0 -1
- package/dist/config-DvLe94XY.js.map +0 -1
- package/dist/config-HHs-1vYi.js.map +0 -1
- package/dist/config-QcC384MA.js.map +0 -1
- package/dist/config-R1n9p5mL.js.map +0 -1
- package/dist/config-aPvPNn1F.js.map +0 -1
- package/dist/config-lUL3nYIJ.js.map +0 -1
- package/dist/index-Bq_Z8Hm7.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "kouxiangtang",
|
|
3
|
-
"private": false,
|
|
4
|
-
"version": "0.1.
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/kouxiangtang.umd.cjs",
|
|
7
|
-
"module": "./dist/kouxiangtang.js",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/kouxiangtang.js"
|
|
11
|
-
},
|
|
12
|
-
"./*.css": {
|
|
13
|
-
"import": "./dist/*.css"
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"files": [
|
|
17
|
-
"dist"
|
|
18
|
-
],
|
|
19
|
-
"scripts": {
|
|
20
|
-
"dev": "vite",
|
|
21
|
-
"build": "vite build",
|
|
22
|
-
"preview": "vite preview",
|
|
23
|
-
"prepare": "husky"
|
|
24
|
-
},
|
|
25
|
-
"dependencies": {
|
|
26
|
-
"axios": "^1.6.8",
|
|
27
|
-
"color-hash": "^2.0.2",
|
|
28
|
-
"nprogress": "^0.2.0",
|
|
29
|
-
"pluralize": "^8.0.0"
|
|
30
|
-
},
|
|
31
|
-
"peerDependencies": {
|
|
32
|
-
"@vueup/vue-quill": "^1.2.0",
|
|
33
|
-
"element-plus": "^2.11.2",
|
|
34
|
-
"json-editor-vue": "^0.15.0",
|
|
35
|
-
"pinia": "^2.1.7",
|
|
36
|
-
"quill-image-uploader": "^1.3.0",
|
|
37
|
-
"vue": "^3.4.25",
|
|
38
|
-
"vue-router": "^4.3.2"
|
|
39
|
-
},
|
|
40
|
-
"devDependencies": {
|
|
41
|
-
"@stylistic/eslint-plugin-js": "^1.7.2",
|
|
42
|
-
"@vitejs/plugin-vue": "^5.0.4",
|
|
43
|
-
"eslint": "^8.56.0",
|
|
44
|
-
"eslint-config-prettier": "^9.1.0",
|
|
45
|
-
"eslint-plugin-prettier": "^5.1.3",
|
|
46
|
-
"eslint-plugin-vue": "^9.19.2",
|
|
47
|
-
"husky": "^9.0.11",
|
|
48
|
-
"prettier": "3.1.1",
|
|
49
|
-
"unplugin-element-plus": "^0.8.0",
|
|
50
|
-
"vite": "^5.2.10"
|
|
51
|
-
},
|
|
52
|
-
"optionalDependencies": {
|
|
53
|
-
"@rollup/rollup-linux-x64-gnu": "4.18.0",
|
|
54
|
-
"@rollup/rollup-win32-x64-msvc": "4.18.0"
|
|
55
|
-
}
|
|
56
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "kouxiangtang",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "0.1.34",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/kouxiangtang.umd.cjs",
|
|
7
|
+
"module": "./dist/kouxiangtang.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/kouxiangtang.js"
|
|
11
|
+
},
|
|
12
|
+
"./*.css": {
|
|
13
|
+
"import": "./dist/*.css"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"dev": "vite",
|
|
21
|
+
"build": "vite build",
|
|
22
|
+
"preview": "vite preview",
|
|
23
|
+
"prepare": "husky"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"axios": "^1.6.8",
|
|
27
|
+
"color-hash": "^2.0.2",
|
|
28
|
+
"nprogress": "^0.2.0",
|
|
29
|
+
"pluralize": "^8.0.0"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"@vueup/vue-quill": "^1.2.0",
|
|
33
|
+
"element-plus": "^2.11.2",
|
|
34
|
+
"json-editor-vue": "^0.15.0",
|
|
35
|
+
"pinia": "^2.1.7",
|
|
36
|
+
"quill-image-uploader": "^1.3.0",
|
|
37
|
+
"vue": "^3.4.25",
|
|
38
|
+
"vue-router": "^4.3.2"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@stylistic/eslint-plugin-js": "^1.7.2",
|
|
42
|
+
"@vitejs/plugin-vue": "^5.0.4",
|
|
43
|
+
"eslint": "^8.56.0",
|
|
44
|
+
"eslint-config-prettier": "^9.1.0",
|
|
45
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
46
|
+
"eslint-plugin-vue": "^9.19.2",
|
|
47
|
+
"husky": "^9.0.11",
|
|
48
|
+
"prettier": "3.1.1",
|
|
49
|
+
"unplugin-element-plus": "^0.8.0",
|
|
50
|
+
"vite": "^5.2.10"
|
|
51
|
+
},
|
|
52
|
+
"optionalDependencies": {
|
|
53
|
+
"@rollup/rollup-linux-x64-gnu": "4.18.0",
|
|
54
|
+
"@rollup/rollup-win32-x64-msvc": "4.18.0"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentUploader-B7kkPU2C.js","sources":["../src/framework/field/attachment/AttachmentUploader.vue"],"sourcesContent":["<script setup>\nimport {\n ElUpload,\n ElIcon,\n ElDialog,\n ElForm,\n ElFormItem,\n ElButton,\n ElInput,\n} from \"element-plus\";\nimport axios from \"axios\";\nimport http from \"../../utils/http\";\nimport { getConfig } from \"../../config-loader\";\nimport { ref, computed } from \"vue\";\nimport { ElLoading, ElMessage } from \"element-plus\";\nimport { Plus, Document, Close } from \"@element-plus/icons-vue\";\n\nconst emit = defineEmits([\"on-success\", \"on-remove\", \"on-change\"]);\nconst props = defineProps({\n pics: {\n type: Array,\n default() {\n return [];\n },\n },\n limit: { type: Number },\n props: {\n type: Object,\n default() {\n return {\n listType: \"picture-card\", //'text' | 'picture' | 'picture-card'\n limit: 5, //最多上传几个文件\n accept: \"image/*\",\n };\n },\n },\n});\n\nconst files = computed(() => {\n return props.pics.map((item) => {\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\n if (typeof item.name !== undefined) {\n item.fileType = fileType;\n return item;\n }\n\n if (item.url) {\n const parts = item.url.split(\"/\");\n const namedItem = {\n ...item,\n name: parts[parts.length - 1],\n fileType: fileType,\n };\n return namedItem;\n }\n\n return { ...item, name: item.id, fileType: fileType };\n });\n});\nconst dialogImageUrl = ref(\"\");\nconst dialogVisible = ref(false);\nconst imageUrl = ref(props);\nconst uploadUrl = getConfig().fileUploadUrl;\nconst header = {\n Authorization: `Bearer ${localStorage.getItem(\"token\")}`,\n};\nconst compressImg = (file) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n return new Promise(function (resolve, reject) {\n if (!file.type.startsWith(\"image/\")) {\n resolve(file);\n return false;\n }\n reader.onload = async (e) => {\n const img = new Image();\n img.src = e.target.result;\n img.onload = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n canvas.toBlob(\n (blob) => {\n const newFile = new File([blob], file.name, {\n type: file.type,\n lastModified: Date.now(),\n });\n resolve(newFile);\n },\n file.type,\n 0.5,\n );\n };\n };\n return false;\n });\n};\nconst handleRemoveSuccess = (uploadFile) => {\n if (uploadFile.status === \"success\") {\n if (props.props.deleteParams) {\n const paramsData = props.props.deleteParams?.data\n ? props.props.deleteParams?.data\n : {};\n http\n .remove(\n `${props.props.deleteParams.url}/${uploadFile.id}/attachment`,\n paramsData,\n paramsData,\n )\n .then(() => {\n emit(\"on-remove\", uploadFile);\n });\n } else {\n emit(\"on-remove\", uploadFile);\n }\n }\n};\nconst handleExceed = () => {\n ElMessage({\n message: `最多只能上传 ${props.props.limit} 个文件!`,\n type: \"warning\",\n });\n};\nconst handlePictureCardPreview = (uploadFile) => {\n dialogImageUrl.value = uploadFile.url;\n dialogVisible.value = true;\n};\nconst handleBeforeUpload = (file) => {\n const fileName = file.name.substring(0, file.name.lastIndexOf(\".\"));\n const regex = /^[\\u4e00-\\u9fa5\\w-_]+$/;\n if (!regex.test(fileName)) {\n ElMessage({\n message: \"请勿输入特殊字符!\",\n type: \"warning\",\n });\n return false;\n }\n compressImg(file).then((newFile) => {\n if (newFile.size / 1024 / 1024 < 5) {\n uploadRequest(newFile);\n return false;\n } else {\n ElMessage({\n message: \"上传大小不能超过 5MB!\",\n type: \"warning\",\n });\n return false;\n }\n });\n};\n\nfunction handleFileNameChange(file, index) {\n if (!file.name) {\n ElMessage({\n message: \"附件名称不能为空!\",\n type: \"warning\",\n });\n return;\n }\n emit(\"on-change\", file);\n}\n\nfunction uploadRequest(file) {\n ElLoading.service({ text: \"上传中,请稍后\", background: \"rgba(0,0,0,0.3)\" });\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append(\"file\", file);\n axios\n .post(uploadUrl, formData, {})\n .then((res) => {\n ElLoading.service().close();\n ElMessage({\n message: \"上传成功\",\n type: \"success\",\n });\n emit(\"on-success\", res.data.data);\n resolve(res.data);\n return false;\n })\n .catch(() => {\n ElLoading.service().close();\n ElMessage({\n message: \"上传失败\",\n type: \"warning\",\n });\n reject(\"Upload failed\");\n });\n });\n}\n</script>\n\n<template>\n <!-- 删除请求头加权限后请添加到组建中 :headers=\"header\"-->\n <el-upload\n :file-list=\"files\"\n :action=\"uploadUrl\"\n :limit=\"props.props.limit\"\n :accept=\"props.props.accept\"\n :list-type=\"props.props.listType\"\n :on-remove=\"handleRemoveSuccess\"\n :before-upload=\"handleBeforeUpload\"\n :on-exceed=\"handleExceed\"\n :on-preview=\"handlePictureCardPreview\"\n :multiple=\"true\"\n :http-request=\"\n () => {\n return false;\n }\n \"\n :show-file-list=\"props.props.listType !== 'text'\"\n :class=\"[\n 'upload-main',\n { 'disable-upload': files.length >= props.props.limit },\n ]\"\n @click.prevent\n >\n <template v-if=\"props.props.listType !== 'text'\">\n <el-icon :disabled=\"true\">\n <Plus />\n </el-icon>\n </template>\n <template v-else>\n <el-button class=\"upload-button\" type=\"primary\"> 上传附件 </el-button>\n </template>\n </el-upload>\n <el-dialog v-model=\"dialogVisible\">\n <img w-full :src=\"dialogImageUrl\" alt=\"Preview Image\" />\n </el-dialog>\n <el-form v-if=\"props.props.listType == 'text'\">\n <el-form-item v-for=\"(file, index) in files\" :key=\"index\" class=\"file-list\">\n <el-icon color=\"#73767a\" :size=\"14\">\n <Document />\n </el-icon>\n <el-input\n v-model=\"file.name\"\n @change=\"handleFileNameChange(file, index)\"\n />\n <span class=\"file-type\">.{{ file.fileType }}</span>\n <el-icon color=\"#73767a\" :size=\"12\" @click=\"handleRemoveSuccess(file)\">\n <Close />\n </el-icon>\n </el-form-item>\n </el-form>\n</template>\n<style scoped lang=\"scss\">\n:deep(.el-upload-list) {\n .el-upload-list__item-actions span {\n margin-left: 20px;\n }\n}\n\n.disable-upload {\n :deep(.el-upload--picture-card) {\n display: none !important;\n }\n\n :deep(.el-upload--text) {\n display: none !important;\n }\n\n :deep(.el-upload--picture) {\n display: none !important;\n }\n}\n.upload-main {\n flex-basis: 100%;\n}\n.file-list {\n display: flex;\n align-items: center;\n margin-top: 10px;\n .file-type {\n height: 22px;\n line-height: 22px;\n margin-right: 5px;\n background: #eeeeee;\n border-radius: 4px;\n font-size: 12px;\n padding: 0 4px;\n }\n :deep(.el-form-item__content) {\n display: contents;\n }\n :deep(.el-input__wrapper) {\n margin: 0 5px;\n }\n :deep(.el-input__inner) {\n height: 20px;\n line-height: 20px;\n }\n}\n</style>\n"],"names":["emit","__emit","props","__props","files","computed","item","fileType","parts","dialogImageUrl","ref","dialogVisible","uploadUrl","getConfig","compressImg","file","reader","resolve","reject","e","img","canvas","ctx","blob","newFile","handleRemoveSuccess","uploadFile","paramsData","_a","_b","http","handleExceed","ElMessage","handlePictureCardPreview","handleBeforeUpload","fileName","uploadRequest","handleFileNameChange","index","ElLoading","formData","axios","res"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageUploader-ByDQtIvq.js","sources":["../src/framework/field/image/ImageUploader.vue"],"sourcesContent":["<script setup>\nimport { ElUpload, ElImage, ElIcon } from \"element-plus\";\nimport axios from \"axios\";\nimport { getConfig } from \"../../config-loader\";\nimport { ElLoading, ElMessage } from \"element-plus\";\nimport { Plus, Delete, Loading } from \"@element-plus/icons-vue\";\n\nconst emit = defineEmits([\"on-success\"]);\nconst props = defineProps({\n imageUrl: { type: String },\n props: {\n type: Object,\n default() {\n return {\n accept: \"image/*\",\n tip: \"\",\n };\n },\n },\n});\nconst uploadUrl = getConfig().imageUploadUrl;\nconst header = {\n Authorization: `Bearer ${localStorage.getItem(\"token\")}`,\n};\nconst handleBeforeUpload = (uploadFile) => {\n const isLt2M = uploadFile.size / 1024 / 1024 < 5;\n if (!isLt2M) {\n ElMessage({\n message: \"上传大小不能超过 5MB!\",\n type: \"warning\",\n });\n return false;\n }\n};\nconst handleSuccess = (response) => {\n emit(\"on-success\", response.data.imageUrl);\n};\n\nfunction deleteImageUrl() {\n emit(\"on-success\", \"\");\n}\n\nfunction uploadRequest(file) {\n ElLoading.service({ text: \"上传中,请稍后\", background: \"rgba(0,0,0,0.3)\" });\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append(\"image\", file.file);\n axios\n .post(uploadUrl, formData, {})\n .then((res) => {\n ElLoading.service().close();\n ElMessage({\n message: \"上传成功\",\n type: \"success\",\n });\n resolve(res.data);\n })\n .catch(() => {\n ElLoading.service().close();\n ElMessage({\n message: \"上传失败\",\n type: \"warning\",\n });\n reject(\"Upload failed\");\n });\n });\n}\n</script>\n\n<template>\n <!-- 删除请求头加权限后请添加到组建中 :headers=\"header\"-->\n <el-upload\n class=\"image-uploader\"\n :action=\"uploadUrl\"\n name=\"image\"\n :show-file-list=\"false\"\n :accept=\"props.props.accept\"\n :on-success=\"handleSuccess\"\n :before-upload=\"handleBeforeUpload\"\n :http-request=\"uploadRequest\"\n >\n <slot />\n <el-image\n v-if=\"props.imageUrl\"\n class=\"image\"\n :src=\"props.imageUrl\"\n fit=\"scale-down\"\n >\n <template #placeholder>\n <div class=\"image-slot\">\n <el-icon class=\"placeholder-icon\">\n <Loading />\n </el-icon>\n </div>\n </template>\n </el-image>\n <el-icon v-else class=\"uploader-icon\">\n <Plus />\n </el-icon>\n <el-icon\n v-if=\"props.imageUrl\"\n class=\"delete-icon\"\n @click.stop.prevent=\"deleteImageUrl\"\n >\n <Delete />\n </el-icon>\n <template v-if=\"props.props.tip\" #tip>\n <div class=\"el-upload__tip\">{{ props.props.tip }}</div>\n </template>\n </el-upload>\n</template>\n\n<style scoped lang=\"scss\">\n.image-uploader {\n :deep(.el-upload) {\n border: 1px dashed var(--el-border-color);\n border-radius: 6px;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n transition: var(--el-transition-duration-fast);\n\n &:hover {\n border-color: var(--el-color-primary);\n }\n }\n\n .image {\n width: 146px;\n height: 146px;\n\n .placeholder-icon {\n width: 146px;\n height: 146px;\n font-size: 30px;\n color: #a7a7a7;\n }\n }\n\n .uploader-icon {\n font-size: 28px;\n color: #8c939d;\n width: 146px;\n height: 146px;\n text-align: center;\n }\n\n .delete-icon {\n font-size: 20px;\n color: #b7b4b4;\n position: absolute;\n top: 10px;\n right: 10px;\n }\n}\n</style>\n"],"names":["emit","__emit","props","__props","uploadUrl","getConfig","handleBeforeUpload","uploadFile","ElMessage","handleSuccess","response","deleteImageUrl","uploadRequest","file","ElLoading","resolve","reject","formData","axios","res"],"mappings":";;;;;;;;;;;;;;;;;;;;AAOA,UAAMA,IAAOC,GACPC,IAAQC,GAYRC,IAAYC,EAAW,EAAC;AACf,IACY,gBAAa,QAAQ,OAAO;AAEvD,UAAMC,IAAqB,CAACC,MAAe;AAEzC,UAAI,EADWA,EAAW,OAAO,OAAO,OAAO;AAE7C,eAAAC,EAAU;AAAA,UACR,SAAS;AAAA,UACT,MAAM;AAAA,QACZ,CAAK,GACM;AAAA,IAEX,GACMC,IAAgB,CAACC,MAAa;AAClC,MAAAV,EAAK,cAAcU,EAAS,KAAK,QAAQ;AAAA,IAC3C;AAEA,aAASC,IAAiB;AACxB,MAAAX,EAAK,cAAc,EAAE;AAAA,IACvB;AAEA,aAASY,EAAcC,GAAM;AAC3B,aAAAC,EAAU,QAAQ,EAAE,MAAM,WAAW,YAAY,kBAAiB,CAAE,GAC7D,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,cAAMC,IAAW,IAAI;AACrB,QAAAA,EAAS,OAAO,SAASJ,EAAK,IAAI,GAClCK,EACG,KAAKd,GAAWa,GAAU,EAAE,EAC5B,KAAK,CAACE,MAAQ;AACb,UAAAL,EAAU,UAAU,SACpBN,EAAU;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,UAChB,CAAS,GACDO,EAAQI,EAAI,IAAI;AAAA,QACxB,CAAO,EACA,MAAM,MAAM;AACX,UAAAL,EAAU,UAAU,SACpBN,EAAU;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,UAChB,CAAS,GACDQ,EAAO,eAAe;AAAA,QAC9B,CAAO;AAAA,MACP,CAAG;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImagesUploader-D6-3HM_D.js","sources":["../src/framework/field/images/ImagesUploader.vue"],"sourcesContent":["<script setup>\nimport { ElUpload, ElDialog, ElIcon, ElButton } from \"element-plus\";\nimport { computed, ref } from \"vue\";\nimport { ElMessage } from \"element-plus\";\nimport { Plus } from \"@element-plus/icons-vue\";\nimport http from \"../../utils/http\";\n\nconst emit = defineEmits([\"on-remove\", \"on-upload\"]);\nconst dialogImageUrl = ref(\"\");\nconst dialogVisible = ref(false);\nconst props = defineProps({\n images: {\n type: Array,\n default() {\n return [];\n },\n },\n limit: { type: Number },\n props: {\n type: Object,\n default() {\n return {\n listType: \"picture-card\",\n limit: 5,\n accept: \"image/*\",\n tip: \"\",\n };\n },\n },\n});\n\nconst files = computed(() => {\n return props.images.map((item) => {\n if (!item?.url) {\n return { ...item, name: \"unknown\", fileType: \"unknown\" };\n }\n\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\n const parts = item.url.split(\"/\");\n const namedItem = {\n ...item,\n name: parts[parts.length - 1],\n fileType,\n };\n return namedItem;\n });\n});\n\nfunction onRemove(uploadFile) {\n if (props.props.deleteParams) {\n const paramsData = props.props.deleteParams?.data\n ? props.props.deleteParams?.data\n : {};\n http\n .remove(\n `${props.props.deleteParams.url}/${uploadFile.id}/attachment`,\n paramsData,\n paramsData,\n )\n .then(() => {\n emit(\"on-remove\", uploadFile);\n });\n } else {\n emit(\"on-remove\", uploadFile);\n }\n}\n\nfunction onExceed() {\n ElMessage({\n message: `最多只能上传 ${props.props.limit} 个文件!`,\n type: \"warning\",\n });\n}\n\nfunction onPreview(uploadFile) {\n dialogImageUrl.value = uploadFile.url;\n dialogVisible.value = true;\n}\n\nfunction beforeUpload(uploadFile) {\n const limitSize = 1024 * 1024 * 5;\n if (uploadFile.size > limitSize) {\n ElMessage({\n message: \"上传大小不能超过 5MB!\",\n type: \"warning\",\n });\n return false;\n }\n\n return true;\n}\n\nfunction httpRequest(uploadFile) {\n const formData = new FormData();\n formData.append(\"file\", uploadFile.file);\n emit(\"on-upload\", formData);\n}\n</script>\n\n<template>\n <div>\n <el-upload\n :file-list=\"files\"\n :limit=\"props.props.limit\"\n :accept=\"props.props.accept\"\n :list-type=\"props.props.listType\"\n :on-remove=\"onRemove\"\n :on-exceed=\"onExceed\"\n :on-preview=\"onPreview\"\n :multiple=\"true\"\n :before-upload=\"beforeUpload\"\n :http-request=\"httpRequest\"\n :show-file-list=\"props.props.listType !== 'text'\"\n :class=\"[\n 'upload-main',\n { 'disable-upload': files.length >= props.props.limit },\n ]\"\n @click.prevent\n >\n <template v-if=\"props.props.listType !== 'text'\">\n <el-icon :disabled=\"true\">\n <Plus />\n </el-icon>\n </template>\n <template v-else>\n <el-button class=\"upload-button\" type=\"primary\"> 上传附件 </el-button>\n </template>\n <template v-if=\"props.props.tip\" #tip>\n <div class=\"el-upload__tip\">{{ props.props.tip }}</div>\n </template>\n </el-upload>\n <el-dialog v-model=\"dialogVisible\">\n <img w-full :src=\"dialogImageUrl\" alt=\"Preview Image\" />\n </el-dialog>\n </div>\n</template>\n<style scoped lang=\"scss\">\n:deep(.el-upload-list) {\n .el-upload-list__item-actions span {\n margin-left: 20px;\n }\n}\n\n.disable-upload {\n :deep(.el-upload--picture-card) {\n display: none !important;\n }\n\n :deep(.el-upload--text) {\n display: none !important;\n }\n\n :deep(.el-upload--picture) {\n display: none !important;\n }\n}\n.upload-main {\n flex-basis: 100%;\n}\n.file-list {\n display: flex;\n align-items: center;\n margin-top: 10px;\n .file-type {\n height: 22px;\n line-height: 22px;\n margin-right: 5px;\n background: #eeeeee;\n border-radius: 4px;\n font-size: 12px;\n padding: 0 4px;\n }\n :deep(.el-form-item__content) {\n display: contents;\n }\n :deep(.el-input__wrapper) {\n margin: 0 5px;\n }\n :deep(.el-input__inner) {\n height: 20px;\n line-height: 20px;\n }\n}\n</style>\n"],"names":["emit","__emit","dialogImageUrl","ref","dialogVisible","props","__props","files","computed","item","fileType","parts","onRemove","uploadFile","paramsData","_a","_b","http","onExceed","ElMessage","onPreview","beforeUpload","httpRequest","formData"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,UAAMA,IAAOC,GACPC,IAAiBC,EAAI,EAAE,GACvBC,IAAgBD,EAAI,EAAK,GACzBE,IAAQC,GAqBRC,IAAQC,EAAS,MACdH,EAAM,OAAO,IAAI,CAACI,MAAS;AAChC,UAAI,EAACA,KAAA,QAAAA,EAAM;AACT,eAAO,EAAE,GAAGA,GAAM,MAAM,WAAW,UAAU;AAG/C,YAAMC,IAAWD,EAAK,IAAI,UAAUA,EAAK,IAAI,YAAY,GAAG,IAAI,CAAC,GAC3DE,IAAQF,EAAK,IAAI,MAAM,GAAG;AAMhC,aALkB;AAAA,QAChB,GAAGA;AAAA,QACH,MAAME,EAAMA,EAAM,SAAS,CAAC;AAAA,QAC5B,UAAAD;AAAA,MACN;AAAA,IAEA,CAAG,CACF;AAED,aAASE,EAASC,GAAY;;AAC5B,UAAIR,EAAM,MAAM,cAAc;AAC5B,cAAMS,KAAaC,IAAAV,EAAM,MAAM,iBAAZ,QAAAU,EAA0B,QACzCC,IAAAX,EAAM,MAAM,iBAAZ,gBAAAW,EAA0B,OAC1B;AACJ,QAAAC,EACG;AAAA,UACC,GAAGZ,EAAM,MAAM,aAAa,GAAG,IAAIQ,EAAW,EAAE;AAAA,UAChDC;AAAA,UACAA;AAAA,QACD,EACA,KAAK,MAAM;AACV,UAAAd,EAAK,aAAaa,CAAU;AAAA,QACpC,CAAO;AAAA,MACP;AACI,QAAAb,EAAK,aAAaa,CAAU;AAAA,IAEhC;AAEA,aAASK,IAAW;AAClB,MAAAC,EAAU;AAAA,QACR,SAAS,UAAUd,EAAM,MAAM,KAAK;AAAA,QACpC,MAAM;AAAA,MACV,CAAG;AAAA,IACH;AAEA,aAASe,EAAUP,GAAY;AAC7B,MAAAX,EAAe,QAAQW,EAAW,KAClCT,EAAc,QAAQ;AAAA,IACxB;AAEA,aAASiB,EAAaR,GAAY;AAEhC,aAAIA,EAAW,OAAO,WACpBM,EAAU;AAAA,QACR,SAAS;AAAA,QACT,MAAM;AAAA,MACZ,CAAK,GACM,MAGF;AAAA,IACT;AAEA,aAASG,EAAYT,GAAY;AAC/B,YAAMU,IAAW,IAAI;AACrB,MAAAA,EAAS,OAAO,QAAQV,EAAW,IAAI,GACvCb,EAAK,aAAauB,CAAQ;AAAA,IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-8QYaFvNM.js","sources":["../src/framework/field/radio-group/FieldDisplay.vue","../src/framework/field/radio-group/FieldEditor.vue","../src/framework/field/radio-group/config.js"],"sourcesContent":["<script setup>\nimport { ElTooltip } from \"element-plus\";\nimport color from \"../../utils/color\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst invalidTip = ref(\"...\");\nconst found = ref(false);\nconst items = ref([]);\n\nasync function getRadioName() {\n const val = props.row[props.field.code];\n const label = props.field.label;\n if (val === undefined || val === null) {\n invalidTip.value = \"--\";\n found.value = false;\n return;\n }\n\n const options = await props.field.options(props.row, routeQuery);\n if (!options) {\n invalidTip.value = `<无>`;\n found.value = false;\n return;\n }\n\n let radioGroupOptions = \"\";\n radioGroupOptions = options.filter((item) => val === item.code); //formattedValue\n\n if (radioGroupOptions.length === 0) {\n invalidTip.value = `<无>`;\n found.value = false;\n return;\n }\n\n items.value = radioGroupOptions.map((item) => ({\n bgColor: color.strToHexColor(`${item.code}-${item.name}`),\n code: item.code,\n name: item.name,\n }));\n\n found.value = true;\n}\n\nwatch(() => props.row, getRadioName, { immediate: true });\n</script>\n\n<template>\n <template v-if=\"found\">\n <div class=\"radio-fields\">\n <el-tooltip\n v-for=\"item in items\"\n :content=\"`${item.code}`\"\n placement=\"top\"\n >\n <div class=\"radio-field found\" :style=\"`background: ${item.bgColor}`\">\n {{ item.name }}\n </div>\n </el-tooltip>\n </div>\n </template>\n <EmptyTip v-else :text=\"invalidTip\" />\n</template>\n\n<style scoped lang=\"scss\">\n.radio-fields {\n display: inline-block;\n line-height: inherit;\n}\n\n.radio-field {\n font-size: 12px;\n padding: 0 6px;\n border-radius: 4px;\n}\n\n.found {\n color: #fff;\n}\n</style>\n","<template>\n <el-radio-group\n v-model=\"_form.value\"\n style=\"width: 100%\"\n :disabled=\"props.disabled\"\n placeholder=\"\"\n @change=\"change\"\n >\n <template v-for=\"option in options\" :key=\"option.code\">\n <el-radio :label=\"option.code\" :disabled=\"option.disabled\">{{\n option.name\n }}</el-radio>\n </template>\n </el-radio-group>\n</template>\n\n<script setup>\nimport { ElRadioGroup, ElRadio } from \"element-plus\";\nimport { reactive, watch, ref } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: [String, Number],\n field: Object,\n type: String,\n disabled: Boolean,\n formData: Object,\n});\nconst _form = reactive({ value: props.modelValue });\nconst options = ref([]);\n\nasync function remoteSearch(keyword) {\n options.value = await props.field.options(\n props.formData,\n routeQuery,\n keyword,\n );\n}\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n if (props?.field?.change) {\n props.field.change(_form.value);\n }\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\nremoteSearch();\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nclass RadioGroupFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.options = rawConfig.options || (() => [{ code: 0, name: \"未实现\" }]);\n this.formChange = rawConfig.formChange || (() => {});\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n\n this.checkValidProperties(rawConfig);\n }\n}\n\nexport default RadioGroupFieldConfig;\n"],"names":["route","useRoute","routeQuery","setupRouteQuery","props","__props","invalidTip","ref","found","items","getRadioName","val","options","radioGroupOptions","item","color","watch","emit","__emit","_form","reactive","remoteSearch","keyword","change","_a","RadioGroupFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,EAAQ,GAChBC,IAAaC,EAAgBH,CAAK,GAClCI,IAAQC,GAQRC,IAAaC,EAAI,KAAK,GACtBC,IAAQD,EAAI,EAAK,GACjBE,IAAQF,EAAI,CAAA,CAAE;AAEpB,mBAAeG,IAAe;AAC5B,YAAMC,IAAMP,EAAM,IAAIA,EAAM,MAAM,IAAI;AAEtC,UADcA,EAAM,MAAM,OACDO,KAAQ,MAAM;AACrC,QAAAL,EAAW,QAAQ,MACnBE,EAAM,QAAQ;AACd;AAAA,MACD;AAED,YAAMI,IAAU,MAAMR,EAAM,MAAM,QAAQA,EAAM,KAAKF,CAAU;AAC/D,UAAI,CAACU,GAAS;AACZ,QAAAN,EAAW,QAAQ,OACnBE,EAAM,QAAQ;AACd;AAAA,MACD;AAED,UAAIK,IAAoB;AAGxB,UAFAA,IAAoBD,EAAQ,OAAO,CAACE,MAASH,MAAQG,EAAK,IAAI,GAE1DD,EAAkB,WAAW,GAAG;AAClC,QAAAP,EAAW,QAAQ,OACnBE,EAAM,QAAQ;AACd;AAAA,MACD;AAED,MAAAC,EAAM,QAAQI,EAAkB,IAAI,CAACC,OAAU;AAAA,QAC7C,SAASC,EAAM,cAAc,GAAGD,EAAK,IAAI,IAAIA,EAAK,IAAI,EAAE;AAAA,QACxD,MAAMA,EAAK;AAAA,QACX,MAAMA,EAAK;AAAA,MACZ,EAAC,GAEFN,EAAM,QAAQ;AAAA,IAChB;AAEA,WAAAQ,EAAM,MAAMZ,EAAM,KAAKM,GAAc,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCxD,UAAMV,IAAQC,EAAQ,GAChBC,IAAaC,EAAgBH,CAAK,GAClCiB,IAAOC,GACPd,IAAQC,GAORc,IAAQC,EAAS,EAAE,OAAOhB,EAAM,WAAY,CAAA,GAC5CQ,IAAUL,EAAI,CAAA,CAAE;AAEtB,mBAAec,EAAaC,GAAS;AACnC,MAAAV,EAAQ,QAAQ,MAAMR,EAAM,MAAM;AAAA,QAChCA,EAAM;AAAA,QACNF;AAAA,QACAoB;AAAA,MACJ;AAAA,IACA;AAEA,aAASC,IAAS;;AAChB,MAAAN,EAAK,qBAAqBE,EAAM,KAAK,IACjCK,IAAApB,KAAA,gBAAAA,EAAO,UAAP,QAAAoB,EAAc,UAChBpB,EAAM,MAAM,OAAOe,EAAM,KAAK;AAAA,IAElC;AAEA,WAAAH;AAAA,MACE,MAAMZ,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAe,EAAM,QAAQf,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB,GACAiB;;;;;;;;;;;;;;;;;;;;;;;;ACrDA,MAAMI,UAA8BC,EAAgB;AAAA,EAClD,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUD,EAAU,YAAY,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,MAAK,CAAE,IACpE,KAAK,aAAaA,EAAU,eAAe,MAAM;AAAA,IAAE,IACnD,KAAK,UAAUE,GACf,KAAK,SAASC,GAEd,KAAK,qBAAqBH,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-BRlZRcCp.js","sources":["../src/framework/field/rich-text/FieldDisplay.vue","../src/framework/field/rich-text/FieldEditor.vue","../src/framework/field/rich-text/config.js"],"sourcesContent":["<script setup>\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\n</script>\n\n<template>\n <div class=\"editor-field\">\n <div class=\"content\" v-html=\"props.row[props.field.code]\" />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.editor-field {\n width: 100%;\n background: #999;\n padding: 20px 0;\n\n .content {\n word-wrap: break-word;\n font-family: \"Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif\" !important;\n max-width: 500px;\n padding: 20px;\n margin: 0 auto;\n background: white;\n white-space: break-spaces;\n :deep(img) {\n width: 100%;\n max-width: 100%;\n }\n }\n}\n</style>\n","<template>\n <div style=\"width: 100%\">\n <RichTextEditor v-model:content=\"_form.value\" :field=\"props.field\" />\n </div>\n</template>\n\n<script setup>\nimport { reactive, watch, defineAsyncComponent, defineEmits } from \"vue\";\n\nconst RichTextEditor = defineAsyncComponent(() => {\n return import(\"./RichTextEditor.vue\");\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nwatch(\n () => _form.value,\n () => {\n emit(\"update:modelValue\", _form.value);\n },\n);\nwatch(\n () => props.modelValue,\n async () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class EditorFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n\n this.checkValidProperties(rawConfig);\n }\n\n defaultConfig() {\n return {\n showInList: false,\n };\n }\n}\n"],"names":["props","__props","RichTextEditor","defineAsyncComponent","emit","__emit","_form","reactive","watch","EditorFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;AACA,UAAMA,IAAQC;;;;;;;;;;;;;;;;;ACQd,UAAMC,IAAiBC,EAAqB,MACnC,OAAO,8BAAsB,CACrC,GAEKC,IAAOC,GACPL,IAAQC,GAKRK,IAAQC,EAAS,EAAE,OAAOP,EAAM,WAAY,CAAA;AAElD,WAAAQ;AAAA,MACE,MAAMF,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAF,EAAK,qBAAqBE,EAAM,KAAK;AAAA,MACtC;AAAA,IACH,GACAE;AAAA,MACE,MAAMR,EAAM;AAAA,MACZ,YAAY;AACV,QAAAM,EAAM,QAAQN,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;AC7Be,MAAMS,UAA0BC,EAAgB;AAAA,EAC7D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GAEd,KAAK,qBAAqBH,CAAS;AAAA,EACpC;AAAA,EAED,gBAAgB;AACd,WAAO;AAAA,MACL,YAAY;AAAA,IAClB;AAAA,EACG;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-BeR4PpdP.js","sources":["../src/framework/field/tree-select/FieldDisplay.vue","../src/framework/field/tree-select/FieldEditor.vue","../src/framework/field/tree-select/config.js"],"sourcesContent":["<script setup>\nimport color from \"../../utils/color\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\nimport { ElTree } from \"element-plus\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst formValue = ref([]);\nconst options = ref([]);\nconst defaultTreeSelectProps = {\n label: \"name\",\n children: \"children\",\n value: \"id\",\n};\nconst invalidTip = ref(\"...\");\nconst found = ref(false);\nconst items = ref([]);\n\nasync function getSelectName() {\n formValue.value = props.row[props.field.code];\n options.value = await props.field.options();\n // if (!options.value) {\n // invalidTip.value = `<无>`;\n // found.value = false;\n // return;\n // }\n\n // let selectedOptions = [];\n // if (props.field.multiple) {\n // selectedOptions = options.value.filter((item) => val.includes(item.code));\n // } else {\n // selectedOptions = options.value.filter((item) => val === item.code);\n // }\n\n // if (selectedOptions.length === 0) {\n // invalidTip.value = `<无>`;\n // found.value = false;\n // return;\n // }\n\n // items.value = selectedOptions.map((item) => ({\n // bgColor: color.strToHexColor(`${item.code}-${item.name}`),\n // code: item.code,\n // name: item.name,\n // }));\n\n found.value = true;\n}\n\nwatch(() => props.row, getSelectName, { immediate: true });\n</script>\n\n<template>\n <template v-if=\"found\">\n <el-tree\n :default-checked-keys=\"formValue\"\n style=\"width: 100%\"\n :data=\"options\"\n :props=\"defaultTreeSelectProps\"\n node-key=\"id\"\n :multiple=\"props.field.multiple\"\n :render-after-expand=\"false\"\n check-on-click-node\n :expand-on-click-node=\"false\"\n default-expand-all\n highlight-current\n disabled=\"true\"\n :check-strictly=\"props.field.checkStrictly\"\n show-checkbox\n filterable\n />\n </template>\n <EmptyTip v-else :text=\"invalidTip\" />\n</template>\n\n<style scoped lang=\"scss\">\n.select-fields {\n display: inline-block;\n}\n\n.select-field {\n font-size: 12px;\n padding: 4px 6px;\n border-radius: 4px;\n}\n\n.found {\n color: #fff;\n}\n</style>\n","<template>\n <el-tree-select\n v-model=\"_form.value\"\n style=\"width: 100%\"\n :data=\"options\"\n :props=\"defaultTreeSelectProps\"\n node-key=\"id\"\n :multiple=\"props.field.multiple\"\n :render-after-expand=\"false\"\n check-on-click-node\n :expand-on-click-node=\"false\"\n default-expand-all\n highlight-current\n :disabled=\"props.field.disabled\"\n :check-strictly=\"props.field.checkStrictly\"\n remote\n show-checkbox\n filterable\n clearable\n :filter-node-method=\"filterNode\"\n :remote-method=\"remoteSearch\"\n @check=\"change\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElTreeSelect } from \"element-plus\";\nimport { reactive, watch, ref } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Number,\n field: Object,\n disabled: Boolean,\n formData: Object,\n});\nconst _form = reactive({ value: props.modelValue });\nconst options = ref([]);\nconst defaultTreeSelectProps = {\n label: \"name\",\n children: \"children\",\n value: \"id\",\n};\n\nasync function remoteSearch(keyword) {\n options.value = await props.field.options(\n props.formData,\n routeQuery,\n keyword,\n );\n}\n\nfunction filterNode(value, data) {\n // 如果用api进行keyword的检索,直接return true才会展示\n // 需要api查keyword时useApiSearchKeyword传true,否则走默认查询,includes到才展示\n if (props.field?.useApiSearchKeyword) {\n return true;\n }\n\n if (!value) {\n return true;\n }\n\n return data.name.includes(value);\n}\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\nremoteSearch();\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nclass TreeFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.options = rawConfig.options || (() => []);\n this.formChange = rawConfig.formChange || (() => {});\n this.multiple = this.defaultBy(rawConfig.multiple, false);\n this.checkStrictly = this.defaultBy(rawConfig.checkStrictly, true);\n this.useApiSearchKeyword = rawConfig.useApiSearchKeyword || false;\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n\n this.checkValidProperties(rawConfig);\n }\n\n defaultConfig() {\n return {\n showInList: false,\n };\n }\n}\n\nexport default TreeFieldConfig;\n"],"names":["props","__props","formValue","ref","options","defaultTreeSelectProps","invalidTip","found","getSelectName","watch","route","useRoute","routeQuery","setupRouteQuery","emit","__emit","_form","reactive","remoteSearch","keyword","filterNode","value","data","_a","change","TreeFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;;AAMA,UAAMA,IAAQC,GAQRC,IAAYC,EAAI,CAAA,CAAE,GAClBC,IAAUD,EAAI,CAAA,CAAE,GAChBE,IAAyB;AAAA,MAC7B,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,IACT,GACMC,IAAaH,EAAI,KAAK,GACtBI,IAAQJ,EAAI,EAAK;AACT,IAAAA,EAAI,EAAE;AAEpB,mBAAeK,IAAgB;AAC7B,MAAAN,EAAU,QAAQF,EAAM,IAAIA,EAAM,MAAM,IAAI,GAC5CI,EAAQ,QAAQ,MAAMJ,EAAM,MAAM,QAAO,GA0BzCO,EAAM,QAAQ;AAAA,IAChB;AAEA,WAAAE,EAAM,MAAMT,EAAM,KAAKQ,GAAe,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBzD,UAAME,IAAQC,EAAQ,GAChBC,IAAaC,EAAgBH,CAAK,GAClCI,IAAOC,GACPf,IAAQC,GAMRe,IAAQC,EAAS,EAAE,OAAOjB,EAAM,WAAY,CAAA,GAC5CI,IAAUD,EAAI,CAAA,CAAE,GAChBE,IAAyB;AAAA,MAC7B,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,IACT;AAEA,mBAAea,EAAaC,GAAS;AACnC,MAAAf,EAAQ,QAAQ,MAAMJ,EAAM,MAAM;AAAA,QAChCA,EAAM;AAAA,QACNY;AAAA,QACAO;AAAA,MACJ;AAAA,IACA;AAEA,aAASC,EAAWC,GAAOC,GAAM;;AAO/B,cAJIC,IAAAvB,EAAM,UAAN,QAAAuB,EAAa,uBAIb,CAACF,IACI,KAGFC,EAAK,KAAK,SAASD,CAAK;AAAA,IACjC;AAEA,aAASG,IAAS;AAChB,MAAAV,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAP;AAAA,MACE,MAAMT,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAgB,EAAM,QAAQhB,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB,GACAkB;;;;;;;;;;;;;;;;;;;;;;;;;;AC9EA,MAAMO,UAAwBC,EAAgB;AAAA,EAC5C,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUD,EAAU,YAAY,MAAM,CAAE,IAC7C,KAAK,aAAaA,EAAU,eAAe,MAAM;AAAA,IAAE,IACnD,KAAK,WAAW,KAAK,UAAUA,EAAU,UAAU,EAAK,GACxD,KAAK,gBAAgB,KAAK,UAAUA,EAAU,eAAe,EAAI,GACjE,KAAK,sBAAsBA,EAAU,uBAAuB,IAC5D,KAAK,UAAUE,GACf,KAAK,SAASC,GAEd,KAAK,qBAAqBH,CAAS;AAAA,EACpC;AAAA,EAED,gBAAgB;AACd,WAAO;AAAA,MACL,YAAY;AAAA,IAClB;AAAA,EACG;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-BnpixRqt.js","sources":["../src/framework/field/attachment/FieldDisplay.vue","../src/framework/field/attachment/FieldEditor.vue","../src/framework/field/attachment/config.js"],"sourcesContent":["<template>\n <div v-if=\"attachments.length > 0\">\n <div v-for=\"file in attachments\">\n <div class=\"file-name\">\n <el-icon color=\"#73767a\">\n <Document />\n </el-icon>\n <span class=\"name\">{{ file.name }}</span>\n <span class=\"file-type\">.{{ file.fileType }}</span>\n <el-icon color=\"#409eff\" size=\"16\" @click=\"download(file)\">\n <Download />\n </el-icon>\n <el-link\n v-if=\"file.isPreview\"\n type=\"primary\"\n :href=\"file.url\"\n target=\"_blank\"\n :underline=\"false\"\n >\n <el-icon size=\"16\">\n <View />\n </el-icon>\n </el-link>\n </div>\n </div>\n </div>\n <div v-else>\n <EmptyTip />\n </div>\n</template>\n\n<script setup>\nimport { ElIcon, ElLink } from \"element-plus\";\nimport { Document, Download, View } from \"@element-plus/icons-vue\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst attachments = ref([]);\n\nfunction download(file) {\n fetch(file.url)\n .then((res) => res.blob())\n .then((blob) => {\n const link = document.createElement(\"a\");\n if (blob.type == \"application/x-rar-compressed\") {\n link.href = file.url;\n } else {\n link.href = URL.createObjectURL(blob);\n }\n link.download = file.name;\n document.body.appendChild(link);\n link.click();\n });\n}\n\nfunction isPreview(fileType) {\n const imageExtensions = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"bmp\", \"pdf\"];\n return imageExtensions.includes(fileType);\n}\n\nwatch(\n () => props.row,\n () => {\n attachments.value = props.row[props.field.code].map((item) => {\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\n return {\n ...item,\n fileType: fileType,\n isPreview: isPreview(fileType),\n };\n });\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\">\n.file-name {\n display: flex;\n align-items: center;\n margin: 10px 0 5px 0;\n .file-type {\n height: 22px;\n line-height: 22px;\n margin-right: 5px;\n background: #eeeeee;\n border-radius: 4px;\n font-size: 12px;\n padding: 0 4px;\n }\n .name {\n margin: 0 5px;\n }\n}\n:deep(.el-icon) {\n margin: 0 5px;\n cursor: pointer;\n}\n</style>\n","<template>\n <AttachmentUploader\n :pics=\"_form.value\"\n :props=\"props.field.props ? props.field.props : {}\"\n @on-success=\"(file) => change(file, 'success')\"\n @on-remove=\"(file) => change(file, 'remove')\"\n @on-change=\"(file) => change(file, 'change')\"\n />\n</template>\n\n<script setup>\nimport { reactive, defineAsyncComponent } from \"vue\";\nimport { ElMessage } from \"element-plus\";\n\nconst AttachmentUploader = defineAsyncComponent(() => {\n return import(\"./AttachmentUploader.vue\");\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Array,\n field: Object,\n domainConfig: Object,\n disabled: Boolean,\n formData: Object,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction add(attachment) {\n _form.value = _form.value ? [..._form.value, attachment] : [attachment];\n}\n\nfunction remove(attachment) {\n const index = _form.value.findIndex((item) => item.id === attachment.id);\n _form.value.splice(index, 1);\n}\n\nasync function updateFileName(attachment) {\n const restApi = props.domainConfig.rest;\n const regex = /^[\\u4e00-\\u9fa5\\w-_]+$/;\n\n if (!regex.test(attachment.name)) {\n ElMessage({\n message: \"请勿输入特殊字符!\",\n type: \"warning\",\n });\n return;\n }\n\n await restApi.updateFilesName(attachment).then(() => {\n ElMessage({\n message: \"附件名称已修改!\",\n type: \"success\",\n });\n });\n}\n\nfunction change(image, type) {\n if (type == \"success\") {\n add(image);\n emit(\"update:modelValue\", _form.value);\n return;\n }\n\n if (type == \"remove\") {\n remove(image);\n emit(\"update:modelValue\", _form.value);\n return;\n }\n\n if (type == \"change\") {\n updateFileName(image);\n return;\n }\n}\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class AttachmentFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.attachmentType = rawConfig.attachmentType;\n this.props = rawConfig.props;\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.checkValidProperties(rawConfig);\n }\n\n defaultConfig() {\n return {\n showInList: false,\n };\n }\n}\n"],"names":["props","__props","attachments","ref","download","file","res","blob","link","isPreview","fileType","watch","item","AttachmentUploader","defineAsyncComponent","emit","__emit","_form","reactive","add","attachment","remove","index","updateFileName","restApi","ElMessage","change","image","type","AttachmentFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-Bu0VHLBr.js","sources":["../src/framework/field/images/FieldDisplay.vue","../src/framework/field/images/config.js"],"sourcesContent":["<script setup>\nimport { ElSpace, ElImage } from \"element-plus\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\n\nconst url = ref(null);\nconst urls = ref([]);\n\nwatch(\n () => props.row,\n () => {\n const images = props.row[props.field.code];\n if (images) {\n urls.value = images.map((item) => item.url);\n url.value = urls.value[0];\n }\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <el-space v-if=\"props.row[props.field.code].length > 0\" wrap>\n <div\n v-for=\"image in props.row[props.field.code]\"\n class=\"image-card\"\n style=\"margin-bottom: 20px\"\n >\n <el-image\n v-if=\"image.url\"\n :src=\"image.url\"\n fit=\"contain\"\n :preview-src-list=\"urls\"\n class=\"image\"\n >\n <template #error>\n <div class=\"loading-error\">\n <div>图片加载失败</div>\n <div>{{ url }}</div>\n </div>\n </template>\n </el-image>\n <div v-else class=\"loading-error\">\n <div>暂无</div>\n </div>\n </div>\n </el-space>\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\">\n.image-card {\n width: 200px;\n height: 200px;\n display: flex;\n justify-content: center;\n align-items: center;\n background: #eee;\n border: 1px solid #ddd;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.image {\n width: 100%;\n height: 100%;\n}\n\n.loading-error {\n width: 100%;\n height: 100%;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n</style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class ImagesFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.props = rawConfig.props;\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.converter = this.defaultBy(rawConfig.converter, (raw) => raw);\n\n this.checkValidProperties(rawConfig);\n }\n\n defaultConfig() {\n return {\n showInList: false,\n };\n }\n}\n"],"names":["props","__props","url","ref","urls","watch","images","item","ImagesFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor","raw"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAKA,UAAMA,IAAQC,GASRC,IAAMC,EAAI,IAAI,GACdC,IAAOD,EAAI,CAAA,CAAE;AAEnB,WAAAE;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,MAAM;AACJ,cAAMM,IAASN,EAAM,IAAIA,EAAM,MAAM,IAAI;AACzC,QAAIM,MACFF,EAAK,QAAQE,EAAO,IAAI,CAACC,MAASA,EAAK,GAAG,GAC1CL,EAAI,QAAQE,EAAK,MAAM,CAAC;AAAA,MAE3B;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBe,MAAMI,UAA0BC,EAAgB;AAAA,EAC7D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,QAAQD,EAAU,OACvB,KAAK,UAAUE,GACf,KAAK,SAASC,GACd,KAAK,YAAY,KAAK,UAAUH,EAAU,WAAW,CAACI,MAAQA,CAAG,GAEjE,KAAK,qBAAqBJ,CAAS;AAAA,EACpC;AAAA,EAED,gBAAgB;AACd,WAAO;AAAA,MACL,YAAY;AAAA,IAClB;AAAA,EACG;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CGN5-J3g.js","sources":["../src/framework/field/time/FieldDisplay.vue","../src/framework/field/time/FieldEditor.vue","../src/framework/field/time/config.js"],"sourcesContent":["<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getTime() {\n const value = props.row[props.field.code];\n\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getTime, { immediate: true });\n</script>\n\n<template>\n <span v-if=\"!isEmpty\">\n {{ formattedValue }}\n </span>\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-time-picker\n v-model=\"_form.value\"\n :disabled=\"props.disabled\"\n :format=\"props.field.format\"\n :value-format=\"props.field.format\"\n @change=\"change\"\n >\n </el-time-picker>\n</template>\n\n<script setup>\nimport { ElTimePicker } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class TimeFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.width = this.computeWidth(rawConfig);\n\n this.checkValidProperties(rawConfig);\n }\n\n computeWidth(rawConfig) {\n if (rawConfig.width) {\n return rawConfig.width;\n }\n\n return 200;\n }\n}\n"],"names":["props","__props","isEmpty","ref","formattedValue","getTime","value","watch","emit","__emit","_form","reactive","change","TimeFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;AACvB,YAAMC,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AAExC,MAA2BM,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BJ,EAAQ,QAAQ,MAIhBE,EAAe,QAAQE,GACvBJ,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAK,EAAM,MAAMP,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;ACbnD,UAAMG,IAAOC,GACPT,IAAQC,GAKRS,IAAQC,EAAS,EAAE,OAAOX,EAAM,WAAY,CAAA;AAElD,aAASY,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMP,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAU,EAAM,QAAQV,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;AC7Be,MAAMa,UAAwBC,EAAgB;AAAA,EAC3D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GACd,KAAK,QAAQ,KAAK,aAAaH,CAAS,GAExC,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AAAA,EAED,aAAaA,GAAW;AACtB,WAAIA,EAAU,QACLA,EAAU,QAGZ;AAAA,EACR;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CVpuFBZU.js","sources":["../src/framework/field/row-id/config.js"],"sourcesContent":["import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\n\nexport default class RowIdFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.editable = () => false;\n this.isRouter = this.isRouter(rawConfig);\n this.rowQuery = rawConfig.rowQuery || (() => ({}));\n this.display = FieldDisplay;\n this.fixed = true;\n\n this.checkValidProperties(rawConfig);\n }\n\n isRouter(rawConfig) {\n const raw = rawConfig.isRouter;\n\n if (typeof raw == \"boolean\") {\n return () => raw;\n }\n\n if (typeof raw == \"function\") {\n return raw;\n }\n\n if (typeof raw == \"undefined\") {\n return () => true;\n }\n\n throw new Exception(`invalid isRouter : ${raw}`);\n }\n}\n"],"names":["RowIdFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","raw"],"mappings":";AAGe,MAAMA,UAAyBC,EAAgB;AAAA,EAC5D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,WAAW,MAAM,IACtB,KAAK,WAAW,KAAK,SAASD,CAAS,GACvC,KAAK,WAAWA,EAAU,aAAa,OAAO,CAAA,KAC9C,KAAK,UAAUE,GACf,KAAK,QAAQ,IAEb,KAAK,qBAAqBF,CAAS;AAAA,EACpC;AAAA,EAED,SAASA,GAAW;AAClB,UAAMG,IAAMH,EAAU;AAEtB,QAAI,OAAOG,KAAO;AAChB,aAAO,MAAMA;AAGf,QAAI,OAAOA,KAAO;AAChB,aAAOA;AAGT,QAAI,OAAOA,IAAO;AAChB,aAAO,MAAM;AAGf,UAAM,IAAI,UAAU,sBAAsBA,CAAG,EAAE;AAAA,EAChD;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CkOTyA6M.js","sources":["../src/framework/field/boolean/FieldDisplay.vue","../src/framework/field/boolean/FieldEditor.vue","../src/framework/field/boolean/config.js"],"sourcesContent":["<template>\n <span style=\"display: flex; align-items: center\">\n <el-icon v-if=\"value == true\" color=\"#2DAD28\" :size=\"24\">\n <SuccessFilled />\n </el-icon>\n <el-icon v-else-if=\"value == false\" color=\"#FF444A\" :size=\"24\">\n <CircleCloseFilled />\n </el-icon>\n <el-icon v-else color=\"#85888E\" :size=\"24\">\n <QuestionFilled />\n </el-icon>\n </span>\n</template>\n\n<script setup>\nimport { ElIcon } from \"element-plus\";\nimport { computed } from \"vue\";\nimport {\n SuccessFilled,\n CircleCloseFilled,\n QuestionFilled,\n} from \"@element-plus/icons-vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\n\nconst value = computed(() => {\n return props.row[props.field.code];\n});\n</script>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-switch\n v-model=\"_form.value\"\n :disabled=\"props.disabled\"\n :active-text=\"props.field?.elConfig?.activeText || '是'\"\n :inactive-text=\"props.field?.elConfig?.inactiveText || '否'\"\n :inline-prompt=\"\n props.field?.elConfig?.inlinePrompt === false ? false : true\n \"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElSwitch } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Boolean,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class BooleanFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.default = rawConfig.default || false;\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.formChange = rawConfig.formChange || (() => {});\n\n this.checkValidProperties(rawConfig);\n }\n}\n"],"names":["props","__props","value","computed","emit","__emit","_form","reactive","change","watch","BooleanFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;AAuBA,UAAMA,IAAQC,GASRC,IAAQC,EAAS,MACdH,EAAM,IAAIA,EAAM,MAAM,IAAI,CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBD,UAAMI,IAAOC,GACPL,IAAQC,GAKRK,IAAQC,EAAS,EAAE,OAAOP,EAAM,WAAY,CAAA;AAElD,aAASQ,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAG;AAAA,MACE,MAAMT,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAM,EAAM,QAAQN,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;;;AC/Be,MAAMU,UAA2BC,EAAgB;AAAA,EAC9D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUD,EAAU,WAAW,IACpC,KAAK,UAAUE,GACf,KAAK,SAASC,GACd,KAAK,aAAaH,EAAU,eAAe,MAAM;AAAA,IAAE,IAEnD,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CoRLR8yc.js","sources":["../src/framework/field/datetime/FieldDisplay.vue","../src/framework/field/datetime/FieldEditor.vue","../src/framework/field/datetime/config.js"],"sourcesContent":["<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getTime() {\n const value = props.row[props.field.code];\n\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getTime, { immediate: true });\n</script>\n\n<template>\n <span v-if=\"!isEmpty\">\n {{ formattedValue }}\n </span>\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-date-picker\n v-model=\"_form.value\"\n :disabled=\"props.disabled\"\n type=\"datetime\"\n format=\"YYYY-MM-DD HH:mm:ss\"\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n :placeholder=\"field.placeholder\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElDatePicker } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\">\n:deep(.el-date-editor) {\n width: 100% !important;\n}\n</style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class DatetimeFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.width = this.computeWidth(rawConfig);\n\n this.checkValidProperties(rawConfig);\n }\n\n computeWidth(rawConfig) {\n if (rawConfig.width) {\n return rawConfig.width;\n }\n\n return 200;\n }\n}\n"],"names":["props","__props","isEmpty","ref","formattedValue","getTime","value","watch","emit","__emit","_form","reactive","change","DatetimeFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;AACvB,YAAMC,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AAExC,MAA2BM,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BJ,EAAQ,QAAQ,MAIhBE,EAAe,QAAQE,GACvBJ,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAK,EAAM,MAAMP,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;ACZnD,UAAMG,IAAOC,GACPT,IAAQC,GAKRS,IAAQC,EAAS,EAAE,OAAOX,EAAM,WAAY,CAAA;AAElD,aAASY,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMP,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAU,EAAM,QAAQV,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;AC9Be,MAAMa,UAA4BC,EAAgB;AAAA,EAC/D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GACd,KAAK,QAAQ,KAAK,aAAaH,CAAS,GAExC,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AAAA,EAED,aAAaA,GAAW;AACtB,WAAIA,EAAU,QACLA,EAAU,QAGZ;AAAA,EACR;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-Cy9I3Yww.js","sources":["../src/framework/field/string/FieldDisplay.vue","../src/framework/field/string/FieldEditor.vue","../src/framework/field/string/config.js"],"sourcesContent":["<template>\n <span v-if=\"!isEmpty\"> {{ formattedValue }} </span>\n <EmptyTip v-else />\n</template>\n\n<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getName() {\n if (props.field?.formatter) {\n formattedValue.value = props.field.formatter(props.row);\n isEmpty.value = !formattedValue.value;\n return;\n }\n const fields = props.field.code.toString().split(\".\");\n const value = fields.reduce((acc, curr) => acc[curr], props.row);\n\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getName, { immediate: true });\n</script>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-input\n v-model=\"_form.value\"\n :type=\"field.type\"\n clearable\n :disabled=\"props.disabled\"\n :placeholder=\"field.placeholder\"\n @input=\"change\"\n >\n <template v-if=\"field.prefix\" #prefix>\n <div class=\"annotation\">{{ field.prefix }}</div>\n </template>\n <template v-if=\"field.suffix\" #suffix>\n <div class=\"annotation\">{{ field.suffix }}</div></template\n >\n </el-input>\n</template>\n\n<script setup>\nimport { ElInput } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: [Object, String, Number],\n field: Object,\n type: String,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\">\n.annotation {\n color: #606266;\n}\n</style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class StringFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.formatter = rawConfig.formatter;\n\n this.checkValidProperties(rawConfig);\n }\n}\n"],"names":["props","__props","isEmpty","ref","formattedValue","getName","_a","value","acc","curr","watch","emit","__emit","_form","reactive","change","StringFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;AASA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;;AACvB,WAAIC,IAAAN,EAAM,UAAN,QAAAM,EAAa,WAAW;AAC1B,QAAAF,EAAe,QAAQJ,EAAM,MAAM,UAAUA,EAAM,GAAG,GACtDE,EAAQ,QAAQ,CAACE,EAAe;AAChC;AAAA,MACD;AAED,YAAMG,IADSP,EAAM,MAAM,KAAK,WAAW,MAAM,GAAG,EAC/B,OAAO,CAACQ,GAAKC,MAASD,EAAIC,CAAI,GAAGT,EAAM,GAAG;AAE/D,MAA2BO,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BL,EAAQ,QAAQ,MAIhBE,EAAe,QAAQG,GACvBL,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAQ,EAAM,MAAMV,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;ACjBnD,UAAMM,IAAOC,GACPZ,IAAQC,GAMRY,IAAQC,EAAS,EAAE,OAAOd,EAAM,WAAY,CAAA;AAElD,aAASe,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMV,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAa,EAAM,QAAQb,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCe,MAAMgB,UAA0BC,EAAgB;AAAA,EAC7D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GACd,KAAK,YAAYH,EAAU,WAE3B,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CyTeIX36.js","sources":["../src/framework/field/json/FieldDisplay.vue","../src/framework/field/json/FieldEditor.vue","../src/framework/field/json/config.js"],"sourcesContent":["<script setup>\nimport { defineAsyncComponent, ref, watch } from \"vue\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\n\nconst JsonEditorVue = defineAsyncComponent(() => {\n return import(\"json-editor-vue\");\n});\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\n\nconst valid = ref(false);\nconst formattedValue = ref(\"加载中...\");\n\nwatch(\n () => props.row,\n () => {\n valid.value = false;\n const value = props.row[props.field.code];\n if (value === undefined || value === null) {\n return;\n }\n\n if (`${value}`.trim() === \"\") {\n return;\n }\n\n valid.value = true;\n formattedValue.value = value;\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <JsonEditorVue\n v-if=\"valid\"\n v-model=\"formattedValue\"\n mode=\"text\"\n :main-menu-bar=\"false\"\n :navigation-bar=\"false\"\n :read-only=\"true\"\n />\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <JsonEditorVue\n v-model=\"_form.value\"\n style=\"width: 100%; height: 300px\"\n mode=\"text\"\n :main-menu-bar=\"false\"\n :navigation-bar=\"false\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { reactive, watch, defineAsyncComponent } from \"vue\";\n\nconst JsonEditorVue = defineAsyncComponent(() => {\n return import(\"json-editor-vue\");\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Object,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change(value) {\n _form.value = value.text;\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class JsonFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n\n this.checkValidProperties(rawConfig);\n }\n\n defaultConfig() {\n return {\n showInList: false,\n };\n }\n}\n"],"names":["JsonEditorVue","defineAsyncComponent","props","__props","valid","ref","formattedValue","watch","value","emit","__emit","_form","reactive","change","JsonFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;AAIA,UAAMA,IAAgBC,EAAqB,MAClC,OAAO,iBAAiB,CAChC,GAEKC,IAAQC,GASRC,IAAQC,EAAI,EAAK,GACjBC,IAAiBD,EAAI,QAAQ;AAEnC,WAAAE;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAE,EAAM,QAAQ;AACd,cAAMI,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AACxC,QAA2BM,KAAU,QAIjC,GAAGA,CAAK,GAAG,KAAI,MAAO,OAI1BJ,EAAM,QAAQ,IACdE,EAAe,QAAQE;AAAA,MACxB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;;;;;;;;ACvBA,UAAMR,IAAgBC,EAAqB,MAClC,OAAO,iBAAiB,CAChC,GAEKQ,IAAOC,GACPR,IAAQC,GAKRQ,IAAQC,EAAS,EAAE,OAAOV,EAAM,WAAY,CAAA;AAElD,aAASW,EAAOL,GAAO;AACrB,MAAAG,EAAM,QAAQH,EAAM,MACpBC,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAJ;AAAA,MACE,MAAML,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAS,EAAM,QAAQT,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;ACjCe,MAAMY,UAAwBC,EAAgB;AAAA,EAC3D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GAEd,KAAK,qBAAqBH,CAAS;AAAA,EACpC;AAAA,EAED,gBAAgB;AACd,WAAO;AAAA,MACL,YAAY;AAAA,IAClB;AAAA,EACG;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-DNjYwWf2.js","sources":["../src/framework/field/belongs-to/FieldDisplay.vue","../src/framework/field/belongs-to/FieldEditor.vue","../src/framework/field/belongs-to/config.js"],"sourcesContent":["<template>\n <span>\n <el-icon v-if=\"loading\" class=\"loading\"><Loading /></el-icon>\n <EmptyTip v-else-if=\"isEmpty\" />\n <RouterLink\n v-else-if=\"isRouter(row)\"\n class=\"bld-link mono-data\"\n :to=\"routeTo\"\n >\n {{ displayName }}\n </RouterLink>\n <div v-else>{{ displayName }}</div>\n </span>\n</template>\n\n<script setup>\nimport { ElIcon } from \"element-plus\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { useRoute } from \"vue-router\";\nimport { snakeToCamel } from \"../../utils/str\";\nimport { Loading } from \"@element-plus/icons-vue\";\nimport { getDomainConfig } from \"../../config-loader\";\nimport { computed, ref, watch } from \"vue\";\nimport { setupRouteQuery } from \"../../utils/route-query.js\";\nimport { domainFieldWarning } from \"../../utils/deprecator\";\n\nconst route = useRoute();\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst domain = props.field.belongsTo;\nconst side = route.meta.side;\nconst domainId = props.row[props.field.code];\n\nconst routeTo = computed(() => {\n return {\n path: `/${side}/${domain}/${domainId}`,\n query: { ...setupRouteQuery(route), ...props.field.rowQuery(props.row) },\n };\n});\nconst loading = ref(true);\nconst isEmpty = ref(false);\nconst displayName = ref(\"\");\nlet formatNameFunc = null;\nconst restPromise = getDomainConfig(side, domain).then((config) => {\n formatNameFunc = config.formatName;\n return Promise.resolve(config.rest);\n});\n\nfunction isRouter(isRouter) {\n return (\n props.field.isRouter(props.row, setupRouteQuery(route)) &&\n !setupRouteQuery(route)[props.field.code]\n );\n}\n\nfunction getItem() {\n restPromise.then((restApi) => {\n loading.value = true;\n\n const domainId = props.row[props.field.code];\n const domainName = props.row[snakeToCamel(`${domain}-name`)];\n\n if (!domainId) {\n setDisplayName(false);\n loading.value = false;\n return;\n }\n\n if (domainId && domainName) {\n setDisplayName({ id: domainId, name: domainName });\n loading.value = false;\n return;\n }\n\n // 支持控制不调用详情接口(适用于列表/详情返回了要展示的名称,或者展示的内容不需要调用详情接口)\n // 如果列表/详情有返回要显示的name可以把字段名传到codeName中,如userName,或者传formatter方法自定义要展示的内容\n if (props.field?.notGetOne) {\n setDisplayName({\n id: domainId,\n name: props.field.codeName ? props.row[props.field.codeName] : \"\",\n });\n loading.value = false;\n return;\n }\n\n const item = { id: domainId };\n restApi\n .getOne(item)\n .then((data) => {\n setDisplayName(data.data);\n loading.value = false;\n })\n .catch((e) => {\n console.log(e);\n });\n });\n}\n\nfunction setDisplayName(data) {\n isEmpty.value = false;\n if (props.field.showName) {\n domainFieldWarning(\n props.field.domain,\n props.field.code,\n \"showName 即将废弃,请使用 formatter\",\n );\n displayName.value = data[props.field.showName];\n return;\n }\n\n if (props.field.formatter) {\n displayName.value = props.field.formatter(data, props.row);\n return;\n }\n\n if (data.id && data.name) {\n displayName.value = data.name;\n return;\n }\n\n if (!data) {\n isEmpty.value = true;\n return;\n }\n\n displayName.value = formatNameFunc(data);\n}\n\nwatch(() => props.row, getItem, { immediate: true });\n</script>\n\n<style scoped lang=\"scss\">\n.loading {\n animation: rotating 2s linear infinite;\n}\n</style>\n","<template>\n <el-select\n v-model=\"_form.value\"\n style=\"width: 100%\"\n filterable\n reserve-keyword\n remote-show-suffix\n clearable\n fit-input-width\n :multiple=\"props.field.multiple\"\n :disabled=\"props.disabled\"\n placeholder=\"\"\n remote\n :remote-method=\"remoteSearch\"\n @change=\"change\"\n >\n <template v-for=\"option in options\" :key=\"option.code\">\n <el-option\n :label=\"option.name\"\n :value=\"option.code\"\n :title=\"option.name\"\n :disabled=\"option.disabled\"\n />\n </template>\n </el-select>\n</template>\n\n<script setup>\nimport { ElSelect, ElOption } from \"element-plus\";\nimport { reactive, watch, ref } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Number,\n field: Object,\n disabled: Boolean,\n formData: Object,\n});\nconst _form = reactive({ value: props.modelValue });\nconst options = ref([]);\n\nasync function remoteSearch(keyword) {\n options.value = await props.field.options(\n props.formData,\n routeQuery,\n keyword,\n );\n}\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n\nremoteSearch();\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nclass BelongsToFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.belongsTo = rawConfig.belongsTo;\n this.formChange = rawConfig.formChange || (() => {});\n this.isRouter = this.isRouter(rawConfig);\n this.options = rawConfig.options || (() => [{ code: 0, name: \"未实现\" }]);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.showName = rawConfig.showName;\n this.formatter = rawConfig.formatter;\n this.rowQuery = rawConfig.rowQuery || (() => ({}));\n this.notGetOne = rawConfig.notGetOne || false;\n this.codeName = rawConfig.codeName || \"\";\n this.checkValidProperties(rawConfig);\n }\n\n isRouter(rawConfig) {\n const raw = rawConfig.isRouter;\n\n if (typeof raw == \"boolean\") {\n return () => raw;\n }\n\n if (typeof raw == \"function\") {\n return raw;\n }\n\n if (typeof raw == \"undefined\") {\n return () => true;\n }\n\n throw new Exception(`invalid isRouter : ${raw}`);\n }\n}\n\nexport default BelongsToFieldConfig;\n"],"names":["route","useRoute","props","__props","domain","side","domainId","routeTo","computed","setupRouteQuery","loading","ref","isEmpty","displayName","formatNameFunc","restPromise","getDomainConfig","config","isRouter","getItem","restApi","domainName","snakeToCamel","setDisplayName","_a","item","data","e","domainFieldWarning","watch","routeQuery","emit","__emit","_form","reactive","options","remoteSearch","keyword","change","BelongsToFieldConfig","BaseFieldConfig","rawConfig","FieldDisplay","FieldEditor","raw"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-Dd3jwmiE.js","sources":["../src/framework/field/image/FieldDisplay.vue","../src/framework/field/image/FieldEditor.vue","../src/framework/field/image/config.js"],"sourcesContent":["<script setup>\nimport { ElImage } from \"element-plus\";\nimport { watch, ref, onMounted } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n mode: {\n type: String,\n },\n});\n\n// const url = ref(null);\n// const urls = ref([]);\nconst imgUrl = ref(\"\");\n\nwatch(\n () => props.row,\n () => {\n if (!props.field.waterMark) {\n imgUrl.value = props.row[props.field.code];\n } else {\n imgUrl.value = addwaterMark(\n props.row[props.field.code],\n props.field.waterMark,\n );\n }\n },\n { immediate: true },\n);\n\n// 将img内容绘制到canvas画布\nfunction imgToCanvas(img) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const context = canvas.getContext(\"2d\");\n context.drawImage(img, 0, 0);\n return canvas;\n}\n\n// canvas画布上绘制水印并转换为blob对象\nfunction waterMark(canvas, waterMarkVal) {\n return new Promise((resolve) => {\n const ctx = canvas.getContext(\"2d\");\n // 绘制水印 canvas\n const canvasWater = drawWaterCanvas(waterMarkVal);\n // 绘制重复的水印\n ctx.fillStyle = ctx.createPattern(canvasWater, \"repeat\");\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL());\n });\n}\n\nfunction drawWaterCanvas(str) {\n const canvasWater = document.createElement(\"canvas\");\n canvasWater.width = 500;\n canvasWater.height = 200;\n const ctxWater = canvasWater.getContext(\"2d\");\n ctxWater.textAlign = \"left\";\n ctxWater.textBaseline = \"middle\";\n ctxWater.font = \"26px Microsoft Yahei\";\n ctxWater.fillStyle = \"rgba(0, 0, 0, 0.3)\";\n ctxWater.rotate((-20 * Math.PI) / 180);\n ctxWater.fillText(str, 10, 200);\n // ctxWater.fillText(new Date().toLocaleString(), 10, 300)\n return canvasWater;\n}\n\nfunction addwaterMark(url, waterMarkVal) {\n const img = new Image();\n img.crossOrigin = \"Anonymous\";\n img.src = url;\n img.onload = async () => {\n const canvas = imgToCanvas(img);\n const url = await waterMark(canvas, waterMarkVal);\n imgUrl.value = url;\n };\n}\n</script>\n\n<template>\n <div :class=\"`image-card ${props.mode}`\">\n <el-image\n v-if=\"imgUrl\"\n :src=\"imgUrl\"\n preview-teleported\n fit=\"contain\"\n :preview-src-list=\"[imgUrl]\"\n class=\"image\"\n >\n <template #error>\n <div class=\"loading-error\">\n <div>加载失败</div>\n <div>{{ imgUrl }}</div>\n </div>\n </template>\n </el-image>\n <div v-else class=\"loading-error\">\n <div>暂无</div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.image-card {\n width: 100%;\n height: 200px;\n display: flex;\n justify-content: center;\n align-items: center;\n // background: #eee;\n // border: 1px solid #ddd;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.image {\n width: 100%;\n height: 100%;\n}\n\n.list {\n height: 50px;\n}\n\n.extend {\n width: 200px;\n height: 200px;\n}\n\n.loading-error {\n width: 100%;\n height: 100%;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: var(--el-color-error);\n color: var(--el-color-white);\n}\n</style>\n","<template>\n <ImageUploader\n :image-url=\"_form.value\"\n :disabled=\"props.disabled\"\n :props=\"props.field.props\"\n @on-success=\"change\"\n />\n</template>\n\n<script setup>\nimport { reactive, defineAsyncComponent, watch } from \"vue\";\n\nconst ImageUploader = defineAsyncComponent(() => {\n return import(\"./ImageUploader.vue\");\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n type: String,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change(image) {\n emit(\"update:modelValue\", image);\n}\n\nwatch(\n () => props.modelValue,\n async () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class ImageFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.props = rawConfig.props || {};\n\n this.checkValidProperties(rawConfig);\n }\n}\n"],"names":["props","__props","imgUrl","ref","watch","addwaterMark","imgToCanvas","img","canvas","waterMark","waterMarkVal","resolve","ctx","canvasWater","drawWaterCanvas","str","ctxWater","url","ImageUploader","defineAsyncComponent","emit","__emit","_form","reactive","change","image","ImageFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAcRC,IAASC,EAAI,EAAE;AAErB,IAAAC;AAAA,MACE,MAAMJ,EAAM;AAAA,MACZ,MAAM;AACJ,QAAKA,EAAM,MAAM,YAGfE,EAAO,QAAQG;AAAA,UACbL,EAAM,IAAIA,EAAM,MAAM,IAAI;AAAA,UAC1BA,EAAM,MAAM;AAAA,QACpB,IALME,EAAO,QAAQF,EAAM,IAAIA,EAAM,MAAM,IAAI;AAAA,MAO5C;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;AAGA,aAASM,EAAYC,GAAK;AACxB,YAAMC,IAAS,SAAS,cAAc,QAAQ;AAC9C,aAAAA,EAAO,QAAQD,EAAI,OACnBC,EAAO,SAASD,EAAI,QACJC,EAAO,WAAW,IAAI,EAC9B,UAAUD,GAAK,GAAG,CAAC,GACpBC;AAAA,IACT;AAGA,aAASC,EAAUD,GAAQE,GAAc;AACvC,aAAO,IAAI,QAAQ,CAACC,MAAY;AAC9B,cAAMC,IAAMJ,EAAO,WAAW,IAAI,GAE5BK,IAAcC,EAAgBJ,CAAY;AAEhD,QAAAE,EAAI,YAAYA,EAAI,cAAcC,GAAa,QAAQ,GACvDD,EAAI,SAAS,GAAG,GAAGJ,EAAO,OAAOA,EAAO,MAAM,GAC9CG,EAAQH,EAAO,UAAS,CAAE;AAAA,MAC9B,CAAG;AAAA,IACH;AAEA,aAASM,EAAgBC,GAAK;AAC5B,YAAMF,IAAc,SAAS,cAAc,QAAQ;AACnD,MAAAA,EAAY,QAAQ,KACpBA,EAAY,SAAS;AACrB,YAAMG,IAAWH,EAAY,WAAW,IAAI;AAC5C,aAAAG,EAAS,YAAY,QACrBA,EAAS,eAAe,UACxBA,EAAS,OAAO,wBAChBA,EAAS,YAAY,sBACrBA,EAAS,OAAQ,MAAM,KAAK,KAAM,GAAG,GACrCA,EAAS,SAASD,GAAK,IAAI,GAAG,GAEvBF;AAAA,IACT;AAEA,aAASR,EAAaY,GAAKP,GAAc;AACvC,YAAMH,IAAM,IAAI;AAChB,MAAAA,EAAI,cAAc,aAClBA,EAAI,MAAMU,GACVV,EAAI,SAAS,YAAY;AACvB,cAAMC,IAASF,EAAYC,CAAG,GACxBU,IAAM,MAAMR,EAAUD,GAAQE,CAAY;AAChD,QAAAR,EAAO,QAAQe;AAAA,MACnB;AAAA,IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtEA,UAAMC,IAAgBC,EAAqB,MAClC,OAAO,6BAAqB,CACpC,GAEKC,IAAOC,GACPrB,IAAQC,GAMRqB,IAAQC,EAAS,EAAE,OAAOvB,EAAM,WAAY,CAAA;AAElD,aAASwB,EAAOC,GAAO;AACrB,MAAAL,EAAK,qBAAqBK,CAAK;AAAA,IACjC;AAEA,WAAArB;AAAA,MACE,MAAMJ,EAAM;AAAA,MACZ,YAAY;AACV,QAAAsB,EAAM,QAAQtB,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;AC/Be,MAAM0B,UAAyBC,EAAgB;AAAA,EAC5D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GACd,KAAK,QAAQH,EAAU,SAAS,CAAA,GAEhC,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-DhFx4vma.js","sources":["../src/framework/field/component/config.js"],"sourcesContent":["import BaseFieldConfig from \"../base-field-config\";\n\nexport default class ComponentFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.component = rawConfig.component;\n this.display = rawConfig.component;\n this.editor = rawConfig.component;\n\n this.checkValidProperties(rawConfig);\n }\n}\n"],"names":["ComponentFieldConfig","BaseFieldConfig","rawConfig","domain"],"mappings":";AAEe,MAAMA,UAA6BC,EAAgB;AAAA,EAChE,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,YAAYD,EAAU,WAC3B,KAAK,UAAUA,EAAU,WACzB,KAAK,SAASA,EAAU,WAExB,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-DvLe94XY.js","sources":["../src/framework/field/cascader/FieldDisplay.vue","../src/framework/field/cascader/FieldEditor.vue","../src/framework/field/cascader/config.js"],"sourcesContent":["<template>\n <div>\n <span v-if=\"!isEmpty\">\n {{ formattedValue }}\n </span>\n <EmptyTip v-else />\n <!-- edit -->\n </div>\n</template>\n\n<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getName() {\n const value = props.row[props.field.code];\n\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getName, { immediate: true });\n</script>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-cascader\n v-model=\"_form.value\"\n :props=\"props.field.props\"\n :options=\"options\"\n clearable\n style=\"width: 100%\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElCascader } from \"element-plus\";\nimport { reactive, watch, ref } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Array,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\nconst options = ref([]);\n\nasync function remoteSearch(keyword) {\n options.value = await props.field.options(\n props.formData,\n routeQuery,\n keyword,\n );\n}\n\nremoteSearch();\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nclass CascaderFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.props = rawConfig.props || (() => {});\n this.formChange = rawConfig.formChange || (() => {});\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.multiple = this.defaultBy(rawConfig.multiple, false);\n this.options = rawConfig.options || (() => [{ id: 0, name: \"未实现\" }]);\n\n this.checkValidProperties(rawConfig);\n }\n}\n\nexport default CascaderFieldConfig;\n"],"names":["props","__props","isEmpty","ref","formattedValue","getName","value","watch","route","useRoute","routeQuery","setupRouteQuery","emit","__emit","_form","reactive","options","remoteSearch","keyword","change","CascaderFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;;AAcA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;AACvB,YAAMC,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AAExC,MAA2BM,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BJ,EAAQ,QAAQ,MAIhBE,EAAe,QAAQE,GACvBJ,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAK,EAAM,MAAMP,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;;ACrBnD,UAAMG,IAAQC,EAAQ,GAChBC,IAAaC,EAAgBH,CAAK,GAElCI,IAAOC,GACPb,IAAQC,GAKRa,IAAQC,EAAS,EAAE,OAAOf,EAAM,WAAY,CAAA,GAC5CgB,IAAUb,EAAI,CAAA,CAAE;AAEtB,mBAAec,EAAaC,GAAS;AACnC,MAAAF,EAAQ,QAAQ,MAAMhB,EAAM,MAAM;AAAA,QAChCA,EAAM;AAAA,QACNU;AAAA,QACAQ;AAAA,MACJ;AAAA,IACA;AAEA,IAAAD;AAEA,aAASE,IAAS;AAChB,MAAAP,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAP;AAAA,MACE,MAAMP,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAc,EAAM,QAAQd,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;AC7CA,MAAMoB,UAA4BC,EAAgB;AAAA,EAChD,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,QAAQD,EAAU,UAAU,MAAM;AAAA,IAAE,IACzC,KAAK,aAAaA,EAAU,eAAe,MAAM;AAAA,IAAE,IACnD,KAAK,UAAUE,GACf,KAAK,SAASC,GACd,KAAK,WAAW,KAAK,UAAUH,EAAU,UAAU,EAAK,GACxD,KAAK,UAAUA,EAAU,YAAY,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,MAAK,CAAE,IAElE,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-HHs-1vYi.js","sources":["../src/framework/field/date/FieldDisplay.vue","../src/framework/field/date/FieldEditor.vue","../src/framework/field/date/config.js"],"sourcesContent":["<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getTime() {\n const value = props.row[props.field.code];\n\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getTime, { immediate: true });\n</script>\n\n<template>\n <span v-if=\"!isEmpty\">\n {{ formattedValue }}\n </span>\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-date-picker\n v-model=\"_form.value\"\n :disabled=\"props.disabled\"\n type=\"date\"\n format=\"YYYY-MM-DD\"\n value-format=\"YYYY-MM-DD\"\n :placeholder=\"field.placeholder\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElDatePicker } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class DateFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.width = this.computeWidth(rawConfig);\n\n this.checkValidProperties(rawConfig);\n }\n\n computeWidth(rawConfig) {\n if (rawConfig.width) {\n return rawConfig.width;\n }\n\n return 200;\n }\n}\n"],"names":["props","__props","isEmpty","ref","formattedValue","getTime","value","watch","emit","__emit","_form","reactive","change","DateFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;AACvB,YAAMC,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AAExC,MAA2BM,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BJ,EAAQ,QAAQ,MAIhBE,EAAe,QAAQE,GACvBJ,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAK,EAAM,MAAMP,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;ACZnD,UAAMG,IAAOC,GACPT,IAAQC,GAKRS,IAAQC,EAAS,EAAE,OAAOX,EAAM,WAAY,CAAA;AAElD,aAASY,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMP,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAU,EAAM,QAAQV,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;AC9Be,MAAMa,UAAwBC,EAAgB;AAAA,EAC3D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GACd,KAAK,QAAQ,KAAK,aAAaH,CAAS,GAExC,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AAAA,EAED,aAAaA,GAAW;AACtB,WAAIA,EAAU,QACLA,EAAU,QAGZ;AAAA,EACR;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-QcC384MA.js","sources":["../src/framework/field/input-number/FieldDisplay.vue","../src/framework/field/input-number/FieldEditor.vue","../src/framework/field/input-number/config.js"],"sourcesContent":["<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getName() {\n const value = props.row[props.field.code];\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getName, { immediate: true });\n</script>\n\n<template>\n <span v-if=\"!isEmpty\">\n {{ formattedValue }}\n </span>\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-input-number\n v-model=\"_form.value\"\n :disabled=\"props.disabled\"\n :min=\"props.field.min\"\n :max=\"props.field.max\"\n :step=\"props.field.step\"\n :precision=\"props.field.precision\"\n :step-atrictly=\"props.field.stepAtrictly\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElInputNumber } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n type: String,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class InputNumberConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.min = rawConfig.min;\n this.max = rawConfig.max;\n this.step = rawConfig.step || 1;\n this.precision = rawConfig.precision;\n this.stepAtrictly = rawConfig.stepAtrictly || false;\n\n this.checkValidProperties(rawConfig);\n }\n}\n"],"names":["props","__props","isEmpty","ref","formattedValue","getName","value","watch","emit","__emit","_form","reactive","change","InputNumberConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;AACvB,YAAMC,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AACxC,MAA2BM,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BJ,EAAQ,QAAQ,MAIhBE,EAAe,QAAQE,GACvBJ,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAK,EAAM,MAAMP,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;ACVnD,UAAMG,IAAOC,GACPT,IAAQC,GAMRS,IAAQC,EAAS,EAAE,OAAOX,EAAM,WAAY,CAAA;AAElD,aAASY,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMP,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAU,EAAM,QAAQV,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;;AChCe,MAAMa,UAA0BC,EAAgB;AAAA,EAC7D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GACd,KAAK,MAAMH,EAAU,KACrB,KAAK,MAAMA,EAAU,KACrB,KAAK,OAAOA,EAAU,QAAQ,GAC9B,KAAK,YAAYA,EAAU,WAC3B,KAAK,eAAeA,EAAU,gBAAgB,IAE9C,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-R1n9p5mL.js","sources":["../src/framework/field/switch/FieldDisplay.vue","../src/framework/field/switch/FieldEditor.vue","../src/framework/field/switch/config.js"],"sourcesContent":["<template>\n <span style=\"display: flex; align-items: center\">\n <el-switch\n v-model=\"value\"\n size=\"small\"\n :disabled=\"isDeleted ? true : false\"\n :before-change=\"($event) => switchChange(row, field.label)\"\n />\n </span>\n</template>\n\n<script setup>\nimport { ElSwitch } from \"element-plus\";\nimport { computed, ref } from \"vue\";\n\nconst emit = defineEmits([\"enable\"]);\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isDeleted = ref(props.row.deletedAt);\n\nfunction switchChange(row, label) {\n row.label = label;\n return new Promise((resolve, reject) => {\n emit(\"enable\", row);\n });\n}\n\nconst value = computed(() => {\n return props.row[props.field.code];\n});\n</script>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-switch\n v-model=\"_form.value\"\n :disabled=\"props.disabled\"\n @change=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElSwitch } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: Boolean,\n field: Object,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class SwitchFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.formChange = rawConfig.formChange || (() => {});\n this.default = rawConfig.default || false;\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n\n this.checkValidProperties(rawConfig);\n }\n}\n"],"names":["emit","__emit","props","__props","isDeleted","ref","switchChange","row","label","resolve","reject","value","computed","_form","reactive","change","watch","SwitchFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;;AAeA,UAAMA,IAAOC,GACPC,IAAQC,GAQRC,IAAYC,EAAIH,EAAM,IAAI,SAAS;AAEzC,aAASI,EAAaC,GAAKC,GAAO;AAChC,aAAAD,EAAI,QAAQC,GACL,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,QAAAV,EAAK,UAAUO,CAAG;AAAA,MACtB,CAAG;AAAA,IACH;AAEA,UAAMI,IAAQC,EAAS,MACdV,EAAM,IAAIA,EAAM,MAAM,IAAI,CAClC;;;;;;;;;;;;;;;;;;;;ACvBD,UAAMF,IAAOC,GACPC,IAAQC,GAKRU,IAAQC,EAAS,EAAE,OAAOZ,EAAM,WAAY,CAAA;AAElD,aAASa,IAAS;AAChB,MAAAf,EAAK,qBAAqBa,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAG;AAAA,MACE,MAAMd,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAW,EAAM,QAAQX,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;AC1Be,MAAMe,UAA0BC,EAAgB;AAAA,EAC7D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,aAAaD,EAAU,eAAe,MAAM;AAAA,IAAE,IACnD,KAAK,UAAUA,EAAU,WAAW,IACpC,KAAK,UAAUE,GACf,KAAK,SAASC,GAEd,KAAK,qBAAqBH,CAAS;AAAA,EACpC;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-aPvPNn1F.js","sources":["../src/framework/field/text/FieldDisplay.vue","../src/framework/field/text/FieldEditor.vue","../src/framework/field/text/config.js"],"sourcesContent":["<script setup>\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\n\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst isEmpty = ref(false);\nconst formattedValue = ref(\"...\");\n\nasync function getName() {\n const value = props.row[props.field.code];\n if (value === undefined || value === null) {\n isEmpty.value = true;\n } else if (`${value}`.trim() === \"\") {\n isEmpty.value = true;\n } else {\n formattedValue.value = value;\n isEmpty.value = false;\n }\n}\n\nwatch(() => props.row, getName, { immediate: true });\n</script>\n\n<template>\n <span v-if=\"!isEmpty\">\n {{ formattedValue }}\n </span>\n <EmptyTip v-else />\n</template>\n\n<style scoped lang=\"scss\"></style>\n","<template>\n <el-input\n v-model=\"_form.value\"\n type=\"textarea\"\n :rows=\"5\"\n clearable\n :disabled=\"props.disabled\"\n :placeholder=\"field.placeholder\"\n @input=\"change\"\n />\n</template>\n\n<script setup>\nimport { ElInput } from \"element-plus\";\nimport { reactive, watch } from \"vue\";\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: String,\n field: Object,\n type: String,\n disabled: Boolean,\n});\nconst _form = reactive({ value: props.modelValue });\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nexport default class TextFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n\n this.checkValidProperties(rawConfig);\n }\n\n defaultConfig() {\n return {\n showInList: false,\n };\n }\n}\n"],"names":["props","__props","isEmpty","ref","formattedValue","getName","value","watch","emit","__emit","_form","reactive","change","TextFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAQRC,IAAUC,EAAI,EAAK,GACnBC,IAAiBD,EAAI,KAAK;AAEhC,mBAAeE,IAAU;AACvB,YAAMC,IAAQN,EAAM,IAAIA,EAAM,MAAM,IAAI;AACxC,MAA2BM,KAAU,QAE1B,GAAGA,CAAK,GAAG,KAAI,MAAO,KAD/BJ,EAAQ,QAAQ,MAIhBE,EAAe,QAAQE,GACvBJ,EAAQ,QAAQ;AAAA,IAEpB;AAEA,WAAAK,EAAM,MAAMP,EAAM,KAAKK,GAAS,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;ACXnD,UAAMG,IAAOC,GACPT,IAAQC,GAMRS,IAAQC,EAAS,EAAE,OAAOX,EAAM,WAAY,CAAA;AAElD,aAASY,IAAS;AAChB,MAAAJ,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMP,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAU,EAAM,QAAQV,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB;;;;;;;;;;;;AC/Be,MAAMa,UAAwBC,EAAgB;AAAA,EAC3D,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUC,GACf,KAAK,SAASC,GAEd,KAAK,qBAAqBH,CAAS;AAAA,EACpC;AAAA,EAED,gBAAgB;AACd,WAAO;AAAA,MACL,YAAY;AAAA,IAClB;AAAA,EACG;AACH;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-lUL3nYIJ.js","sources":["../src/framework/field/select/FieldDisplay.vue","../src/framework/field/select/FieldEditor.vue","../src/framework/field/select/config.js"],"sourcesContent":["<script setup>\nimport { ElTooltip } from \"element-plus\";\nimport color from \"../../utils/color\";\nimport EmptyTip from \"../../component/EmptyTip.vue\";\nimport { ref, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\nconst props = defineProps({\n field: {\n type: Object,\n },\n row: {\n type: Object,\n },\n});\nconst invalidTip = ref(\"...\");\nconst found = ref(false);\nconst items = ref([]);\n\nasync function getSelectName() {\n const val = props.row[props.field.code];\n const label = props.field.label;\n if (val === undefined || val === null) {\n invalidTip.value = \"--\";\n found.value = false;\n return;\n }\n\n const options = await props.field.options(props.row, routeQuery);\n if (!options) {\n invalidTip.value = `<无>`;\n found.value = false;\n return;\n }\n\n let selectedOptions = [];\n if (props.field.multiple) {\n selectedOptions = options.filter((item) => val.includes(item.code));\n } else {\n selectedOptions = options.filter((item) => val === item.code);\n }\n\n if (selectedOptions.length === 0) {\n invalidTip.value = `--`;\n found.value = false;\n return;\n }\n\n items.value = selectedOptions.map((item) => ({\n bgColor: color.strToHexColor(`${item.code}-${item.name}`),\n code: item.code,\n name: item.name,\n }));\n\n found.value = true;\n}\n\nwatch(() => props.row, getSelectName, { immediate: true });\n</script>\n\n<template>\n <template v-if=\"found\">\n <div class=\"select-fields\">\n <el-tooltip\n v-for=\"item in items\"\n :content=\"`${item.name}`\"\n placement=\"top\"\n >\n <div class=\"select-field found\" :style=\"`background: ${item.bgColor}`\">\n {{ item.name }}\n </div>\n </el-tooltip>\n </div>\n </template>\n <EmptyTip v-else :text=\"invalidTip\" />\n</template>\n\n<style scoped lang=\"scss\">\n.select-fields {\n display: inline-block;\n line-height: inherit;\n}\n\n.select-field {\n font-size: 12px;\n padding: 0 6px;\n border-radius: 4px;\n}\n\n.found {\n color: #fff;\n}\n</style>\n","<template>\n <el-select\n v-model=\"_form.value\"\n style=\"width: 100%\"\n filterable\n reserve-keyword\n remote-show-suffix\n clearable\n fit-input-width\n :multiple=\"props.field.multiple\"\n :disabled=\"props.disabled\"\n :placeholder=\"field.placeholder\"\n remote\n :remote-method=\"remoteSearch\"\n @change=\"change\"\n >\n <template v-if=\"field.prefix\" #prefix>{{ field.prefix }}</template>\n <template v-for=\"option in options\" :key=\"option.code\">\n <el-option\n :label=\"option.name\"\n :value=\"option.code\"\n :title=\"option.name\"\n :disabled=\"option.disabled\"\n />\n </template>\n </el-select>\n</template>\n\n<script setup>\nimport { ElSelect, ElOption } from \"element-plus\";\nimport { reactive, watch, ref } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { setupRouteQuery } from \"../../utils/route-query\";\n\nconst route = useRoute();\nconst routeQuery = setupRouteQuery(route);\nconst emit = defineEmits([\"update:modelValue\"]);\nconst props = defineProps({\n modelValue: [String, Number, Array],\n field: Object,\n type: String,\n disabled: Boolean,\n formData: Object,\n});\nconst _form = reactive({ value: props.modelValue });\nconst options = ref([]);\n\nasync function remoteSearch(keyword) {\n options.value = await props.field.options(\n props.formData,\n routeQuery,\n keyword,\n );\n}\n\nfunction change() {\n emit(\"update:modelValue\", _form.value);\n}\n\nwatch(\n () => props.modelValue,\n () => {\n _form.value = props.modelValue;\n },\n { immediate: true },\n);\nremoteSearch();\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import BaseFieldConfig from \"../base-field-config\";\nimport FieldDisplay from \"./FieldDisplay.vue\";\nimport FieldEditor from \"./FieldEditor.vue\";\n\nclass SelectFieldConfig extends BaseFieldConfig {\n constructor(rawConfig, domain) {\n super(rawConfig, domain);\n this.options = rawConfig.options || (() => [{ code: 0, name: \"未实现\" }]);\n this.formChange = rawConfig.formChange || (() => {});\n this.display = FieldDisplay;\n this.editor = FieldEditor;\n this.multiple = this.defaultBy(rawConfig.multiple, false);\n\n this.checkValidProperties(rawConfig);\n }\n}\n\nexport default SelectFieldConfig;\n"],"names":["route","useRoute","routeQuery","setupRouteQuery","props","__props","invalidTip","ref","found","items","getSelectName","val","options","selectedOptions","item","color","watch","emit","__emit","_form","reactive","remoteSearch","keyword","change","SelectFieldConfig","BaseFieldConfig","rawConfig","domain","FieldDisplay","FieldEditor"],"mappings":";;;;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,EAAQ,GAChBC,IAAaC,EAAgBH,CAAK,GAClCI,IAAQC,GAQRC,IAAaC,EAAI,KAAK,GACtBC,IAAQD,EAAI,EAAK,GACjBE,IAAQF,EAAI,CAAA,CAAE;AAEpB,mBAAeG,IAAgB;AAC7B,YAAMC,IAAMP,EAAM,IAAIA,EAAM,MAAM,IAAI;AAEtC,UADcA,EAAM,MAAM,OACDO,KAAQ,MAAM;AACrC,QAAAL,EAAW,QAAQ,MACnBE,EAAM,QAAQ;AACd;AAAA,MACD;AAED,YAAMI,IAAU,MAAMR,EAAM,MAAM,QAAQA,EAAM,KAAKF,CAAU;AAC/D,UAAI,CAACU,GAAS;AACZ,QAAAN,EAAW,QAAQ,OACnBE,EAAM,QAAQ;AACd;AAAA,MACD;AAED,UAAIK,IAAkB,CAAA;AAOtB,UANIT,EAAM,MAAM,WACdS,IAAkBD,EAAQ,OAAO,CAACE,MAASH,EAAI,SAASG,EAAK,IAAI,CAAC,IAElED,IAAkBD,EAAQ,OAAO,CAACE,MAASH,MAAQG,EAAK,IAAI,GAG1DD,EAAgB,WAAW,GAAG;AAChC,QAAAP,EAAW,QAAQ,MACnBE,EAAM,QAAQ;AACd;AAAA,MACD;AAED,MAAAC,EAAM,QAAQI,EAAgB,IAAI,CAACC,OAAU;AAAA,QAC3C,SAASC,EAAM,cAAc,GAAGD,EAAK,IAAI,IAAIA,EAAK,IAAI,EAAE;AAAA,QACxD,MAAMA,EAAK;AAAA,QACX,MAAMA,EAAK;AAAA,MACZ,EAAC,GAEFN,EAAM,QAAQ;AAAA,IAChB;AAEA,WAAAQ,EAAM,MAAMZ,EAAM,KAAKM,GAAe,EAAE,WAAW,GAAI,CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BzD,UAAMV,IAAQC,EAAQ,GAChBC,IAAaC,EAAgBH,CAAK,GAClCiB,IAAOC,GACPd,IAAQC,GAORc,IAAQC,EAAS,EAAE,OAAOhB,EAAM,WAAY,CAAA,GAC5CQ,IAAUL,EAAI,CAAA,CAAE;AAEtB,mBAAec,EAAaC,GAAS;AACnC,MAAAV,EAAQ,QAAQ,MAAMR,EAAM,MAAM;AAAA,QAChCA,EAAM;AAAA,QACNF;AAAA,QACAoB;AAAA,MACJ;AAAA,IACA;AAEA,aAASC,IAAS;AAChB,MAAAN,EAAK,qBAAqBE,EAAM,KAAK;AAAA,IACvC;AAEA,WAAAH;AAAA,MACE,MAAMZ,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAe,EAAM,QAAQf,EAAM;AAAA,MACrB;AAAA,MACD,EAAE,WAAW,GAAM;AAAA,IACrB,GACAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA,MAAMG,UAA0BC,EAAgB;AAAA,EAC9C,YAAYC,GAAWC,GAAQ;AAC7B,UAAMD,GAAWC,CAAM,GACvB,KAAK,UAAUD,EAAU,YAAY,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,MAAK,CAAE,IACpE,KAAK,aAAaA,EAAU,eAAe,MAAM;AAAA,IAAE,IACnD,KAAK,UAAUE,GACf,KAAK,SAASC,GACd,KAAK,WAAW,KAAK,UAAUH,EAAU,UAAU,EAAK,GAExD,KAAK,qBAAqBA,CAAS;AAAA,EACpC;AACH;"}
|