kouxiangtang 0.1.29 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +411 -411
  2. package/dist/{AttachmentUploader-Gl4uwpi0.js → AttachmentUploader-kjI75NG4.js} +16 -16
  3. package/dist/AttachmentUploader-kjI75NG4.js.map +1 -0
  4. package/dist/{ImageUploader-Ecxbu5yB.js → ImageUploader-CDBMZ9Q4.js} +15 -15
  5. package/dist/ImageUploader-CDBMZ9Q4.js.map +1 -0
  6. package/dist/{ImagesUploader-DiaKghBH.js → ImagesUploader-DR1NdrIX.js} +7 -7
  7. package/dist/ImagesUploader-DR1NdrIX.js.map +1 -0
  8. package/dist/{RichTextEditor-bJlEkb34.js → RichTextEditor-M8WpX6JI.js} +2 -2
  9. package/dist/{RichTextEditor-bJlEkb34.js.map → RichTextEditor-M8WpX6JI.js.map} +1 -1
  10. package/dist/color-DbNhHNpt.js.map +1 -1
  11. package/dist/{config-Bmby6rfL.js → config-2BP5-eb_.js} +5 -5
  12. package/dist/config-2BP5-eb_.js.map +1 -0
  13. package/dist/{config-DQerJfRt.js → config-BAjlIeLU.js} +2 -2
  14. package/dist/config-BAjlIeLU.js.map +1 -0
  15. package/dist/{config-ys3nFgYd.js → config-BQByyFaI.js} +2 -2
  16. package/dist/config-BQByyFaI.js.map +1 -0
  17. package/dist/{config-BMdtWu5R.js → config-CQA1bx3f.js} +15 -15
  18. package/dist/config-CQA1bx3f.js.map +1 -0
  19. package/dist/{config-CEbwLzea.js → config-CVao0Cla.js} +6 -6
  20. package/dist/config-CVao0Cla.js.map +1 -0
  21. package/dist/{config-Dr_SXi5U.js → config-CVslr70e.js} +2 -2
  22. package/dist/config-CVslr70e.js.map +1 -0
  23. package/dist/{config-C8MFDKwG.js → config-C_d1djj4.js} +2 -2
  24. package/dist/config-C_d1djj4.js.map +1 -0
  25. package/dist/{config-CDG1L4Oi.js → config-CqR0uCa_.js} +3 -3
  26. package/dist/config-CqR0uCa_.js.map +1 -0
  27. package/dist/{config-DSE87t_O.js → config-Csw0On0x.js} +8 -8
  28. package/dist/config-Csw0On0x.js.map +1 -0
  29. package/dist/{config-yVymOXO_.js → config-D_FDegBc.js} +2 -2
  30. package/dist/config-D_FDegBc.js.map +1 -0
  31. package/dist/{config-Xk01hDVk.js → config-DbXMEYLj.js} +2 -2
  32. package/dist/config-DbXMEYLj.js.map +1 -0
  33. package/dist/{config-Bbs_ly6P.js → config-Dq4y7P21.js} +2 -2
  34. package/dist/config-Dq4y7P21.js.map +1 -0
  35. package/dist/{config-B04hLt3e.js → config-HKkdk6wZ.js} +3 -3
  36. package/dist/config-HKkdk6wZ.js.map +1 -0
  37. package/dist/{config-KtTeOyV6.js → config-LPjXlVUG.js} +2 -2
  38. package/dist/config-LPjXlVUG.js.map +1 -0
  39. package/dist/{config-BNxcHvPM.js → config-Ob9gEzh5.js} +12 -12
  40. package/dist/config-Ob9gEzh5.js.map +1 -0
  41. package/dist/{config-Dh16WhJb.js → config-czbw2bDq.js} +14 -14
  42. package/dist/config-czbw2bDq.js.map +1 -0
  43. package/dist/{config-ssH8d7K9.js → config-d7n2dlpo.js} +2 -2
  44. package/dist/config-d7n2dlpo.js.map +1 -0
  45. package/dist/{config-DrJPQ_iz.js → config-h20uQgYE.js} +11 -11
  46. package/dist/config-h20uQgYE.js.map +1 -0
  47. package/dist/{config-BSYmo88x.js → config-jR1X5xVh.js} +2 -2
  48. package/dist/config-jR1X5xVh.js.map +1 -0
  49. package/dist/{config-CE-gN7KM.js → config-z9izRzg4.js} +15 -15
  50. package/dist/config-z9izRzg4.js.map +1 -0
  51. package/dist/{index-lFCbFvdk.js → index-DXK7K7iB.js} +78 -83
  52. package/dist/index-DXK7K7iB.js.map +1 -0
  53. package/dist/kouxiangtang.js +1 -1
  54. package/dist/kouxiangtang.umd.cjs +4 -4
  55. package/dist/kouxiangtang.umd.cjs.map +1 -1
  56. package/dist/style.css +1 -1
  57. package/package.json +56 -56
  58. package/dist/AttachmentUploader-Gl4uwpi0.js.map +0 -1
  59. package/dist/ImageUploader-Ecxbu5yB.js.map +0 -1
  60. package/dist/ImagesUploader-DiaKghBH.js.map +0 -1
  61. package/dist/config-B04hLt3e.js.map +0 -1
  62. package/dist/config-BMdtWu5R.js.map +0 -1
  63. package/dist/config-BNxcHvPM.js.map +0 -1
  64. package/dist/config-BSYmo88x.js.map +0 -1
  65. package/dist/config-Bbs_ly6P.js.map +0 -1
  66. package/dist/config-Bmby6rfL.js.map +0 -1
  67. package/dist/config-C8MFDKwG.js.map +0 -1
  68. package/dist/config-CDG1L4Oi.js.map +0 -1
  69. package/dist/config-CE-gN7KM.js.map +0 -1
  70. package/dist/config-CEbwLzea.js.map +0 -1
  71. package/dist/config-DQerJfRt.js.map +0 -1
  72. package/dist/config-DSE87t_O.js.map +0 -1
  73. package/dist/config-Dh16WhJb.js.map +0 -1
  74. package/dist/config-DrJPQ_iz.js.map +0 -1
  75. package/dist/config-Dr_SXi5U.js.map +0 -1
  76. package/dist/config-KtTeOyV6.js.map +0 -1
  77. package/dist/config-Xk01hDVk.js.map +0 -1
  78. package/dist/config-ssH8d7K9.js.map +0 -1
  79. package/dist/config-yVymOXO_.js.map +0 -1
  80. package/dist/config-ys3nFgYd.js.map +0 -1
  81. package/dist/index-lFCbFvdk.js.map +0 -1
