kouxiangtang 0.1.33 → 0.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +411 -411
  2. package/dist/{AttachmentUploader-B7kkPU2C.js → AttachmentUploader-CGL54aBb.js} +16 -16
  3. package/dist/AttachmentUploader-CGL54aBb.js.map +1 -0
  4. package/dist/{ImageUploader-ByDQtIvq.js → ImageUploader-CcFlcSpQ.js} +15 -15
  5. package/dist/ImageUploader-CcFlcSpQ.js.map +1 -0
  6. package/dist/{ImagesUploader-D6-3HM_D.js → ImagesUploader-CG88IU_g.js} +7 -7
  7. package/dist/ImagesUploader-CG88IU_g.js.map +1 -0
  8. package/dist/{RichTextEditor-BL6xqftk.js → RichTextEditor-D4TE30tP.js} +2 -2
  9. package/dist/{RichTextEditor-BL6xqftk.js.map → RichTextEditor-D4TE30tP.js.map} +1 -1
  10. package/dist/color-DbNhHNpt.js.map +1 -1
  11. package/dist/{config-CkOTyA6M.js → config-6Nd09Jjv.js} +2 -2
  12. package/dist/config-6Nd09Jjv.js.map +1 -0
  13. package/dist/{config-Dd3jwmiE.js → config-B8Kl3wi6.js} +5 -5
  14. package/dist/config-B8Kl3wi6.js.map +1 -0
  15. package/dist/{config-8QYaFvNM.js → config-B8xbilFY.js} +15 -15
  16. package/dist/config-B8xbilFY.js.map +1 -0
  17. package/dist/{config-CVpuFBZU.js → config-BJ05VOJS.js} +2 -2
  18. package/dist/config-BJ05VOJS.js.map +1 -0
  19. package/dist/{config-QcC384MA.js → config-Bq3afnqQ.js} +2 -2
  20. package/dist/config-Bq3afnqQ.js.map +1 -0
  21. package/dist/{config-CyTeIX36.js → config-CAV930xL.js} +2 -2
  22. package/dist/config-CAV930xL.js.map +1 -0
  23. package/dist/{config-DhFx4vma.js → config-CaNnHrXu.js} +2 -2
  24. package/dist/config-CaNnHrXu.js.map +1 -0
  25. package/dist/{config-CGN5-J3g.js → config-D0bD_igE.js} +2 -2
  26. package/dist/config-D0bD_igE.js.map +1 -0
  27. package/dist/{config-HHs-1vYi.js → config-D1fFnyeg.js} +2 -2
  28. package/dist/config-D1fFnyeg.js.map +1 -0
  29. package/dist/{config-BRlZRcCp.js → config-DEU4rXLM.js} +11 -11
  30. package/dist/config-DEU4rXLM.js.map +1 -0
  31. package/dist/{config-DNjYwWf2.js → config-DEuYj7n8.js} +3 -3
  32. package/dist/config-DEuYj7n8.js.map +1 -0
  33. package/dist/{config-aPvPNn1F.js → config-DFCrgtZu.js} +2 -2
  34. package/dist/config-DFCrgtZu.js.map +1 -0
  35. package/dist/{config-Cy9I3Yww.js → config-DLUKJ00O.js} +6 -6
  36. package/dist/config-DLUKJ00O.js.map +1 -0
  37. package/dist/{config-DvLe94XY.js → config-Da7Ds_Wm.js} +2 -2
  38. package/dist/config-Da7Ds_Wm.js.map +1 -0
  39. package/dist/{config-lUL3nYIJ.js → config-DpS-vbol.js} +15 -15
  40. package/dist/config-DpS-vbol.js.map +1 -0
  41. package/dist/{config-BnpixRqt.js → config-Dtn2JkO5.js} +12 -12
  42. package/dist/config-Dtn2JkO5.js.map +1 -0
  43. package/dist/{config-Bu0VHLBr.js → config-H7UfnxyZ.js} +14 -14
  44. package/dist/config-H7UfnxyZ.js.map +1 -0
  45. package/dist/{config-BeR4PpdP.js → config-HEkYpTmG.js} +8 -8
  46. package/dist/config-HEkYpTmG.js.map +1 -0
  47. package/dist/{config-CoRLR8yc.js → config-ZqJ_p7Re.js} +3 -3
  48. package/dist/config-ZqJ_p7Re.js.map +1 -0
  49. package/dist/{config-R1n9p5mL.js → config-_n6i3lwk.js} +2 -2
  50. package/dist/config-_n6i3lwk.js.map +1 -0
  51. package/dist/{index-Bq_Z8Hm7.js → index-D5MVRDok.js} +2028 -2063
  52. package/dist/index-D5MVRDok.js.map +1 -0
  53. package/dist/kouxiangtang.js +16 -18
  54. package/dist/kouxiangtang.umd.cjs +9 -9
  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-B7kkPU2C.js.map +0 -1
  59. package/dist/ImageUploader-ByDQtIvq.js.map +0 -1
  60. package/dist/ImagesUploader-D6-3HM_D.js.map +0 -1
  61. package/dist/config-8QYaFvNM.js.map +0 -1
  62. package/dist/config-BRlZRcCp.js.map +0 -1
  63. package/dist/config-BeR4PpdP.js.map +0 -1
  64. package/dist/config-BnpixRqt.js.map +0 -1
  65. package/dist/config-Bu0VHLBr.js.map +0 -1
  66. package/dist/config-CGN5-J3g.js.map +0 -1
  67. package/dist/config-CVpuFBZU.js.map +0 -1
  68. package/dist/config-CkOTyA6M.js.map +0 -1
  69. package/dist/config-CoRLR8yc.js.map +0 -1
  70. package/dist/config-Cy9I3Yww.js.map +0 -1
  71. package/dist/config-CyTeIX36.js.map +0 -1
  72. package/dist/config-DNjYwWf2.js.map +0 -1
  73. package/dist/config-Dd3jwmiE.js.map +0 -1
  74. package/dist/config-DhFx4vma.js.map +0 -1
  75. package/dist/config-DvLe94XY.js.map +0 -1
  76. package/dist/config-HHs-1vYi.js.map +0 -1
  77. package/dist/config-QcC384MA.js.map +0 -1
  78. package/dist/config-R1n9p5mL.js.map +0 -1
  79. package/dist/config-aPvPNn1F.js.map +0 -1
  80. package/dist/config-lUL3nYIJ.js.map +0 -1
  81. package/dist/index-Bq_Z8Hm7.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DEU4rXLM.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,4 +1,4 @@