package/package.json CHANGED
@@ -1,56 +1,56 @@
1
- {
2
- "name": "kouxiangtang",
3
- "private": false,
4
- "version": "0.1.29",
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.31",
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-Gl4uwpi0.js","sources":["../src/framework/field/attachment/AttachmentUploader.vue"],"sourcesContent":["<script setup>\r\nimport {\r\n ElUpload,\r\n ElIcon,\r\n ElDialog,\r\n ElForm,\r\n ElFormItem,\r\n ElButton,\r\n ElInput,\r\n} from \"element-plus\";\r\nimport axios from \"axios\";\r\nimport http from \"../../utils/http\";\r\nimport { getConfig } from \"../../config-loader\";\r\nimport { ref, computed } from \"vue\";\r\nimport { ElLoading, ElMessage } from \"element-plus\";\r\nimport { Plus, Document, Close } from \"@element-plus/icons-vue\";\r\n\r\nconst emit = defineEmits([\"on-success\", \"on-remove\", \"on-change\"]);\r\nconst props = defineProps({\r\n pics: {\r\n type: Array,\r\n default() {\r\n return [];\r\n },\r\n },\r\n limit: { type: Number },\r\n props: {\r\n type: Object,\r\n default() {\r\n return {\r\n listType: \"picture-card\", //'text' | 'picture' | 'picture-card'\r\n limit: 5, //最多上传几个文件\r\n accept: \"image/*\",\r\n };\r\n },\r\n },\r\n});\r\n\r\nconst files = computed(() => {\r\n return props.pics.map((item) => {\r\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\r\n if (typeof item.name !== undefined) {\r\n item.fileType = fileType;\r\n return item;\r\n }\r\n\r\n if (item.url) {\r\n const parts = item.url.split(\"/\");\r\n const namedItem = {\r\n ...item,\r\n name: parts[parts.length - 1],\r\n fileType: fileType,\r\n };\r\n return namedItem;\r\n }\r\n\r\n return { ...item, name: item.id, fileType: fileType };\r\n });\r\n});\r\nconst dialogImageUrl = ref(\"\");\r\nconst dialogVisible = ref(false);\r\nconst imageUrl = ref(props);\r\nconst uploadUrl = getConfig().fileUploadUrl;\r\nconst header = {\r\n Authorization: `Bearer ${localStorage.getItem(\"token\")}`,\r\n};\r\nconst compressImg = (file) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n\r\n return new Promise(function (resolve, reject) {\r\n if (!file.type.startsWith(\"image/\")) {\r\n resolve(file);\r\n return false;\r\n }\r\n reader.onload = async (e) => {\r\n const img = new Image();\r\n img.src = e.target.result;\r\n img.onload = () => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => {\r\n const newFile = new File([blob], file.name, {\r\n type: file.type,\r\n lastModified: Date.now(),\r\n });\r\n resolve(newFile);\r\n },\r\n file.type,\r\n 0.5,\r\n );\r\n };\r\n };\r\n return false;\r\n });\r\n};\r\nconst handleRemoveSuccess = (uploadFile) => {\r\n if (uploadFile.status === \"success\") {\r\n if (props.props.deleteParams) {\r\n const paramsData = props.props.deleteParams?.data\r\n ? props.props.deleteParams?.data\r\n : {};\r\n http\r\n .remove(\r\n `${props.props.deleteParams.url}/${uploadFile.id}/attachment`,\r\n paramsData,\r\n paramsData,\r\n )\r\n .then(() => {\r\n emit(\"on-remove\", uploadFile);\r\n });\r\n } else {\r\n emit(\"on-remove\", uploadFile);\r\n }\r\n }\r\n};\r\nconst handleExceed = () => {\r\n ElMessage({\r\n message: `最多只能上传 ${props.props.limit} 个文件!`,\r\n type: \"warning\",\r\n });\r\n};\r\nconst handlePictureCardPreview = (uploadFile) => {\r\n dialogImageUrl.value = uploadFile.url;\r\n dialogVisible.value = true;\r\n};\r\nconst handleBeforeUpload = (file) => {\r\n const fileName = file.name.substring(0, file.name.lastIndexOf(\".\"));\r\n const regex = /^[\\u4e00-\\u9fa5\\w-_]+$/;\r\n if (!regex.test(fileName)) {\r\n ElMessage({\r\n message: \"请勿输入特殊字符!\",\r\n type: \"warning\",\r\n });\r\n return false;\r\n }\r\n compressImg(file).then((newFile) => {\r\n if (newFile.size / 1024 / 1024 < 5) {\r\n uploadRequest(newFile);\r\n return false;\r\n } else {\r\n ElMessage({\r\n message: \"上传大小不能超过 5MB!\",\r\n type: \"warning\",\r\n });\r\n return false;\r\n }\r\n });\r\n};\r\n\r\nfunction handleFileNameChange(file, index) {\r\n if (!file.name) {\r\n ElMessage({\r\n message: \"附件名称不能为空!\",\r\n type: \"warning\",\r\n });\r\n return;\r\n }\r\n emit(\"on-change\", file);\r\n}\r\n\r\nfunction uploadRequest(file) {\r\n ElLoading.service({ text: \"上传中,请稍后\", background: \"rgba(0,0,0,0.3)\" });\r\n return new Promise((resolve, reject) => {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n axios\r\n .post(uploadUrl, formData, {})\r\n .then((res) => {\r\n ElLoading.service().close();\r\n ElMessage({\r\n message: \"上传成功\",\r\n type: \"success\",\r\n });\r\n emit(\"on-success\", res.data.data);\r\n resolve(res.data);\r\n return false;\r\n })\r\n .catch(() => {\r\n ElLoading.service().close();\r\n ElMessage({\r\n message: \"上传失败\",\r\n type: \"warning\",\r\n });\r\n reject(\"Upload failed\");\r\n });\r\n });\r\n}\r\n</script>\r\n\r\n<template>\r\n <!-- 删除请求头加权限后请添加到组建中 :headers=\"header\"-->\r\n <el-upload\r\n :file-list=\"files\"\r\n :action=\"uploadUrl\"\r\n :limit=\"props.props.limit\"\r\n :accept=\"props.props.accept\"\r\n :list-type=\"props.props.listType\"\r\n :on-remove=\"handleRemoveSuccess\"\r\n :before-upload=\"handleBeforeUpload\"\r\n :on-exceed=\"handleExceed\"\r\n :on-preview=\"handlePictureCardPreview\"\r\n :multiple=\"true\"\r\n :http-request=\"\r\n () => {\r\n return false;\r\n }\r\n \"\r\n :show-file-list=\"props.props.listType !== 'text'\"\r\n :class=\"[\r\n 'upload-main',\r\n { 'disable-upload': files.length >= props.props.limit },\r\n ]\"\r\n @click.prevent\r\n >\r\n <template v-if=\"props.props.listType !== 'text'\">\r\n <el-icon :disabled=\"true\">\r\n <Plus />\r\n </el-icon>\r\n </template>\r\n <template v-else>\r\n <el-button class=\"upload-button\" type=\"primary\"> 上传附件 </el-button>\r\n </template>\r\n </el-upload>\r\n <el-dialog v-model=\"dialogVisible\">\r\n <img w-full :src=\"dialogImageUrl\" alt=\"Preview Image\" />\r\n </el-dialog>\r\n <el-form v-if=\"props.props.listType == 'text'\">\r\n <el-form-item v-for=\"(file, index) in files\" :key=\"index\" class=\"file-list\">\r\n <el-icon color=\"#73767a\" :size=\"14\">\r\n <Document />\r\n </el-icon>\r\n <el-input\r\n v-model=\"file.name\"\r\n @change=\"handleFileNameChange(file, index)\"\r\n />\r\n <span class=\"file-type\">.{{ file.fileType }}</span>\r\n <el-icon color=\"#73767a\" :size=\"12\" @click=\"handleRemoveSuccess(file)\">\r\n <Close />\r\n </el-icon>\r\n </el-form-item>\r\n </el-form>\r\n</template>\r\n<style scoped lang=\"scss\">\r\n:deep(.el-upload-list) {\r\n .el-upload-list__item-actions span {\r\n margin-left: 20px;\r\n }\r\n}\r\n\r\n.disable-upload {\r\n :deep(.el-upload--picture-card) {\r\n display: none !important;\r\n }\r\n\r\n :deep(.el-upload--text) {\r\n display: none !important;\r\n }\r\n\r\n :deep(.el-upload--picture) {\r\n display: none !important;\r\n }\r\n}\r\n.upload-main {\r\n flex-basis: 100%;\r\n}\r\n.file-list {\r\n display: flex;\r\n align-items: center;\r\n margin-top: 10px;\r\n .file-type {\r\n height: 22px;\r\n line-height: 22px;\r\n margin-right: 5px;\r\n background: #eeeeee;\r\n border-radius: 4px;\r\n font-size: 12px;\r\n padding: 0 4px;\r\n }\r\n :deep(.el-form-item__content) {\r\n display: contents;\r\n }\r\n :deep(.el-input__wrapper) {\r\n margin: 0 5px;\r\n }\r\n :deep(.el-input__inner) {\r\n height: 20px;\r\n line-height: 20px;\r\n }\r\n}\r\n</style>\r\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-Ecxbu5yB.js","sources":["../src/framework/field/image/ImageUploader.vue"],"sourcesContent":["<script setup>\r\nimport { ElUpload, ElImage, ElIcon } from \"element-plus\";\r\nimport axios from \"axios\";\r\nimport { getConfig } from \"../../config-loader\";\r\nimport { ElLoading, ElMessage } from \"element-plus\";\r\nimport { Plus, Delete, Loading } from \"@element-plus/icons-vue\";\r\n\r\nconst emit = defineEmits([\"on-success\"]);\r\nconst props = defineProps({\r\n imageUrl: { type: String },\r\n props: {\r\n type: Object,\r\n default() {\r\n return {\r\n accept: \"image/*\",\r\n tip: \"\",\r\n };\r\n },\r\n },\r\n});\r\nconst uploadUrl = getConfig().imageUploadUrl;\r\nconst header = {\r\n Authorization: `Bearer ${localStorage.getItem(\"token\")}`,\r\n};\r\nconst handleBeforeUpload = (uploadFile) => {\r\n const isLt2M = uploadFile.size / 1024 / 1024 < 5;\r\n if (!isLt2M) {\r\n ElMessage({\r\n message: \"上传大小不能超过 5MB!\",\r\n type: \"warning\",\r\n });\r\n return false;\r\n }\r\n};\r\nconst handleSuccess = (response) => {\r\n emit(\"on-success\", response.data.imageUrl);\r\n};\r\n\r\nfunction deleteImageUrl() {\r\n emit(\"on-success\", \"\");\r\n}\r\n\r\nfunction uploadRequest(file) {\r\n ElLoading.service({ text: \"上传中,请稍后\", background: \"rgba(0,0,0,0.3)\" });\r\n return new Promise((resolve, reject) => {\r\n const formData = new FormData();\r\n formData.append(\"image\", file.file);\r\n axios\r\n .post(uploadUrl, formData, {})\r\n .then((res) => {\r\n ElLoading.service().close();\r\n ElMessage({\r\n message: \"上传成功\",\r\n type: \"success\",\r\n });\r\n resolve(res.data);\r\n })\r\n .catch(() => {\r\n ElLoading.service().close();\r\n ElMessage({\r\n message: \"上传失败\",\r\n type: \"warning\",\r\n });\r\n reject(\"Upload failed\");\r\n });\r\n });\r\n}\r\n</script>\r\n\r\n<template>\r\n <!-- 删除请求头加权限后请添加到组建中 :headers=\"header\"-->\r\n <el-upload\r\n class=\"image-uploader\"\r\n :action=\"uploadUrl\"\r\n name=\"image\"\r\n :show-file-list=\"false\"\r\n :accept=\"props.props.accept\"\r\n :on-success=\"handleSuccess\"\r\n :before-upload=\"handleBeforeUpload\"\r\n :http-request=\"uploadRequest\"\r\n >\r\n <slot />\r\n <el-image\r\n v-if=\"props.imageUrl\"\r\n class=\"image\"\r\n :src=\"props.imageUrl\"\r\n fit=\"scale-down\"\r\n >\r\n <template #placeholder>\r\n <div class=\"image-slot\">\r\n <el-icon class=\"placeholder-icon\">\r\n <Loading />\r\n </el-icon>\r\n </div>\r\n </template>\r\n </el-image>\r\n <el-icon v-else class=\"uploader-icon\">\r\n <Plus />\r\n </el-icon>\r\n <el-icon\r\n v-if=\"props.imageUrl\"\r\n class=\"delete-icon\"\r\n @click.stop.prevent=\"deleteImageUrl\"\r\n >\r\n <Delete />\r\n </el-icon>\r\n <template v-if=\"props.props.tip\" #tip>\r\n <div class=\"el-upload__tip\">{{ props.props.tip }}</div>\r\n </template>\r\n </el-upload>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.image-uploader {\r\n :deep(.el-upload) {\r\n border: 1px dashed var(--el-border-color);\r\n border-radius: 6px;\r\n cursor: pointer;\r\n position: relative;\r\n overflow: hidden;\r\n transition: var(--el-transition-duration-fast);\r\n\r\n &:hover {\r\n border-color: var(--el-color-primary);\r\n }\r\n }\r\n\r\n .image {\r\n width: 146px;\r\n height: 146px;\r\n\r\n .placeholder-icon {\r\n width: 146px;\r\n height: 146px;\r\n font-size: 30px;\r\n color: #a7a7a7;\r\n }\r\n }\r\n\r\n .uploader-icon {\r\n font-size: 28px;\r\n color: #8c939d;\r\n width: 146px;\r\n height: 146px;\r\n text-align: center;\r\n }\r\n\r\n .delete-icon {\r\n font-size: 20px;\r\n color: #b7b4b4;\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n }\r\n}\r\n</style>\r\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-DiaKghBH.js","sources":["../src/framework/field/images/ImagesUploader.vue"],"sourcesContent":["<script setup>\r\nimport { ElUpload, ElDialog, ElIcon, ElButton } from \"element-plus\";\r\nimport { computed, ref } from \"vue\";\r\nimport { ElMessage } from \"element-plus\";\r\nimport { Plus } from \"@element-plus/icons-vue\";\r\nimport http from \"../../utils/http\";\r\n\r\nconst emit = defineEmits([\"on-remove\", \"on-upload\"]);\r\nconst dialogImageUrl = ref(\"\");\r\nconst dialogVisible = ref(false);\r\nconst props = defineProps({\r\n images: {\r\n type: Array,\r\n default() {\r\n return [];\r\n },\r\n },\r\n limit: { type: Number },\r\n props: {\r\n type: Object,\r\n default() {\r\n return {\r\n listType: \"picture-card\",\r\n limit: 5,\r\n accept: \"image/*\",\r\n tip: \"\",\r\n };\r\n },\r\n },\r\n});\r\n\r\nconst files = computed(() => {\r\n return props.images.map((item) => {\r\n if (!item?.url) {\r\n return { ...item, name: \"unknown\", fileType: \"unknown\" };\r\n }\r\n\r\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\r\n const parts = item.url.split(\"/\");\r\n const namedItem = {\r\n ...item,\r\n name: parts[parts.length - 1],\r\n fileType,\r\n };\r\n return namedItem;\r\n });\r\n});\r\n\r\nfunction onRemove(uploadFile) {\r\n if (props.props.deleteParams) {\r\n const paramsData = props.props.deleteParams?.data\r\n ? props.props.deleteParams?.data\r\n : {};\r\n http\r\n .remove(\r\n `${props.props.deleteParams.url}/${uploadFile.id}/attachment`,\r\n paramsData,\r\n paramsData,\r\n )\r\n .then(() => {\r\n emit(\"on-remove\", uploadFile);\r\n });\r\n } else {\r\n emit(\"on-remove\", uploadFile);\r\n }\r\n}\r\n\r\nfunction onExceed() {\r\n ElMessage({\r\n message: `最多只能上传 ${props.props.limit} 个文件!`,\r\n type: \"warning\",\r\n });\r\n}\r\n\r\nfunction onPreview(uploadFile) {\r\n dialogImageUrl.value = uploadFile.url;\r\n dialogVisible.value = true;\r\n}\r\n\r\nfunction beforeUpload(uploadFile) {\r\n const limitSize = 1024 * 1024 * 5;\r\n if (uploadFile.size > limitSize) {\r\n ElMessage({\r\n message: \"上传大小不能超过 5MB!\",\r\n type: \"warning\",\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction httpRequest(uploadFile) {\r\n const formData = new FormData();\r\n formData.append(\"file\", uploadFile.file);\r\n emit(\"on-upload\", formData);\r\n}\r\n</script>\r\n\r\n<template>\r\n <div>\r\n <el-upload\r\n :file-list=\"files\"\r\n :limit=\"props.props.limit\"\r\n :accept=\"props.props.accept\"\r\n :list-type=\"props.props.listType\"\r\n :on-remove=\"onRemove\"\r\n :on-exceed=\"onExceed\"\r\n :on-preview=\"onPreview\"\r\n :multiple=\"true\"\r\n :before-upload=\"beforeUpload\"\r\n :http-request=\"httpRequest\"\r\n :show-file-list=\"props.props.listType !== 'text'\"\r\n :class=\"[\r\n 'upload-main',\r\n { 'disable-upload': files.length >= props.props.limit },\r\n ]\"\r\n @click.prevent\r\n >\r\n <template v-if=\"props.props.listType !== 'text'\">\r\n <el-icon :disabled=\"true\">\r\n <Plus />\r\n </el-icon>\r\n </template>\r\n <template v-else>\r\n <el-button class=\"upload-button\" type=\"primary\"> 上传附件 </el-button>\r\n </template>\r\n <template v-if=\"props.props.tip\" #tip>\r\n <div class=\"el-upload__tip\">{{ props.props.tip }}</div>\r\n </template>\r\n </el-upload>\r\n <el-dialog v-model=\"dialogVisible\">\r\n <img w-full :src=\"dialogImageUrl\" alt=\"Preview Image\" />\r\n </el-dialog>\r\n </div>\r\n</template>\r\n<style scoped lang=\"scss\">\r\n:deep(.el-upload-list) {\r\n .el-upload-list__item-actions span {\r\n margin-left: 20px;\r\n }\r\n}\r\n\r\n.disable-upload {\r\n :deep(.el-upload--picture-card) {\r\n display: none !important;\r\n }\r\n\r\n :deep(.el-upload--text) {\r\n display: none !important;\r\n }\r\n\r\n :deep(.el-upload--picture) {\r\n display: none !important;\r\n }\r\n}\r\n.upload-main {\r\n flex-basis: 100%;\r\n}\r\n.file-list {\r\n display: flex;\r\n align-items: center;\r\n margin-top: 10px;\r\n .file-type {\r\n height: 22px;\r\n line-height: 22px;\r\n margin-right: 5px;\r\n background: #eeeeee;\r\n border-radius: 4px;\r\n font-size: 12px;\r\n padding: 0 4px;\r\n }\r\n :deep(.el-form-item__content) {\r\n display: contents;\r\n }\r\n :deep(.el-input__wrapper) {\r\n margin: 0 5px;\r\n }\r\n :deep(.el-input__inner) {\r\n height: 20px;\r\n line-height: 20px;\r\n }\r\n}\r\n</style>\r\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-B04hLt3e.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>\r\n <span>\r\n <el-icon v-if=\"loading\" class=\"loading\"><Loading /></el-icon>\r\n <EmptyTip v-else-if=\"isEmpty\" />\r\n <RouterLink\r\n v-else-if=\"isRouter(row)\"\r\n class=\"bld-link mono-data\"\r\n :to=\"routeTo\"\r\n >\r\n {{ displayName }}\r\n </RouterLink>\r\n <div v-else>{{ displayName }}</div>\r\n </span>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElIcon } from \"element-plus\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { snakeToCamel } from \"../../utils/str\";\r\nimport { Loading } from \"@element-plus/icons-vue\";\r\nimport { getDomainConfig } from \"../../config-loader\";\r\nimport { computed, ref, watch } from \"vue\";\r\nimport { setupRouteQuery } from \"../../utils/route-query.js\";\r\nimport { domainFieldWarning } from \"../../utils/deprecator\";\r\n\r\nconst route = useRoute();\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst domain = props.field.belongsTo;\r\nconst side = route.meta.side;\r\nconst domainId = props.row[props.field.code];\r\n\r\nconst routeTo = computed(() => {\r\n return {\r\n path: `/${side}/${domain}/${domainId}`,\r\n query: { ...setupRouteQuery(route), ...props.field.rowQuery(props.row) },\r\n };\r\n});\r\nconst loading = ref(true);\r\nconst isEmpty = ref(false);\r\nconst displayName = ref(\"\");\r\nlet formatNameFunc = null;\r\nconst restPromise = getDomainConfig(side, domain).then((config) => {\r\n formatNameFunc = config.formatName;\r\n return Promise.resolve(config.rest);\r\n});\r\n\r\nfunction isRouter(isRouter) {\r\n return (\r\n props.field.isRouter(props.row, setupRouteQuery(route)) &&\r\n !setupRouteQuery(route)[props.field.code]\r\n );\r\n}\r\n\r\nfunction getItem() {\r\n restPromise.then((restApi) => {\r\n loading.value = true;\r\n\r\n const domainId = props.row[props.field.code];\r\n const domainName = props.row[snakeToCamel(`${domain}-name`)];\r\n\r\n if (!domainId) {\r\n setDisplayName(false);\r\n loading.value = false;\r\n return;\r\n }\r\n\r\n if (domainId && domainName) {\r\n setDisplayName({ id: domainId, name: domainName });\r\n loading.value = false;\r\n return;\r\n }\r\n\r\n // 支持控制不调用详情接口(适用于列表/详情返回了要展示的名称,或者展示的内容不需要调用详情接口)\r\n // 如果列表/详情有返回要显示的name可以把字段名传到codeName中,如userName,或者传formatter方法自定义要展示的内容\r\n if (props.field?.notGetOne) {\r\n setDisplayName({\r\n id: domainId,\r\n name: props.field.codeName ? props.row[props.field.codeName] : \"\",\r\n });\r\n loading.value = false;\r\n return;\r\n }\r\n\r\n const item = { id: domainId };\r\n restApi\r\n .getOne(item)\r\n .then((data) => {\r\n setDisplayName(data.data);\r\n loading.value = false;\r\n })\r\n .catch((e) => {\r\n console.log(e);\r\n });\r\n });\r\n}\r\n\r\nfunction setDisplayName(data) {\r\n isEmpty.value = false;\r\n if (props.field.showName) {\r\n domainFieldWarning(\r\n props.field.domain,\r\n props.field.code,\r\n \"showName 即将废弃,请使用 formatter\",\r\n );\r\n displayName.value = data[props.field.showName];\r\n return;\r\n }\r\n\r\n if (props.field.formatter) {\r\n displayName.value = props.field.formatter(data, props.row);\r\n return;\r\n }\r\n\r\n if (data.id && data.name) {\r\n displayName.value = data.name;\r\n return;\r\n }\r\n\r\n if (!data) {\r\n isEmpty.value = true;\r\n return;\r\n }\r\n\r\n displayName.value = formatNameFunc(data);\r\n}\r\n\r\nwatch(() => props.row, getItem, { immediate: true });\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.loading {\r\n animation: rotating 2s linear infinite;\r\n}\r\n</style>\r\n","<template>\r\n <el-select\r\n v-model=\"_form.value\"\r\n style=\"width: 100%\"\r\n filterable\r\n reserve-keyword\r\n remote-show-suffix\r\n clearable\r\n fit-input-width\r\n :multiple=\"props.field.multiple\"\r\n :disabled=\"props.disabled\"\r\n placeholder=\"\"\r\n remote\r\n :remote-method=\"remoteSearch\"\r\n @change=\"change\"\r\n >\r\n <template v-for=\"option in options\" :key=\"option.code\">\r\n <el-option\r\n :label=\"option.name\"\r\n :value=\"option.code\"\r\n :title=\"option.name\"\r\n :disabled=\"option.disabled\"\r\n />\r\n </template>\r\n </el-select>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElSelect, ElOption } from \"element-plus\";\r\nimport { reactive, watch, ref } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Number,\r\n field: Object,\r\n disabled: Boolean,\r\n formData: Object,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\nconst options = ref([]);\r\n\r\nasync function remoteSearch(keyword) {\r\n options.value = await props.field.options(\r\n props.formData,\r\n routeQuery,\r\n keyword,\r\n );\r\n}\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n\r\nremoteSearch();\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nclass BelongsToFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.belongsTo = rawConfig.belongsTo;\r\n this.formChange = rawConfig.formChange || (() => {});\r\n this.isRouter = this.isRouter(rawConfig);\r\n this.options = rawConfig.options || (() => [{ code: 0, name: \"未实现\" }]);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.showName = rawConfig.showName;\r\n this.formatter = rawConfig.formatter;\r\n this.rowQuery = rawConfig.rowQuery || (() => ({}));\r\n this.notGetOne = rawConfig.notGetOne || false;\r\n this.codeName = rawConfig.codeName || \"\";\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n isRouter(rawConfig) {\r\n const raw = rawConfig.isRouter;\r\n\r\n if (typeof raw == \"boolean\") {\r\n return () => raw;\r\n }\r\n\r\n if (typeof raw == \"function\") {\r\n return raw;\r\n }\r\n\r\n if (typeof raw == \"undefined\") {\r\n return () => true;\r\n }\r\n\r\n throw new Exception(`invalid isRouter : ${raw}`);\r\n }\r\n}\r\n\r\nexport default BelongsToFieldConfig;\r\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-BMdtWu5R.js","sources":["../src/framework/field/select/FieldDisplay.vue","../src/framework/field/select/FieldEditor.vue","../src/framework/field/select/config.js"],"sourcesContent":["<script setup>\r\nimport { ElTooltip } from \"element-plus\";\r\nimport color from \"../../utils/color\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst invalidTip = ref(\"...\");\r\nconst found = ref(false);\r\nconst items = ref([]);\r\n\r\nasync function getSelectName() {\r\n const val = props.row[props.field.code];\r\n const label = props.field.label;\r\n if (val === undefined || val === null) {\r\n invalidTip.value = \"--\";\r\n found.value = false;\r\n return;\r\n }\r\n\r\n const options = await props.field.options(props.row, routeQuery);\r\n if (!options) {\r\n invalidTip.value = `<无>`;\r\n found.value = false;\r\n return;\r\n }\r\n\r\n let selectedOptions = [];\r\n if (props.field.multiple) {\r\n selectedOptions = options.filter((item) => val.includes(item.code));\r\n } else {\r\n selectedOptions = options.filter((item) => val === item.code);\r\n }\r\n\r\n if (selectedOptions.length === 0) {\r\n invalidTip.value = `--`;\r\n found.value = false;\r\n return;\r\n }\r\n\r\n items.value = selectedOptions.map((item) => ({\r\n bgColor: color.strToHexColor(`${item.code}-${item.name}`),\r\n code: item.code,\r\n name: item.name,\r\n }));\r\n\r\n found.value = true;\r\n}\r\n\r\nwatch(() => props.row, getSelectName, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <template v-if=\"found\">\r\n <div class=\"select-fields\">\r\n <el-tooltip\r\n v-for=\"item in items\"\r\n :content=\"`${item.name}`\"\r\n placement=\"top\"\r\n >\r\n <div class=\"select-field found\" :style=\"`background: ${item.bgColor}`\">\r\n {{ item.name }}\r\n </div>\r\n </el-tooltip>\r\n </div>\r\n </template>\r\n <EmptyTip v-else :text=\"invalidTip\" />\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.select-fields {\r\n display: inline-block;\r\n line-height: inherit;\r\n}\r\n\r\n.select-field {\r\n font-size: 12px;\r\n padding: 0 6px;\r\n border-radius: 4px;\r\n}\r\n\r\n.found {\r\n color: #fff;\r\n}\r\n</style>\r\n","<template>\r\n <el-select\r\n v-model=\"_form.value\"\r\n style=\"width: 100%\"\r\n filterable\r\n reserve-keyword\r\n remote-show-suffix\r\n clearable\r\n fit-input-width\r\n :multiple=\"props.field.multiple\"\r\n :disabled=\"props.disabled\"\r\n :placeholder=\"field.placeholder\"\r\n remote\r\n :remote-method=\"remoteSearch\"\r\n @change=\"change\"\r\n >\r\n <template v-if=\"field.prefix\" #prefix>{{ field.prefix }}</template>\r\n <template v-for=\"option in options\" :key=\"option.code\">\r\n <el-option\r\n :label=\"option.name\"\r\n :value=\"option.code\"\r\n :title=\"option.name\"\r\n :disabled=\"option.disabled\"\r\n />\r\n </template>\r\n </el-select>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElSelect, ElOption } from \"element-plus\";\r\nimport { reactive, watch, ref } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: [String, Number, Array],\r\n field: Object,\r\n type: String,\r\n disabled: Boolean,\r\n formData: Object,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\nconst options = ref([]);\r\n\r\nasync function remoteSearch(keyword) {\r\n options.value = await props.field.options(\r\n props.formData,\r\n routeQuery,\r\n keyword,\r\n );\r\n}\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\nremoteSearch();\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nclass SelectFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.options = rawConfig.options || (() => [{ code: 0, name: \"未实现\" }]);\r\n this.formChange = rawConfig.formChange || (() => {});\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.multiple = this.defaultBy(rawConfig.multiple, false);\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\n\r\nexport default SelectFieldConfig;\r\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;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-BNxcHvPM.js","sources":["../src/framework/field/attachment/FieldDisplay.vue","../src/framework/field/attachment/FieldEditor.vue","../src/framework/field/attachment/config.js"],"sourcesContent":["<template>\r\n <div v-if=\"attachments.length > 0\">\r\n <div v-for=\"file in attachments\">\r\n <div class=\"file-name\">\r\n <el-icon color=\"#73767a\">\r\n <Document />\r\n </el-icon>\r\n <span class=\"name\">{{ file.name }}</span>\r\n <span class=\"file-type\">.{{ file.fileType }}</span>\r\n <el-icon color=\"#409eff\" size=\"16\" @click=\"download(file)\">\r\n <Download />\r\n </el-icon>\r\n <el-link\r\n v-if=\"file.isPreview\"\r\n type=\"primary\"\r\n :href=\"file.url\"\r\n target=\"_blank\"\r\n :underline=\"false\"\r\n >\r\n <el-icon size=\"16\">\r\n <View />\r\n </el-icon>\r\n </el-link>\r\n </div>\r\n </div>\r\n </div>\r\n <div v-else>\r\n <EmptyTip />\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElIcon, ElLink } from \"element-plus\";\r\nimport { Document, Download, View } from \"@element-plus/icons-vue\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst attachments = ref([]);\r\n\r\nfunction download(file) {\r\n fetch(file.url)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n const link = document.createElement(\"a\");\r\n if (blob.type == \"application/x-rar-compressed\") {\r\n link.href = file.url;\r\n } else {\r\n link.href = URL.createObjectURL(blob);\r\n }\r\n link.download = file.name;\r\n document.body.appendChild(link);\r\n link.click();\r\n });\r\n}\r\n\r\nfunction isPreview(fileType) {\r\n const imageExtensions = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"bmp\", \"pdf\"];\r\n return imageExtensions.includes(fileType);\r\n}\r\n\r\nwatch(\r\n () => props.row,\r\n () => {\r\n attachments.value = props.row[props.field.code].map((item) => {\r\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\r\n return {\r\n ...item,\r\n fileType: fileType,\r\n isPreview: isPreview(fileType),\r\n };\r\n });\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.file-name {\r\n display: flex;\r\n align-items: center;\r\n margin: 10px 0 5px 0;\r\n .file-type {\r\n height: 22px;\r\n line-height: 22px;\r\n margin-right: 5px;\r\n background: #eeeeee;\r\n border-radius: 4px;\r\n font-size: 12px;\r\n padding: 0 4px;\r\n }\r\n .name {\r\n margin: 0 5px;\r\n }\r\n}\r\n:deep(.el-icon) {\r\n margin: 0 5px;\r\n cursor: pointer;\r\n}\r\n</style>\r\n","<template>\r\n <AttachmentUploader\r\n :pics=\"_form.value\"\r\n :props=\"props.field.props ? props.field.props : {}\"\r\n @on-success=\"(file) => change(file, 'success')\"\r\n @on-remove=\"(file) => change(file, 'remove')\"\r\n @on-change=\"(file) => change(file, 'change')\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { reactive, defineAsyncComponent } from \"vue\";\r\nimport { ElMessage } from \"element-plus\";\r\n\r\nconst AttachmentUploader = defineAsyncComponent(() => {\r\n return import(\"./AttachmentUploader.vue\");\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Array,\r\n field: Object,\r\n domainConfig: Object,\r\n disabled: Boolean,\r\n formData: Object,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction add(attachment) {\r\n _form.value = _form.value ? [..._form.value, attachment] : [attachment];\r\n}\r\n\r\nfunction remove(attachment) {\r\n const index = _form.value.findIndex((item) => item.id === attachment.id);\r\n _form.value.splice(index, 1);\r\n}\r\n\r\nasync function updateFileName(attachment) {\r\n const restApi = props.domainConfig.rest;\r\n const regex = /^[\\u4e00-\\u9fa5\\w-_]+$/;\r\n\r\n if (!regex.test(attachment.name)) {\r\n ElMessage({\r\n message: \"请勿输入特殊字符!\",\r\n type: \"warning\",\r\n });\r\n return;\r\n }\r\n\r\n await restApi.updateFilesName(attachment).then(() => {\r\n ElMessage({\r\n message: \"附件名称已修改!\",\r\n type: \"success\",\r\n });\r\n });\r\n}\r\n\r\nfunction change(image, type) {\r\n if (type == \"success\") {\r\n add(image);\r\n emit(\"update:modelValue\", _form.value);\r\n return;\r\n }\r\n\r\n if (type == \"remove\") {\r\n remove(image);\r\n emit(\"update:modelValue\", _form.value);\r\n return;\r\n }\r\n\r\n if (type == \"change\") {\r\n updateFileName(image);\r\n return;\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class AttachmentFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.attachmentType = rawConfig.attachmentType;\r\n this.props = rawConfig.props;\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n defaultConfig() {\r\n return {\r\n showInList: false,\r\n };\r\n }\r\n}\r\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-BSYmo88x.js","sources":["../src/framework/field/date/FieldDisplay.vue","../src/framework/field/date/FieldEditor.vue","../src/framework/field/date/config.js"],"sourcesContent":["<script setup>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getTime() {\r\n const value = props.row[props.field.code];\r\n\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getTime, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"!isEmpty\">\r\n {{ formattedValue }}\r\n </span>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-date-picker\r\n v-model=\"_form.value\"\r\n :disabled=\"props.disabled\"\r\n type=\"date\"\r\n format=\"YYYY-MM-DD\"\r\n value-format=\"YYYY-MM-DD\"\r\n :placeholder=\"field.placeholder\"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElDatePicker } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: String,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class DateFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.width = this.computeWidth(rawConfig);\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n computeWidth(rawConfig) {\r\n if (rawConfig.width) {\r\n return rawConfig.width;\r\n }\r\n\r\n return 200;\r\n }\r\n}\r\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-Bbs_ly6P.js","sources":["../src/framework/field/text/FieldDisplay.vue","../src/framework/field/text/FieldEditor.vue","../src/framework/field/text/config.js"],"sourcesContent":["<script setup>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getName() {\r\n const value = props.row[props.field.code];\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getName, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"!isEmpty\">\r\n {{ formattedValue }}\r\n </span>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-input\r\n v-model=\"_form.value\"\r\n type=\"textarea\"\r\n :rows=\"5\"\r\n clearable\r\n :disabled=\"props.disabled\"\r\n :placeholder=\"field.placeholder\"\r\n @input=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElInput } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: String,\r\n field: Object,\r\n type: String,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class TextFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n defaultConfig() {\r\n return {\r\n showInList: false,\r\n };\r\n }\r\n}\r\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-Bmby6rfL.js","sources":["../src/framework/field/image/FieldDisplay.vue","../src/framework/field/image/FieldEditor.vue","../src/framework/field/image/config.js"],"sourcesContent":["<script setup>\r\nimport { ElImage } from \"element-plus\";\r\nimport { watch, ref, onMounted } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n mode: {\r\n type: String,\r\n },\r\n});\r\n\r\n// const url = ref(null);\r\n// const urls = ref([]);\r\nconst imgUrl = ref(\"\");\r\n\r\nwatch(\r\n () => props.row,\r\n () => {\r\n if (!props.field.waterMark) {\r\n imgUrl.value = props.row[props.field.code];\r\n } else {\r\n imgUrl.value = addwaterMark(\r\n props.row[props.field.code],\r\n props.field.waterMark,\r\n );\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\n// 将img内容绘制到canvas画布\r\nfunction imgToCanvas(img) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n const context = canvas.getContext(\"2d\");\r\n context.drawImage(img, 0, 0);\r\n return canvas;\r\n}\r\n\r\n// canvas画布上绘制水印并转换为blob对象\r\nfunction waterMark(canvas, waterMarkVal) {\r\n return new Promise((resolve) => {\r\n const ctx = canvas.getContext(\"2d\");\r\n // 绘制水印 canvas\r\n const canvasWater = drawWaterCanvas(waterMarkVal);\r\n // 绘制重复的水印\r\n ctx.fillStyle = ctx.createPattern(canvasWater, \"repeat\");\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n resolve(canvas.toDataURL());\r\n });\r\n}\r\n\r\nfunction drawWaterCanvas(str) {\r\n const canvasWater = document.createElement(\"canvas\");\r\n canvasWater.width = 500;\r\n canvasWater.height = 200;\r\n const ctxWater = canvasWater.getContext(\"2d\");\r\n ctxWater.textAlign = \"left\";\r\n ctxWater.textBaseline = \"middle\";\r\n ctxWater.font = \"26px Microsoft Yahei\";\r\n ctxWater.fillStyle = \"rgba(0, 0, 0, 0.3)\";\r\n ctxWater.rotate((-20 * Math.PI) / 180);\r\n ctxWater.fillText(str, 10, 200);\r\n // ctxWater.fillText(new Date().toLocaleString(), 10, 300)\r\n return canvasWater;\r\n}\r\n\r\nfunction addwaterMark(url, waterMarkVal) {\r\n const img = new Image();\r\n img.crossOrigin = \"Anonymous\";\r\n img.src = url;\r\n img.onload = async () => {\r\n const canvas = imgToCanvas(img);\r\n const url = await waterMark(canvas, waterMarkVal);\r\n imgUrl.value = url;\r\n };\r\n}\r\n</script>\r\n\r\n<template>\r\n <div :class=\"`image-card ${props.mode}`\">\r\n <el-image\r\n v-if=\"imgUrl\"\r\n :src=\"imgUrl\"\r\n preview-teleported\r\n fit=\"contain\"\r\n :preview-src-list=\"[imgUrl]\"\r\n class=\"image\"\r\n >\r\n <template #error>\r\n <div class=\"loading-error\">\r\n <div>加载失败</div>\r\n <div>{{ imgUrl }}</div>\r\n </div>\r\n </template>\r\n </el-image>\r\n <div v-else class=\"loading-error\">\r\n <div>暂无</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.image-card {\r\n width: 100%;\r\n height: 200px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n // background: #eee;\r\n // border: 1px solid #ddd;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.image {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.list {\r\n height: 50px;\r\n}\r\n\r\n.extend {\r\n width: 200px;\r\n height: 200px;\r\n}\r\n\r\n.loading-error {\r\n width: 100%;\r\n height: 100%;\r\n min-height: 50px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n background: var(--el-color-error);\r\n color: var(--el-color-white);\r\n}\r\n</style>\r\n","<template>\r\n <ImageUploader\r\n :image-url=\"_form.value\"\r\n :disabled=\"props.disabled\"\r\n :props=\"props.field.props\"\r\n @on-success=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { reactive, defineAsyncComponent, watch } from \"vue\";\r\n\r\nconst ImageUploader = defineAsyncComponent(() => {\r\n return import(\"./ImageUploader.vue\");\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: String,\r\n field: Object,\r\n type: String,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change(image) {\r\n emit(\"update:modelValue\", image);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n async () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class ImageFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.props = rawConfig.props || {};\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\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-C8MFDKwG.js","sources":["../src/framework/field/row-id/config.js"],"sourcesContent":["import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\n\r\nexport default class RowIdFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.editable = () => false;\r\n this.isRouter = this.isRouter(rawConfig);\r\n this.rowQuery = rawConfig.rowQuery || (() => ({}));\r\n this.display = FieldDisplay;\r\n this.fixed = true;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n isRouter(rawConfig) {\r\n const raw = rawConfig.isRouter;\r\n\r\n if (typeof raw == \"boolean\") {\r\n return () => raw;\r\n }\r\n\r\n if (typeof raw == \"function\") {\r\n return raw;\r\n }\r\n\r\n if (typeof raw == \"undefined\") {\r\n return () => true;\r\n }\r\n\r\n throw new Exception(`invalid isRouter : ${raw}`);\r\n }\r\n}\r\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-CDG1L4Oi.js","sources":["../src/framework/field/datetime/FieldDisplay.vue","../src/framework/field/datetime/FieldEditor.vue","../src/framework/field/datetime/config.js"],"sourcesContent":["<script setup>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getTime() {\r\n const value = props.row[props.field.code];\r\n\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getTime, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"!isEmpty\">\r\n {{ formattedValue }}\r\n </span>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-date-picker\r\n v-model=\"_form.value\"\r\n :disabled=\"props.disabled\"\r\n type=\"datetime\"\r\n format=\"YYYY-MM-DD HH:mm:ss\"\r\n value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n :placeholder=\"field.placeholder\"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElDatePicker } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: String,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n:deep(.el-date-editor) {\r\n width: 100% !important;\r\n}\r\n</style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class DatetimeFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.width = this.computeWidth(rawConfig);\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n computeWidth(rawConfig) {\r\n if (rawConfig.width) {\r\n return rawConfig.width;\r\n }\r\n\r\n return 200;\r\n }\r\n}\r\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-CE-gN7KM.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>\r\nimport { ElTooltip } from \"element-plus\";\r\nimport color from \"../../utils/color\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst invalidTip = ref(\"...\");\r\nconst found = ref(false);\r\nconst items = ref([]);\r\n\r\nasync function getRadioName() {\r\n const val = props.row[props.field.code];\r\n const label = props.field.label;\r\n if (val === undefined || val === null) {\r\n invalidTip.value = \"--\";\r\n found.value = false;\r\n return;\r\n }\r\n\r\n const options = await props.field.options(props.row, routeQuery);\r\n if (!options) {\r\n invalidTip.value = `<无>`;\r\n found.value = false;\r\n return;\r\n }\r\n\r\n let radioGroupOptions = \"\";\r\n radioGroupOptions = options.filter((item) => val === item.code); //formattedValue\r\n\r\n if (radioGroupOptions.length === 0) {\r\n invalidTip.value = `<无>`;\r\n found.value = false;\r\n return;\r\n }\r\n\r\n items.value = radioGroupOptions.map((item) => ({\r\n bgColor: color.strToHexColor(`${item.code}-${item.name}`),\r\n code: item.code,\r\n name: item.name,\r\n }));\r\n\r\n found.value = true;\r\n}\r\n\r\nwatch(() => props.row, getRadioName, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <template v-if=\"found\">\r\n <div class=\"radio-fields\">\r\n <el-tooltip\r\n v-for=\"item in items\"\r\n :content=\"`${item.code}`\"\r\n placement=\"top\"\r\n >\r\n <div class=\"radio-field found\" :style=\"`background: ${item.bgColor}`\">\r\n {{ item.name }}\r\n </div>\r\n </el-tooltip>\r\n </div>\r\n </template>\r\n <EmptyTip v-else :text=\"invalidTip\" />\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.radio-fields {\r\n display: inline-block;\r\n line-height: inherit;\r\n}\r\n\r\n.radio-field {\r\n font-size: 12px;\r\n padding: 0 6px;\r\n border-radius: 4px;\r\n}\r\n\r\n.found {\r\n color: #fff;\r\n}\r\n</style>\r\n","<template>\r\n <el-radio-group\r\n v-model=\"_form.value\"\r\n style=\"width: 100%\"\r\n :disabled=\"props.disabled\"\r\n placeholder=\"\"\r\n @change=\"change\"\r\n >\r\n <template v-for=\"option in options\" :key=\"option.code\">\r\n <el-radio :label=\"option.code\" :disabled=\"option.disabled\">{{\r\n option.name\r\n }}</el-radio>\r\n </template>\r\n </el-radio-group>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElRadioGroup, ElRadio } from \"element-plus\";\r\nimport { reactive, watch, ref } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: [String, Number],\r\n field: Object,\r\n type: String,\r\n disabled: Boolean,\r\n formData: Object,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\nconst options = ref([]);\r\n\r\nasync function remoteSearch(keyword) {\r\n options.value = await props.field.options(\r\n props.formData,\r\n routeQuery,\r\n keyword,\r\n );\r\n}\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n if (props?.field?.change) {\r\n props.field.change(_form.value);\r\n }\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\nremoteSearch();\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nclass RadioGroupFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.options = rawConfig.options || (() => [{ code: 0, name: \"未实现\" }]);\r\n this.formChange = rawConfig.formChange || (() => {});\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\n\r\nexport default RadioGroupFieldConfig;\r\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-CEbwLzea.js","sources":["../src/framework/field/string/FieldDisplay.vue","../src/framework/field/string/FieldEditor.vue","../src/framework/field/string/config.js"],"sourcesContent":["<template>\r\n <span v-if=\"!isEmpty\"> {{ formattedValue }} </span>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<script setup>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getName() {\r\n if (props.field?.formatter) {\r\n formattedValue.value = props.field.formatter(props.row);\r\n isEmpty.value = !formattedValue.value;\r\n return;\r\n }\r\n const fields = props.field.code.toString().split(\".\");\r\n const value = fields.reduce((acc, curr) => acc[curr], props.row);\r\n\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getName, { immediate: true });\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-input\r\n v-model=\"_form.value\"\r\n :type=\"field.type\"\r\n clearable\r\n :disabled=\"props.disabled\"\r\n :placeholder=\"field.placeholder\"\r\n @input=\"change\"\r\n >\r\n <template v-if=\"field.prefix\" #prefix>\r\n <div class=\"annotation\">{{ field.prefix }}</div>\r\n </template>\r\n <template v-if=\"field.suffix\" #suffix>\r\n <div class=\"annotation\">{{ field.suffix }}</div></template\r\n >\r\n </el-input>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElInput } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: [Object, String, Number],\r\n field: Object,\r\n type: String,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.annotation {\r\n color: #606266;\r\n}\r\n</style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class StringFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.formatter = rawConfig.formatter;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\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-DQerJfRt.js","sources":["../src/framework/field/switch/FieldDisplay.vue","../src/framework/field/switch/FieldEditor.vue","../src/framework/field/switch/config.js"],"sourcesContent":["<template>\r\n <span style=\"display: flex; align-items: center\">\r\n <el-switch\r\n v-model=\"value\"\r\n size=\"small\"\r\n :disabled=\"isDeleted ? true : false\"\r\n :before-change=\"($event) => switchChange(row, field.label)\"\r\n />\r\n </span>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { computed, ref } from \"vue\";\r\n\r\nconst emit = defineEmits([\"enable\"]);\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isDeleted = ref(props.row.deletedAt);\r\n\r\nfunction switchChange(row, label) {\r\n row.label = label;\r\n return new Promise((resolve, reject) => {\r\n emit(\"enable\", row);\r\n });\r\n}\r\n\r\nconst value = computed(() => {\r\n return props.row[props.field.code];\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-switch\r\n v-model=\"_form.value\"\r\n :disabled=\"props.disabled\"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Boolean,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class SwitchFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.formChange = rawConfig.formChange || (() => {});\r\n this.default = rawConfig.default || false;\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\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-DSE87t_O.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>\r\nimport color from \"../../utils/color\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\nimport { ElTree } from \"element-plus\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst formValue = ref([]);\r\nconst options = ref([]);\r\nconst defaultTreeSelectProps = {\r\n label: \"name\",\r\n children: \"children\",\r\n value: \"id\",\r\n};\r\nconst invalidTip = ref(\"...\");\r\nconst found = ref(false);\r\nconst items = ref([]);\r\n\r\nasync function getSelectName() {\r\n formValue.value = props.row[props.field.code];\r\n options.value = await props.field.options();\r\n // if (!options.value) {\r\n // invalidTip.value = `<无>`;\r\n // found.value = false;\r\n // return;\r\n // }\r\n\r\n // let selectedOptions = [];\r\n // if (props.field.multiple) {\r\n // selectedOptions = options.value.filter((item) => val.includes(item.code));\r\n // } else {\r\n // selectedOptions = options.value.filter((item) => val === item.code);\r\n // }\r\n\r\n // if (selectedOptions.length === 0) {\r\n // invalidTip.value = `<无>`;\r\n // found.value = false;\r\n // return;\r\n // }\r\n\r\n // items.value = selectedOptions.map((item) => ({\r\n // bgColor: color.strToHexColor(`${item.code}-${item.name}`),\r\n // code: item.code,\r\n // name: item.name,\r\n // }));\r\n\r\n found.value = true;\r\n}\r\n\r\nwatch(() => props.row, getSelectName, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <template v-if=\"found\">\r\n <el-tree\r\n :default-checked-keys=\"formValue\"\r\n style=\"width: 100%\"\r\n :data=\"options\"\r\n :props=\"defaultTreeSelectProps\"\r\n node-key=\"id\"\r\n :multiple=\"props.field.multiple\"\r\n :render-after-expand=\"false\"\r\n check-on-click-node\r\n :expand-on-click-node=\"false\"\r\n default-expand-all\r\n highlight-current\r\n disabled=\"true\"\r\n :check-strictly=\"props.field.checkStrictly\"\r\n show-checkbox\r\n filterable\r\n />\r\n </template>\r\n <EmptyTip v-else :text=\"invalidTip\" />\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.select-fields {\r\n display: inline-block;\r\n}\r\n\r\n.select-field {\r\n font-size: 12px;\r\n padding: 4px 6px;\r\n border-radius: 4px;\r\n}\r\n\r\n.found {\r\n color: #fff;\r\n}\r\n</style>\r\n","<template>\r\n <el-tree-select\r\n v-model=\"_form.value\"\r\n style=\"width: 100%\"\r\n :data=\"options\"\r\n :props=\"defaultTreeSelectProps\"\r\n node-key=\"id\"\r\n :multiple=\"props.field.multiple\"\r\n :render-after-expand=\"false\"\r\n check-on-click-node\r\n :expand-on-click-node=\"false\"\r\n default-expand-all\r\n highlight-current\r\n :disabled=\"props.field.disabled\"\r\n :check-strictly=\"props.field.checkStrictly\"\r\n remote\r\n show-checkbox\r\n filterable\r\n clearable\r\n :filter-node-method=\"filterNode\"\r\n :remote-method=\"remoteSearch\"\r\n @check=\"change\"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElTreeSelect } from \"element-plus\";\r\nimport { reactive, watch, ref } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Number,\r\n field: Object,\r\n disabled: Boolean,\r\n formData: Object,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\nconst options = ref([]);\r\nconst defaultTreeSelectProps = {\r\n label: \"name\",\r\n children: \"children\",\r\n value: \"id\",\r\n};\r\n\r\nasync function remoteSearch(keyword) {\r\n options.value = await props.field.options(\r\n props.formData,\r\n routeQuery,\r\n keyword,\r\n );\r\n}\r\n\r\nfunction filterNode(value, data) {\r\n // 如果用api进行keyword的检索,直接return true才会展示\r\n // 需要api查keyword时useApiSearchKeyword传true,否则走默认查询,includes到才展示\r\n if (props.field?.useApiSearchKeyword) {\r\n return true;\r\n }\r\n\r\n if (!value) {\r\n return true;\r\n }\r\n\r\n return data.name.includes(value);\r\n}\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\nremoteSearch();\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nclass TreeFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.options = rawConfig.options || (() => []);\r\n this.formChange = rawConfig.formChange || (() => {});\r\n this.multiple = this.defaultBy(rawConfig.multiple, false);\r\n this.checkStrictly = this.defaultBy(rawConfig.checkStrictly, true);\r\n this.useApiSearchKeyword = rawConfig.useApiSearchKeyword || false;\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n defaultConfig() {\r\n return {\r\n showInList: false,\r\n };\r\n }\r\n}\r\n\r\nexport default TreeFieldConfig;\r\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-Dh16WhJb.js","sources":["../src/framework/field/images/FieldDisplay.vue","../src/framework/field/images/config.js"],"sourcesContent":["<script setup>\r\nimport { ElSpace, ElImage } from \"element-plus\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\n\r\nconst url = ref(null);\r\nconst urls = ref([]);\r\n\r\nwatch(\r\n () => props.row,\r\n () => {\r\n const images = props.row[props.field.code];\r\n if (images) {\r\n urls.value = images.map((item) => item.url);\r\n url.value = urls.value[0];\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<template>\r\n <el-space v-if=\"props.row[props.field.code].length > 0\" wrap>\r\n <div\r\n v-for=\"image in props.row[props.field.code]\"\r\n class=\"image-card\"\r\n style=\"margin-bottom: 20px\"\r\n >\r\n <el-image\r\n v-if=\"image.url\"\r\n :src=\"image.url\"\r\n fit=\"contain\"\r\n :preview-src-list=\"urls\"\r\n class=\"image\"\r\n >\r\n <template #error>\r\n <div class=\"loading-error\">\r\n <div>图片加载失败</div>\r\n <div>{{ url }}</div>\r\n </div>\r\n </template>\r\n </el-image>\r\n <div v-else class=\"loading-error\">\r\n <div>暂无</div>\r\n </div>\r\n </div>\r\n </el-space>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.image-card {\r\n width: 200px;\r\n height: 200px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: #eee;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.image {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.loading-error {\r\n width: 100%;\r\n height: 100%;\r\n min-height: 50px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n</style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class ImagesFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.props = rawConfig.props;\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.converter = this.defaultBy(rawConfig.converter, (raw) => raw);\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n defaultConfig() {\r\n return {\r\n showInList: false,\r\n };\r\n }\r\n}\r\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-DrJPQ_iz.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>\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\n</script>\r\n\r\n<template>\r\n <div class=\"editor-field\">\r\n <div class=\"content\" v-html=\"props.row[props.field.code]\" />\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.editor-field {\r\n width: 100%;\r\n background: #999;\r\n padding: 20px 0;\r\n\r\n .content {\r\n word-wrap: break-word;\r\n font-family: \"Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif\" !important;\r\n max-width: 500px;\r\n padding: 20px;\r\n margin: 0 auto;\r\n background: white;\r\n white-space: break-spaces;\r\n :deep(img) {\r\n width: 100%;\r\n max-width: 100%;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div style=\"width: 100%\">\r\n <RichTextEditor v-model:content=\"_form.value\" :field=\"props.field\" />\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { reactive, watch, defineAsyncComponent, defineEmits } from \"vue\";\r\n\r\nconst RichTextEditor = defineAsyncComponent(() => {\r\n return import(\"./RichTextEditor.vue\");\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: String,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nwatch(\r\n () => _form.value,\r\n () => {\r\n emit(\"update:modelValue\", _form.value);\r\n },\r\n);\r\nwatch(\r\n () => props.modelValue,\r\n async () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class EditorFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n defaultConfig() {\r\n return {\r\n showInList: false,\r\n };\r\n }\r\n}\r\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-Dr_SXi5U.js","sources":["../src/framework/field/component/config.js"],"sourcesContent":["import BaseFieldConfig from \"../base-field-config\";\r\n\r\nexport default class ComponentFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.component = rawConfig.component;\r\n this.display = rawConfig.component;\r\n this.editor = rawConfig.component;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\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-KtTeOyV6.js","sources":["../src/framework/field/time/FieldDisplay.vue","../src/framework/field/time/FieldEditor.vue","../src/framework/field/time/config.js"],"sourcesContent":["<script setup>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getTime() {\r\n const value = props.row[props.field.code];\r\n\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getTime, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"!isEmpty\">\r\n {{ formattedValue }}\r\n </span>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-time-picker\r\n v-model=\"_form.value\"\r\n :disabled=\"props.disabled\"\r\n :format=\"props.field.format\"\r\n :value-format=\"props.field.format\"\r\n @change=\"change\"\r\n >\r\n </el-time-picker>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElTimePicker } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: String,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class TimeFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.width = this.computeWidth(rawConfig);\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n computeWidth(rawConfig) {\r\n if (rawConfig.width) {\r\n return rawConfig.width;\r\n }\r\n\r\n return 200;\r\n }\r\n}\r\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-Xk01hDVk.js","sources":["../src/framework/field/boolean/FieldDisplay.vue","../src/framework/field/boolean/FieldEditor.vue","../src/framework/field/boolean/config.js"],"sourcesContent":["<template>\r\n <span style=\"display: flex; align-items: center\">\r\n <el-icon v-if=\"value == true\" color=\"#2DAD28\" :size=\"24\">\r\n <SuccessFilled />\r\n </el-icon>\r\n <el-icon v-else-if=\"value == false\" color=\"#FF444A\" :size=\"24\">\r\n <CircleCloseFilled />\r\n </el-icon>\r\n <el-icon v-else color=\"#85888E\" :size=\"24\">\r\n <QuestionFilled />\r\n </el-icon>\r\n </span>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElIcon } from \"element-plus\";\r\nimport { computed } from \"vue\";\r\nimport {\r\n SuccessFilled,\r\n CircleCloseFilled,\r\n QuestionFilled,\r\n} from \"@element-plus/icons-vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\n\r\nconst value = computed(() => {\r\n return props.row[props.field.code];\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-switch\r\n v-model=\"_form.value\"\r\n :disabled=\"props.disabled\"\r\n :active-text=\"props.field?.elConfig?.activeText || '是'\"\r\n :inactive-text=\"props.field?.elConfig?.inactiveText || '否'\"\r\n :inline-prompt=\"\r\n props.field?.elConfig?.inlinePrompt === false ? false : true\r\n \"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElSwitch } from \"element-plus\";\r\nimport { reactive, watch } from \"vue\";\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Boolean,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class BooleanFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.default = rawConfig.default || false;\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.formChange = rawConfig.formChange || (() => {});\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\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-ssH8d7K9.js","sources":["../src/framework/field/cascader/FieldDisplay.vue","../src/framework/field/cascader/FieldEditor.vue","../src/framework/field/cascader/config.js"],"sourcesContent":["<template>\r\n <div>\r\n <span v-if=\"!isEmpty\">\r\n {{ formattedValue }}\r\n </span>\r\n <EmptyTip v-else />\r\n <!-- edit -->\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getName() {\r\n const value = props.row[props.field.code];\r\n\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getName, { immediate: true });\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <el-cascader\r\n v-model=\"_form.value\"\r\n :props=\"props.field.props\"\r\n :options=\"options\"\r\n clearable\r\n style=\"width: 100%\"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { ElCascader } from \"element-plus\";\r\nimport { reactive, watch, ref } from \"vue\";\r\nimport { useRoute } from \"vue-router\";\r\nimport { setupRouteQuery } from \"../../utils/route-query\";\r\n\r\nconst route = useRoute();\r\nconst routeQuery = setupRouteQuery(route);\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Array,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\nconst options = ref([]);\r\n\r\nasync function remoteSearch(keyword) {\r\n options.value = await props.field.options(\r\n props.formData,\r\n routeQuery,\r\n keyword,\r\n );\r\n}\r\n\r\nremoteSearch();\r\n\r\nfunction change() {\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nclass CascaderFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.props = rawConfig.props || (() => {});\r\n this.formChange = rawConfig.formChange || (() => {});\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n this.multiple = this.defaultBy(rawConfig.multiple, false);\r\n this.options = rawConfig.options || (() => [{ id: 0, name: \"未实现\" }]);\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n}\r\n\r\nexport default CascaderFieldConfig;\r\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-yVymOXO_.js","sources":["../src/framework/field/json/FieldDisplay.vue","../src/framework/field/json/FieldEditor.vue","../src/framework/field/json/config.js"],"sourcesContent":["<script setup>\r\nimport { defineAsyncComponent, ref, watch } from \"vue\";\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\n\r\nconst JsonEditorVue = defineAsyncComponent(() => {\r\n return import(\"json-editor-vue\");\r\n});\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\n\r\nconst valid = ref(false);\r\nconst formattedValue = ref(\"加载中...\");\r\n\r\nwatch(\r\n () => props.row,\r\n () => {\r\n valid.value = false;\r\n const value = props.row[props.field.code];\r\n if (value === undefined || value === null) {\r\n return;\r\n }\r\n\r\n if (`${value}`.trim() === \"\") {\r\n return;\r\n }\r\n\r\n valid.value = true;\r\n formattedValue.value = value;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<template>\r\n <JsonEditorVue\r\n v-if=\"valid\"\r\n v-model=\"formattedValue\"\r\n mode=\"text\"\r\n :main-menu-bar=\"false\"\r\n :navigation-bar=\"false\"\r\n :read-only=\"true\"\r\n />\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","<template>\r\n <JsonEditorVue\r\n v-model=\"_form.value\"\r\n style=\"width: 100%; height: 300px\"\r\n mode=\"text\"\r\n :main-menu-bar=\"false\"\r\n :navigation-bar=\"false\"\r\n @change=\"change\"\r\n />\r\n</template>\r\n\r\n<script setup>\r\nimport { reactive, watch, defineAsyncComponent } from \"vue\";\r\n\r\nconst JsonEditorVue = defineAsyncComponent(() => {\r\n return import(\"json-editor-vue\");\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\"]);\r\nconst props = defineProps({\r\n modelValue: Object,\r\n field: Object,\r\n disabled: Boolean,\r\n});\r\nconst _form = reactive({ value: props.modelValue });\r\n\r\nfunction change(value) {\r\n _form.value = value.text;\r\n emit(\"update:modelValue\", _form.value);\r\n}\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n _form.value = props.modelValue;\r\n },\r\n { immediate: true },\r\n);\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n","import BaseFieldConfig from \"../base-field-config\";\r\nimport FieldDisplay from \"./FieldDisplay.vue\";\r\nimport FieldEditor from \"./FieldEditor.vue\";\r\n\r\nexport default class JsonFieldConfig extends BaseFieldConfig {\r\n constructor(rawConfig, domain) {\r\n super(rawConfig, domain);\r\n this.display = FieldDisplay;\r\n this.editor = FieldEditor;\r\n\r\n this.checkValidProperties(rawConfig);\r\n }\r\n\r\n defaultConfig() {\r\n return {\r\n showInList: false,\r\n };\r\n }\r\n}\r\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-ys3nFgYd.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>\r\nimport EmptyTip from \"../../component/EmptyTip.vue\";\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n field: {\r\n type: Object,\r\n },\r\n row: {\r\n type: Object,\r\n },\r\n});\r\nconst isEmpty = ref(false);\r\nconst formattedValue = ref(\"...\");\r\n\r\nasync function getName() {\r\n const value = props.row[props.field.code];\r\n if (value === undefined || value === null) {\r\n isEmpty.value = true;\r\n } else if (`${value}`.trim() === \"\") {\r\n isEmpty.value = true;\r\n } else {\r\n formattedValue.value = value;\r\n isEmpty.value = false;\r\n }\r\n}\r\n\r\nwatch(() => props.row, getName, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"!isEmpty\">\r\n {{ formattedValue }}\r\n </span>\r\n <EmptyTip v-else />\r\n</template>\r\n\r\n<style scoped lang=\"scss\"></style>\r\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;"}