1
- import { _ as B, s as _, g as D, l as $, E as I, b as Q, c as j, B as G } from "./index-Bq_Z8Hm7.js";
1
+ import { _ as B, s as _, g as D, l as $, E as I, b as Q, c as j, B as G } from "./index-D5MVRDok.js";
2
2
  import { computed as L, ref as w, watch as V, resolveComponent as P, openBlock as s, createElementBlock as R, createBlock as p, unref as N, withCtx as g, createVNode as S, createTextVNode as q, toDisplayString as E, reactive as U, Fragment as W, renderList as z } from "vue";
3
3
  import { ElIcon as A, ElSelect as H, ElOption as J } from "element-plus";
4
4
  import { useRoute as O } from "vue-router";
@@ -97,7 +97,7 @@ const K = { key: 3 }, M = {
97
97
  ]);
98
98
  };
99
99
  }
100
- }, X = /* @__PURE__ */ B(M, [["__scopeId", "data-v-a7249bb7"]]), Y = {
100
+ }, X = /* @__PURE__ */ B(M, [["__scopeId", "data-v-4fc1db1d"]]), Y = {
101
101
  __name: "FieldEditor",
102
102
  props: {
103
103
  modelValue: Number,
@@ -178,4 +178,4 @@ class oe extends G {
178
178
  export {
179
179
  oe as default
180
180
  };
181
- //# sourceMappingURL=config-DNjYwWf2.js.map
181
+ //# sourceMappingURL=config-DEuYj7n8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DEuYj7n8.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,4 +1,4 @@
1
- import { E as m, B as f } from "./index-Bq_Z8Hm7.js";
1
+ import { E as m, B as f } from "./index-D5MVRDok.js";
2
2
  import { ref as d, watch as n, openBlock as s, createElementBlock as v, toDisplayString as y, createBlock as u, reactive as h, unref as V } from "vue";
3
3
  import { ElInput as _ } from "element-plus";
4
4
  const b = { key: 0 }, g = {
@@ -64,4 +64,4 @@ class j extends f {
64
64
  export {
65
65
  j as default
66
66
  };
67
- //# sourceMappingURL=config-aPvPNn1F.js.map
67
+ //# sourceMappingURL=config-DFCrgtZu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DFCrgtZu.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,5 +1,5 @@
1
- import { E as h, _ as x, B as V } from "./index-Bq_Z8Hm7.js";
2
- import { ref as c, watch as p, openBlock as r, createElementBlock as b, toDisplayString as u, createBlock as v, reactive as _, unref as k, createSlots as E, withCtx as f, createElementVNode as m } from "vue";
1
+ import { E as h, _ as x, B as V } from "./index-D5MVRDok.js";
2
+ import { ref as c, watch as p, openBlock as r, createElementBlock as _, toDisplayString as u, createBlock as v, reactive as b, unref as k, createSlots as E, withCtx as f, createElementVNode as m } from "vue";
3
3
  import { ElInput as g } from "element-plus";
4
4
  const B = { key: 0 }, F = {
5
5
  __name: "FieldDisplay",
@@ -22,7 +22,7 @@ const B = { key: 0 }, F = {
22
22
  const o = e.field.code.toString().split(".").reduce((s, y) => s[y], e.row);
23
23
  o == null || `${o}`.trim() === "" ? l.value = !0 : (a.value = o, l.value = !1);
24
24
  }
25
- return p(() => e.row, i, { immediate: !0 }), (n, o) => l.value ? (r(), v(h, { key: 1 })) : (r(), b("span", B, u(a.value), 1));
25
+ return p(() => e.row, i, { immediate: !0 }), (n, o) => l.value ? (r(), v(h, { key: 1 })) : (r(), _("span", B, u(a.value), 1));
26
26
  }
27
27
  }, S = F, j = { class: "annotation" }, w = { class: "annotation" }, O = {
28
28
  __name: "FieldEditor",
@@ -34,7 +34,7 @@ const B = { key: 0 }, F = {
34
34
  },
35
35
  emits: ["update:modelValue"],
36
36
  setup(t, { emit: e }) {
37
- const l = e, a = t, i = _({ value: a.modelValue });
37
+ const l = e, a = t, i = b({ value: a.modelValue });
38
38
  function n() {
39
39
  l("update:modelValue", i.value);
40
40
  }
@@ -69,7 +69,7 @@ const B = { key: 0 }, F = {
69
69
  } : void 0
70
70
  ]), 1032, ["modelValue", "type", "disabled", "placeholder"]));
71
71
  }
72
- }, D = /* @__PURE__ */ x(O, [["__scopeId", "data-v-4c74bd97"]]);
72
+ }, D = /* @__PURE__ */ x(O, [["__scopeId", "data-v-449013dd"]]);
73
73
  class C extends V {
74
74
  constructor(e, l) {
75
75
  super(e, l), this.display = S, this.editor = D, this.formatter = e.formatter, this.checkValidProperties(e);
@@ -78,4 +78,4 @@ class C extends V {
78
78
  export {
79
79
  C as default
80
80
  };
81
- //# sourceMappingURL=config-Cy9I3Yww.js.map
81
+ //# sourceMappingURL=config-DLUKJ00O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DLUKJ00O.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,4 +1,4 @@
1
- import { E as _, s as V, B } from "./index-Bq_Z8Hm7.js";
1
+ import { E as _, s as V, B } from "./index-D5MVRDok.js";
2
2
  import { ref as u, watch as d, openBlock as i, createElementBlock as m, toDisplayString as k, createBlock as f, reactive as E, unref as b } from "vue";
3
3
  import { ElCascader as x } from "element-plus";
4
4
  import "./el-radio-l0sNRNKZ.js";
@@ -71,4 +71,4 @@ class $ extends B {
71
71
  export {
72
72
  $ as default
73
73
  };
74
- //# sourceMappingURL=config-DvLe94XY.js.map
74
+ //# sourceMappingURL=config-Da7Ds_Wm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-Da7Ds_Wm.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,4 +1,4 @@
1
- import { _ as w, s as x, E, B } from "./index-Bq_Z8Hm7.js";
1
+ import { _ as w, s as x, E, B } from "./index-D5MVRDok.js";
2
2
  import { ref as p, watch as _, openBlock as d, createElementBlock as h, Fragment as V, renderList as g, createBlock as v, unref as y, withCtx as b, createElementVNode as F, normalizeStyle as O, toDisplayString as k, reactive as C, createSlots as D, createTextVNode as T } from "vue";
3
3
  import { ElTooltip as $, ElSelect as j, ElOption as N } from "element-plus";
4
4
  import { c as Q } from "./color-DbNhHNpt.js";
@@ -17,20 +17,20 @@ const R = {
17
17
  }
18
18
  },
19
19
  setup(r) {
20
- const o = S(), m = x(o), a = r, u = p("..."), e = p(!1), s = p([]);
20
+ const a = S(), m = x(a), o = r, u = p("..."), e = p(!1), s = p([]);
21
21
  async function f() {
22
- const i = a.row[a.field.code];
23
- if (a.field.label, i == null) {
22
+ const i = o.row[o.field.code];
23
+ if (o.field.label, i == null) {
24
24
  u.value = "--", e.value = !1;
25
25
  return;
26
26
  }
27
- const c = await a.field.options(a.row, m);
27
+ const c = await o.field.options(o.row, m);
28
28
  if (!c) {
29
29
  u.value = "<无>", e.value = !1;
30
30
  return;
31
31
  }
32
32
  let t = [];
33
- if (a.field.multiple ? t = c.filter((l) => i.includes(l.code)) : t = c.filter((l) => i === l.code), t.length === 0) {
33
+ if (o.field.multiple ? t = c.filter((l) => i.includes(l.code)) : t = c.filter((l) => i === l.code), t.length === 0) {
34
34
  u.value = "--", e.value = !1;
35
35
  return;
36
36
  }
@@ -40,7 +40,7 @@ const R = {
40
40
  name: l.name
41
41
  })), e.value = !0;
42
42
  }
43
- return _(() => a.row, f, { immediate: !0 }), (i, c) => e.value ? (d(), h("div", R, [
43
+ return _(() => o.row, f, { immediate: !0 }), (i, c) => e.value ? (d(), h("div", R, [
44
44
  (d(!0), h(V, null, g(s.value, (t) => (d(), v(y($), {
45
45
  content: `${t.name}`,
46
46
  placement: "top"
@@ -58,7 +58,7 @@ const R = {
58
58
  text: u.value
59
59
  }, null, 8, ["text"]));
60
60
  }
61
- }, A = /* @__PURE__ */ w(z, [["__scopeId", "data-v-48df8735"]]), H = {
61
+ }, A = /* @__PURE__ */ w(z, [["__scopeId", "data-v-a4302e50"]]), H = {
62
62
  __name: "FieldEditor",
63
63
  props: {
64
64
  modelValue: [String, Number, Array],
@@ -68,12 +68,12 @@ const R = {
68
68
  formData: Object
69
69
  },
70
70
  emits: ["update:modelValue"],
71
- setup(r, { emit: o }) {
72
- const m = S(), a = x(m), u = o, e = r, s = C({ value: e.modelValue }), f = p([]);
71
+ setup(r, { emit: a }) {
72
+ const m = S(), o = x(m), u = a, e = r, s = C({ value: e.modelValue }), f = p([]);
73
73
  async function i(t) {
74
74
  f.value = await e.field.options(
75
75
  e.formData,
76
- a,
76
+ o,
77
77
  t
78
78
  );
79
79
  }
@@ -124,12 +124,12 @@ const R = {
124
124
  }
125
125
  };
126
126
  class G extends B {
127
- constructor(o, m) {
128
- super(o, m), this.options = o.options || (() => [{ code: 0, name: "未实现" }]), this.formChange = o.formChange || (() => {
129
- }), this.display = A, this.editor = H, this.multiple = this.defaultBy(o.multiple, !1), this.checkValidProperties(o);
127
+ constructor(a, m) {
128
+ super(a, m), this.options = a.options || (() => [{ code: 0, name: "未实现" }]), this.formChange = a.formChange || (() => {
129
+ }), this.display = A, this.editor = H, this.multiple = this.defaultBy(a.multiple, !1), this.checkValidProperties(a);
130
130
  }
131
131
  }
132
132
  export {
133
133
  G as default
134
134
  };
135
- //# sourceMappingURL=config-lUL3nYIJ.js.map
135
+ //# sourceMappingURL=config-DpS-vbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DpS-vbol.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,6 +1,6 @@
1
- import { _ as k, d as E, a as O, v as C, E as F, B as V } from "./index-Bq_Z8Hm7.js";
2
- import { ref as j, watch as B, openBlock as u, createElementBlock as f, Fragment as T, renderList as A, createElementVNode as h, createVNode as c, unref as i, withCtx as _, toDisplayString as b, createBlock as x, createCommentVNode as I, defineAsyncComponent as L, reactive as N } from "vue";
3
- import { ElIcon as y, ElLink as D, ElMessage as w } from "element-plus";
1
+ import { _ as b, d as E, a as O, v as C, E as F, B as V } from "./index-D5MVRDok.js";
2
+ import { ref as j, watch as B, openBlock as u, createElementBlock as f, Fragment as T, renderList as A, createElementVNode as h, createVNode as c, unref as i, withCtx as _, toDisplayString as w, createBlock as k, createCommentVNode as I, defineAsyncComponent as L, reactive as N } from "vue";
3
+ import { ElIcon as y, ElLink as D, ElMessage as x } from "element-plus";
4
4
  const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { class: "file-type" }, z = { key: 1 }, S = {
5
5
  __name: "FieldDisplay",
6
6
  props: {
@@ -44,8 +44,8 @@ const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { c
44
44
  ]),
45
45
  _: 1
46
46
  }),
47
- h("span", U, b(n.name), 1),
48
- h("span", $, "." + b(n.fileType), 1),
47
+ h("span", U, w(n.name), 1),
48
+ h("span", $, "." + w(n.fileType), 1),
49
49
  c(i(y), {
50
50
  color: "#409eff",
51
51
  size: "16",
@@ -56,7 +56,7 @@ const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { c
56
56
  ]),
57
57
  _: 2
58
58
  }, 1032, ["onClick"]),
59
- n.isPreview ? (u(), x(i(D), {
59
+ n.isPreview ? (u(), k(i(D), {
60
60
  key: 0,
61
61
  type: "primary",
62
62
  href: n.url,
@@ -79,7 +79,7 @@ const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { c
79
79
  c(F)
80
80
  ]));
81
81
  }
82
- }, M = /* @__PURE__ */ k(S, [["__scopeId", "data-v-196b9bff"]]), q = {
82
+ }, M = /* @__PURE__ */ b(S, [["__scopeId", "data-v-76764c63"]]), q = {
83
83
  __name: "FieldEditor",
84
84
  props: {
85
85
  modelValue: Array,
@@ -90,7 +90,7 @@ const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { c
90
90
  },
91
91
  emits: ["update:modelValue"],
92
92
  setup(p, { emit: a }) {
93
- const l = L(() => import("./AttachmentUploader-B7kkPU2C.js")), m = a, d = p, e = N({ value: d.modelValue });
93
+ const l = L(() => import("./AttachmentUploader-CGL54aBb.js")), m = a, d = p, e = N({ value: d.modelValue });
94
94
  function o(s) {
95
95
  e.value = e.value ? [...e.value, s] : [s];
96
96
  }
@@ -101,14 +101,14 @@ const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { c
101
101
  async function g(s) {
102
102
  const t = d.domainConfig.rest;
103
103
  if (!/^[\u4e00-\u9fa5\w-_]+$/.test(s.name)) {
104
- w({
104
+ x({
105
105
  message: "请勿输入特殊字符!",
106
106
  type: "warning"
107
107
  });
108
108
  return;
109
109
  }
110
110
  await t.updateFilesName(s).then(() => {
111
- w({
111
+ x({
112
112
  message: "附件名称已修改!",
113
113
  type: "success"
114
114
  });
@@ -128,7 +128,7 @@ const P = { key: 0 }, R = { class: "file-name" }, U = { class: "name" }, $ = { c
128
128
  return;
129
129
  }
130
130
  }
131
- return (s, t) => (u(), x(i(l), {
131
+ return (s, t) => (u(), k(i(l), {
132
132
  pics: e.value,
133
133
  props: d.field.props ? d.field.props : {},
134
134
  onOnSuccess: t[0] || (t[0] = (r) => v(r, "success")),
@@ -150,4 +150,4 @@ class Q extends V {
150
150
  export {
151
151
  Q as default
152
152
  };
153
- //# sourceMappingURL=config-BnpixRqt.js.map
153
+ //# sourceMappingURL=config-Dtn2JkO5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-Dtn2JkO5.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,10 +1,10 @@
1
- import { _ as h, E as f, B as v, i as y } from "./index-Bq_Z8Hm7.js";
2
- import { ref as p, watch as g, openBlock as s, createBlock as c, unref as u, withCtx as _, createElementBlock as a, Fragment as w, renderList as k, createElementVNode as i, toDisplayString as I, pushScopeId as x, popScopeId as B } from "vue";
3
- import { ElSpace as E, ElImage as F } from "element-plus";
4
- const m = (t) => (x("data-v-56e18295"), t = t(), B(), t), S = {
1
+ import { _ as h, E as f, B as v, i as y } from "./index-D5MVRDok.js";
2
+ import { ref as p, watch as g, openBlock as s, createBlock as l, unref as u, withCtx as _, createElementBlock as a, Fragment as w, renderList as k, createElementVNode as i, toDisplayString as I, pushScopeId as x, popScopeId as B } from "vue";
3
+ import { ElSpace as E, ElImage as b } from "element-plus";
4
+ const m = (t) => (x("data-v-e4bc2c79"), t = t(), B(), t), F = {
5
5
  class: "image-card",
6
6
  style: { "margin-bottom": "20px" }
7
- }, b = { class: "loading-error" }, D = /* @__PURE__ */ m(() => /* @__PURE__ */ i("div", null, "图片加载失败", -1)), j = {
7
+ }, S = { class: "loading-error" }, D = /* @__PURE__ */ m(() => /* @__PURE__ */ i("div", null, "图片加载失败", -1)), j = {
8
8
  key: 1,
9
9
  class: "loading-error"
10
10
  }, L = /* @__PURE__ */ m(() => /* @__PURE__ */ i("div", null, "暂无", -1)), O = [
@@ -24,17 +24,17 @@ const m = (t) => (x("data-v-56e18295"), t = t(), B(), t), S = {
24
24
  return g(
25
25
  () => e.row,
26
26
  () => {
27
- const l = e.row[e.field.code];
28
- l && (r.value = l.map((d) => d.url), o.value = r.value[0]);
27
+ const c = e.row[e.field.code];
28
+ c && (r.value = c.map((d) => d.url), o.value = r.value[0]);
29
29
  },
30
30
  { immediate: !0 }
31
- ), (l, d) => e.row[e.field.code].length > 0 ? (s(), c(u(E), {
31
+ ), (c, d) => e.row[e.field.code].length > 0 ? (s(), l(u(E), {
32
32
  key: 0,
33
33
  wrap: ""
34
34
  }, {
35
35
  default: _(() => [
36
- (s(!0), a(w, null, k(e.row[e.field.code], (n) => (s(), a("div", S, [
37
- n.url ? (s(), c(u(F), {
36
+ (s(!0), a(w, null, k(e.row[e.field.code], (n) => (s(), a("div", F, [
37
+ n.url ? (s(), l(u(b), {
38
38
  key: 0,
39
39
  src: n.url,
40
40
  fit: "contain",
@@ -42,7 +42,7 @@ const m = (t) => (x("data-v-56e18295"), t = t(), B(), t), S = {
42
42
  class: "image"
43
43
  }, {
44
44
  error: _(() => [
45
- i("div", b, [
45
+ i("div", S, [
46
46
  D,
47
47
  i("div", null, I(o.value), 1)
48
48
  ])
@@ -52,9 +52,9 @@ const m = (t) => (x("data-v-56e18295"), t = t(), B(), t), S = {
52
52
  ]))), 256))
53
53
  ]),
54
54
  _: 1
55
- })) : (s(), c(f, { key: 1 }));
55
+ })) : (s(), l(f, { key: 1 }));
56
56
  }
57
- }, C = /* @__PURE__ */ h(V, [["__scopeId", "data-v-56e18295"]]);
57
+ }, C = /* @__PURE__ */ h(V, [["__scopeId", "data-v-e4bc2c79"]]);
58
58
  class $ extends v {
59
59
  constructor(e, o) {
60
60
  super(e, o), this.props = e.props, this.display = C, this.editor = y, this.converter = this.defaultBy(e.converter, (r) => r), this.checkValidProperties(e);
@@ -68,4 +68,4 @@ class $ extends v {
68
68
  export {
69
69
  $ as default
70
70
  };
71
- //# sourceMappingURL=config-Bu0VHLBr.js.map
71
+ //# sourceMappingURL=config-H7UfnxyZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-H7UfnxyZ.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,5 +1,5 @@
1
- import { _, E as x, s as S, B as V } from "./index-Bq_Z8Hm7.js";
2
- import { ref as i, watch as k, openBlock as f, createBlock as m, unref as b, reactive as w } from "vue";
1
+ import { _, E as x, s as S, B as V } from "./index-D5MVRDok.js";
2
+ import { ref as i, watch as k, openBlock as f, createBlock as m, unref as v, reactive as w } from "vue";
3
3
  import "./color-DbNhHNpt.js";
4
4
  import { ElTree as B, ElTreeSelect as T } from "element-plus";
5
5
  import { useRoute as g } from "vue-router";
@@ -23,7 +23,7 @@ const E = {
23
23
  async function d() {
24
24
  a.value = e.row[e.field.code], r.value = await e.field.options(), l.value = !0;
25
25
  }
26
- return k(() => e.row, d, { immediate: !0 }), (h, p) => l.value ? (f(), m(b(B), {
26
+ return k(() => e.row, d, { immediate: !0 }), (h, p) => l.value ? (f(), m(v(B), {
27
27
  key: 0,
28
28
  "default-checked-keys": a.value,
29
29
  style: { width: "100%" },
@@ -45,7 +45,7 @@ const E = {
45
45
  text: t.value
46
46
  }, null, 8, ["text"]));
47
47
  }
48
- }, F = /* @__PURE__ */ _(E, [["__scopeId", "data-v-fbd0b556"]]), j = {
48
+ }, F = /* @__PURE__ */ _(E, [["__scopeId", "data-v-f3f99ac4"]]), j = {
49
49
  __name: "FieldEditor",
50
50
  props: {
51
51
  modelValue: Number,
@@ -67,7 +67,7 @@ const E = {
67
67
  o
68
68
  );
69
69
  }
70
- function v(o, s) {
70
+ function b(o, s) {
71
71
  var n;
72
72
  return (n = t.field) != null && n.useApiSearchKeyword || !o ? !0 : s.name.includes(o);
73
73
  }
@@ -80,7 +80,7 @@ const E = {
80
80
  l.value = t.modelValue;
81
81
  },
82
82
  { immediate: !0 }
83
- ), p(), (o, s) => (f(), m(b(T), {
83
+ ), p(), (o, s) => (f(), m(v(T), {
84
84
  modelValue: l.value,
85
85
  "onUpdate:modelValue": s[0] || (s[0] = (n) => l.value = n),
86
86
  style: { width: "100%" },
@@ -99,7 +99,7 @@ const E = {
99
99
  "show-checkbox": "",
100
100
  filterable: "",
101
101
  clearable: "",
102
- "filter-node-method": v,
102
+ "filter-node-method": b,
103
103
  "remote-method": p,
104
104
  onCheck: y,
105
105
  onChange: y
@@ -120,4 +120,4 @@ class P extends V {
120
120
  export {
121
121
  P as default
122
122
  };
123
- //# sourceMappingURL=config-BeR4PpdP.js.map
123
+ //# sourceMappingURL=config-HEkYpTmG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-HEkYpTmG.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,4 +1,4 @@
1
- import { E as p, _ as f, B as h } from "./index-Bq_Z8Hm7.js";
1
+ import { E as p, _ as f, B as h } from "./index-D5MVRDok.js";
2
2
  import { ref as r, watch as u, openBlock as s, createElementBlock as _, toDisplayString as v, createBlock as c, reactive as y, unref as V } from "vue";
3
3
  import { ElDatePicker as D } from "element-plus";
4
4
  const Y = { key: 0 }, b = {
@@ -49,7 +49,7 @@ const Y = { key: 0 }, b = {
49
49
  onChange: a
50
50
  }, null, 8, ["modelValue", "disabled", "placeholder"]));
51
51
  }
52
- }, B = /* @__PURE__ */ f(E, [["__scopeId", "data-v-6a5d3aec"]]);
52
+ }, B = /* @__PURE__ */ f(E, [["__scopeId", "data-v-145e36e2"]]);
53
53
  class w extends h {
54
54
  constructor(e, t) {
55
55
  super(e, t), this.display = k, this.editor = B, this.width = this.computeWidth(e), this.checkValidProperties(e);
@@ -61,4 +61,4 @@ class w extends h {
61
61
  export {
62
62
  w as default
63
63
  };
64
- //# sourceMappingURL=config-CoRLR8yc.js.map
64
+ //# sourceMappingURL=config-ZqJ_p7Re.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-ZqJ_p7Re.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,4 +1,4 @@
1
- import { B as p } from "./index-Bq_Z8Hm7.js";
1
+ import { B as p } from "./index-D5MVRDok.js";
2
2
  import { ref as f, computed as h, openBlock as u, createElementBlock as b, createVNode as V, unref as c, reactive as v, watch as g, createBlock as y } from "vue";
3
3
  import { ElSwitch as m } from "element-plus";
4
4
  import "./el-switch-l0sNRNKZ.js";
@@ -67,4 +67,4 @@ class O extends p {
67
67
  export {
68
68
  O as default
69
69
  };
70
- //# sourceMappingURL=config-R1n9p5mL.js.map
70
+ //# sourceMappingURL=config-_n6i3lwk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-_n6i3lwk.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;"}