kouxiangtang 0.1.66 → 0.1.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AttachmentUploader-BzubzHgX.js → AttachmentUploader-BY2VmOGE.js} +2 -2
- package/dist/{AttachmentUploader-BzubzHgX.js.map → AttachmentUploader-BY2VmOGE.js.map} +1 -1
- package/dist/{ImageUploader-BqLlxX2H.js → ImageUploader-DCJkLQTW.js} +9 -9
- package/dist/ImageUploader-DCJkLQTW.js.map +1 -0
- package/dist/ImagesUploader-BC0EK9qE.js +155 -0
- package/dist/ImagesUploader-BC0EK9qE.js.map +1 -0
- package/dist/{RichTextEditor-DSxLPRzl.js → RichTextEditor-x1Xbn7_6.js} +2 -2
- package/dist/{RichTextEditor-DSxLPRzl.js.map → RichTextEditor-x1Xbn7_6.js.map} +1 -1
- package/dist/{config-Cc64pEZw.js → config-0tpL6UOh.js} +2 -2
- package/dist/{config-Cc64pEZw.js.map → config-0tpL6UOh.js.map} +1 -1
- package/dist/{config-BJIc8Q8v.js → config-6SRW9E8s.js} +2 -2
- package/dist/{config-BJIc8Q8v.js.map → config-6SRW9E8s.js.map} +1 -1
- package/dist/{config-C3L4xVg8.js → config-BCbHEasL.js} +2 -2
- package/dist/{config-C3L4xVg8.js.map → config-BCbHEasL.js.map} +1 -1
- package/dist/{config-T-LJIOm-.js → config-Bq9AD6oO.js} +2 -2
- package/dist/{config-T-LJIOm-.js.map → config-Bq9AD6oO.js.map} +1 -1
- package/dist/{config-itNoewWy.js → config-CEPoxT-s.js} +2 -2
- package/dist/{config-itNoewWy.js.map → config-CEPoxT-s.js.map} +1 -1
- package/dist/{config-6pQwKYUr.js → config-CEzYD1Ie.js} +2 -2
- package/dist/{config-6pQwKYUr.js.map → config-CEzYD1Ie.js.map} +1 -1
- package/dist/{config-C041dAbK.js → config-CMBZn3Km.js} +2 -2
- package/dist/{config-C041dAbK.js.map → config-CMBZn3Km.js.map} +1 -1
- package/dist/{config-CNNwGPYt.js → config-CivPj9pn.js} +2 -2
- package/dist/{config-CNNwGPYt.js.map → config-CivPj9pn.js.map} +1 -1
- package/dist/{config-DIwcXY0H.js → config-Ckry3bhy.js} +2 -2
- package/dist/{config-DIwcXY0H.js.map → config-Ckry3bhy.js.map} +1 -1
- package/dist/{config-BuW1dDQi.js → config-Clg5BOae.js} +3 -3
- package/dist/{config-BuW1dDQi.js.map → config-Clg5BOae.js.map} +1 -1
- package/dist/{config-CpUrgN2q.js → config-Cm-RXOeu.js} +3 -3
- package/dist/{config-CpUrgN2q.js.map → config-Cm-RXOeu.js.map} +1 -1
- package/dist/{config-DxN1X_cZ.js → config-CxuCSgD1.js} +2 -2
- package/dist/{config-DxN1X_cZ.js.map → config-CxuCSgD1.js.map} +1 -1
- package/dist/{config-C71oFWHV.js → config-D63cyALs.js} +2 -2
- package/dist/{config-C71oFWHV.js.map → config-D63cyALs.js.map} +1 -1
- package/dist/{config-M3yvxHMP.js → config-D8kYgBbw.js} +2 -2
- package/dist/{config-M3yvxHMP.js.map → config-D8kYgBbw.js.map} +1 -1
- package/dist/{config-D2qfQ0Tp.js → config-DGqxX7pQ.js} +2 -2
- package/dist/{config-D2qfQ0Tp.js.map → config-DGqxX7pQ.js.map} +1 -1
- package/dist/{config-CPtBIGlD.js → config-HFvGqnsM.js} +2 -2
- package/dist/{config-CPtBIGlD.js.map → config-HFvGqnsM.js.map} +1 -1
- package/dist/{config-BmX5G4Re.js → config-Jh1yifwo.js} +2 -2
- package/dist/{config-BmX5G4Re.js.map → config-Jh1yifwo.js.map} +1 -1
- package/dist/{config-NBzeHeGR.js → config-Oyq5iB6l.js} +2 -2
- package/dist/{config-NBzeHeGR.js.map → config-Oyq5iB6l.js.map} +1 -1
- package/dist/{config-NKSikvN5.js → config-ZqnSV1Oa.js} +2 -2
- package/dist/{config-NKSikvN5.js.map → config-ZqnSV1Oa.js.map} +1 -1
- package/dist/{config-CJfj2jCQ.js → config-jIBL42h8.js} +3 -3
- package/dist/{config-CJfj2jCQ.js.map → config-jIBL42h8.js.map} +1 -1
- package/dist/{index-BPlPVU99.js → index-DNFSi8-n.js} +4 -4
- package/dist/index-DNFSi8-n.js.map +1 -0
- package/dist/kouxiangtang.js +1 -1
- package/dist/kouxiangtang.umd.cjs +10 -10
- package/dist/kouxiangtang.umd.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/ImageUploader-BqLlxX2H.js.map +0 -1
- package/dist/ImagesUploader-DI3dNe5B.js +0 -141
- package/dist/ImagesUploader-DI3dNe5B.js.map +0 -1
- package/dist/index-BPlPVU99.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed as F, ref as y, openBlock as c, createElementBlock as k, Fragment as E, createVNode as r, unref as n, normalizeClass as M, withModifiers as R, withCtx as i, createBlock as f, createTextVNode as j, createElementVNode as U, renderList as L, toDisplayString as O, createCommentVNode as S } from "vue";
|
|
2
2
|
import { ElUpload as q, ElIcon as v, ElButton as W, ElDialog as G, ElForm as H, ElFormItem as J, ElInput as K, ElMessage as u, ElLoading as w } from "element-plus";
|
|
3
|
-
import { _ as Q, j as X, p as Y, d as Z, k as ee, h as te, m as ae } from "./index-
|
|
3
|
+
import { _ as Q, j as X, p as Y, d as Z, k as ee, h as te, m as ae } from "./index-DNFSi8-n.js";
|
|
4
4
|
import "./el-progress-l0sNRNKZ.js";
|
|
5
5
|
const se = ["src"], ne = { class: "file-type" }, le = {
|
|
6
6
|
__name: "AttachmentUploader",
|
|
@@ -222,4 +222,4 @@ const se = ["src"], ne = { class: "file-type" }, le = {
|
|
|
222
222
|
export {
|
|
223
223
|
ce as default
|
|
224
224
|
};
|
|
225
|
-
//# sourceMappingURL=AttachmentUploader-
|
|
225
|
+
//# sourceMappingURL=AttachmentUploader-BY2VmOGE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentUploader-BzubzHgX.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
|
+
{"version":3,"file":"AttachmentUploader-BY2VmOGE.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,6 +1,6 @@
|
|
|
1
|
-
import { openBlock as s, createBlock as o, unref as a, createSlots as v, withCtx as r, renderSlot as x, createVNode as m, withModifiers as I, createCommentVNode as S, createElementVNode as
|
|
2
|
-
import { ElUpload as
|
|
3
|
-
import { _ as
|
|
1
|
+
import { openBlock as s, createBlock as o, unref as a, createSlots as v, withCtx as r, renderSlot as x, createVNode as m, withModifiers as I, createCommentVNode as S, createElementVNode as b, toDisplayString as B } from "vue";
|
|
2
|
+
import { ElUpload as E, ElIcon as u, ElMessage as i, ElLoading as l } from "element-plus";
|
|
3
|
+
import { _ as M, j as C, H as D, p as L, n as N, m as V } from "./index-DNFSi8-n.js";
|
|
4
4
|
import "./el-progress-l0sNRNKZ.js";
|
|
5
5
|
const j = { class: "el-upload__tip" }, q = {
|
|
6
6
|
__name: "ImageUploader",
|
|
@@ -17,8 +17,8 @@ const j = { class: "el-upload__tip" }, q = {
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
emits: ["on-success"],
|
|
20
|
-
setup(
|
|
21
|
-
const n =
|
|
20
|
+
setup(f, { emit: g }) {
|
|
21
|
+
const n = g, e = f, p = C().imageUploadUrl;
|
|
22
22
|
`${localStorage.getItem("token")}`;
|
|
23
23
|
const _ = (t) => {
|
|
24
24
|
if (!(t.size / 1024 / 1024 < 5))
|
|
@@ -48,7 +48,7 @@ const j = { class: "el-upload__tip" }, q = {
|
|
|
48
48
|
});
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
return (t, c) => (s(), o(a(
|
|
51
|
+
return (t, c) => (s(), o(a(E), {
|
|
52
52
|
class: "image-uploader",
|
|
53
53
|
action: a(p),
|
|
54
54
|
name: "image",
|
|
@@ -94,14 +94,14 @@ const j = { class: "el-upload__tip" }, q = {
|
|
|
94
94
|
e.props.tip ? {
|
|
95
95
|
name: "tip",
|
|
96
96
|
fn: r(() => [
|
|
97
|
-
|
|
97
|
+
b("div", j, B(e.props.tip), 1)
|
|
98
98
|
]),
|
|
99
99
|
key: "0"
|
|
100
100
|
} : void 0
|
|
101
101
|
]), 1032, ["action", "accept"]));
|
|
102
102
|
}
|
|
103
|
-
}, F = /* @__PURE__ */
|
|
103
|
+
}, F = /* @__PURE__ */ M(q, [["__scopeId", "data-v-11ed7abf"]]);
|
|
104
104
|
export {
|
|
105
105
|
F as default
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=ImageUploader-
|
|
107
|
+
//# sourceMappingURL=ImageUploader-DCJkLQTW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageUploader-DCJkLQTW.js","sources":["../src/framework/field/image/ImageUploader.vue"],"sourcesContent":["<script setup>\nimport { ElUpload, ElImage, ElIcon } from \"element-plus\";\nimport axios from \"axios\";\nimport { getConfig } from \"../../config-loader\";\nimport { ElLoading, ElMessage } from \"element-plus\";\nimport { Plus, Delete, Loading } from \"@element-plus/icons-vue\";\nimport HeicImage from \"../../component/HeicImage.vue\";\n\nconst emit = defineEmits([\"on-success\"]);\nconst props = defineProps({\n imageUrl: { type: String },\n props: {\n type: Object,\n default() {\n return {\n accept: \"image/*\",\n tip: \"\",\n };\n },\n },\n});\nconst uploadUrl = getConfig().imageUploadUrl;\nconst header = {\n Authorization: `Bearer ${localStorage.getItem(\"token\")}`,\n};\nconst handleBeforeUpload = (uploadFile) => {\n const isLt2M = uploadFile.size / 1024 / 1024 < 5;\n if (!isLt2M) {\n ElMessage({\n message: \"上传大小不能超过 5MB!\",\n type: \"warning\",\n });\n return false;\n }\n};\nconst handleSuccess = (response) => {\n emit(\"on-success\", response.data.imageUrl);\n};\n\nfunction deleteImageUrl() {\n emit(\"on-success\", \"\");\n}\n\nfunction uploadRequest(file) {\n ElLoading.service({ text: \"上传中,请稍后\", background: \"rgba(0,0,0,0.3)\" });\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append(\"image\", file.file);\n axios\n .post(uploadUrl, formData, {})\n .then((res) => {\n ElLoading.service().close();\n ElMessage({\n message: \"上传成功\",\n type: \"success\",\n });\n resolve(res.data);\n })\n .catch(() => {\n ElLoading.service().close();\n ElMessage({\n message: \"上传失败\",\n type: \"warning\",\n });\n reject(\"Upload failed\");\n });\n });\n}\n</script>\n\n<template>\n <!-- 删除请求头加权限后请添加到组建中 :headers=\"header\"-->\n <el-upload\n class=\"image-uploader\"\n :action=\"uploadUrl\"\n name=\"image\"\n :show-file-list=\"false\"\n :accept=\"props.props.accept\"\n :on-success=\"handleSuccess\"\n :before-upload=\"handleBeforeUpload\"\n :http-request=\"uploadRequest\"\n >\n <slot />\n <HeicImage\n v-if=\"props.imageUrl\"\n :src=\"props.imageUrl\"\n :preview-src-list=\"[props.imageUrl]\"\n fit=\"scale-down\"\n class=\"image\"\n width=\"146px\"\n height=\"146px\"\n hide-on-click-modal\n />\n <el-icon v-else class=\"uploader-icon\">\n <Plus />\n </el-icon>\n <el-icon\n v-if=\"props.imageUrl\"\n class=\"delete-icon\"\n @click.stop.prevent=\"deleteImageUrl\"\n >\n <Delete />\n </el-icon>\n <template v-if=\"props.props.tip\" #tip>\n <div class=\"el-upload__tip\">{{ props.props.tip }}</div>\n </template>\n </el-upload>\n</template>\n\n<style scoped lang=\"scss\">\n.image-uploader {\n :deep(.el-upload) {\n border: 1px dashed var(--el-border-color);\n border-radius: 6px;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n transition: var(--el-transition-duration-fast);\n\n &:hover {\n border-color: var(--el-color-primary);\n }\n }\n\n .image {\n width: 146px;\n height: 146px;\n\n .placeholder-icon {\n width: 146px;\n height: 146px;\n font-size: 30px;\n color: #a7a7a7;\n }\n }\n\n .uploader-icon {\n font-size: 28px;\n color: #8c939d;\n width: 146px;\n height: 146px;\n text-align: center;\n }\n\n .delete-icon {\n font-size: 20px;\n color: #b7b4b4;\n position: absolute;\n top: 10px;\n right: 10px;\n }\n}\n</style>\n"],"names":["emit","__emit","props","__props","uploadUrl","getConfig","handleBeforeUpload","uploadFile","ElMessage","handleSuccess","response","deleteImageUrl","uploadRequest","file","ElLoading","resolve","reject","formData","axios","res"],"mappings":";;;;;;;;;;;;;;;;;;;;AAQA,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { ref as g, computed as V, openBlock as r, createElementBlock as c, Fragment as v, renderList as P, createBlock as d, createCommentVNode as T, createVNode as m, unref as s, normalizeClass as U, withModifiers as B, createSlots as D, withCtx as o, createTextVNode as N, createElementVNode as y, toDisplayString as z } from "vue";
|
|
2
|
+
import { ElUpload as C, ElIcon as S, ElButton as M, ElDialog as $, ElMessage as _ } from "element-plus";
|
|
3
|
+
import { _ as q, H, p as O, h as R } from "./index-DNFSi8-n.js";
|
|
4
|
+
import "./el-progress-l0sNRNKZ.js";
|
|
5
|
+
const j = { style: { display: "flex", "flex-wrap": "wrap" } }, A = { class: "el-upload__tip" }, L = ["src"], F = {
|
|
6
|
+
__name: "ImagesUploader",
|
|
7
|
+
props: {
|
|
8
|
+
images: {
|
|
9
|
+
type: Array,
|
|
10
|
+
default() {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
limit: { type: Number },
|
|
15
|
+
props: {
|
|
16
|
+
type: Object,
|
|
17
|
+
default() {
|
|
18
|
+
return {
|
|
19
|
+
listType: "picture-card",
|
|
20
|
+
limit: 5,
|
|
21
|
+
accept: "image/*",
|
|
22
|
+
tip: ""
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
emits: ["on-remove", "on-upload"],
|
|
28
|
+
setup(w, { emit: h }) {
|
|
29
|
+
const n = h, f = g(""), p = g(!1), t = w, i = V(() => t.images.map((e) => {
|
|
30
|
+
if (!(e != null && e.url))
|
|
31
|
+
return { ...e, name: "unknown", fileType: "unknown" };
|
|
32
|
+
const l = e.url.substring(e.url.lastIndexOf(".") + 1), a = e.url.split("/");
|
|
33
|
+
return {
|
|
34
|
+
...e,
|
|
35
|
+
name: a[a.length - 1],
|
|
36
|
+
fileType: l
|
|
37
|
+
};
|
|
38
|
+
}));
|
|
39
|
+
function x(e) {
|
|
40
|
+
var l, a;
|
|
41
|
+
if (t.props.deleteParams) {
|
|
42
|
+
const u = (l = t.props.deleteParams) != null && l.data ? (a = t.props.deleteParams) == null ? void 0 : a.data : {};
|
|
43
|
+
R.remove(
|
|
44
|
+
`${t.props.deleteParams.url}/${e.id}/attachment`,
|
|
45
|
+
u,
|
|
46
|
+
u
|
|
47
|
+
).then(() => {
|
|
48
|
+
n("on-remove", e);
|
|
49
|
+
});
|
|
50
|
+
} else
|
|
51
|
+
n("on-remove", e);
|
|
52
|
+
}
|
|
53
|
+
function k() {
|
|
54
|
+
_({
|
|
55
|
+
message: `最多只能上传 ${t.props.limit} 个文件!`,
|
|
56
|
+
type: "warning"
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function b(e) {
|
|
60
|
+
f.value = e.url, p.value = !0;
|
|
61
|
+
}
|
|
62
|
+
function I(e) {
|
|
63
|
+
return e.size > 5242880 ? (_({
|
|
64
|
+
message: "上传大小不能超过 5MB!",
|
|
65
|
+
type: "warning"
|
|
66
|
+
}), !1) : !0;
|
|
67
|
+
}
|
|
68
|
+
function E(e) {
|
|
69
|
+
const l = new FormData();
|
|
70
|
+
l.append("file", e.file), n("on-upload", l);
|
|
71
|
+
}
|
|
72
|
+
return (e, l) => (r(), c("div", j, [
|
|
73
|
+
(r(!0), c(v, null, P(i.value, (a) => (r(), c(v, {
|
|
74
|
+
key: a.url
|
|
75
|
+
}, [
|
|
76
|
+
a.url ? (r(), d(H, {
|
|
77
|
+
key: 0,
|
|
78
|
+
src: a.url,
|
|
79
|
+
"preview-src-list": [a.url],
|
|
80
|
+
fit: "scale-down",
|
|
81
|
+
class: "image",
|
|
82
|
+
width: "146px",
|
|
83
|
+
height: "146px",
|
|
84
|
+
"hide-on-click-modal": ""
|
|
85
|
+
}, null, 8, ["src", "preview-src-list"])) : T("", !0)
|
|
86
|
+
], 64))), 128)),
|
|
87
|
+
m(s(C), {
|
|
88
|
+
"file-list": i.value,
|
|
89
|
+
limit: t.props.limit,
|
|
90
|
+
accept: t.props.accept,
|
|
91
|
+
"list-type": t.props.listType,
|
|
92
|
+
"on-remove": x,
|
|
93
|
+
"on-exceed": k,
|
|
94
|
+
"on-preview": b,
|
|
95
|
+
multiple: !0,
|
|
96
|
+
"before-upload": I,
|
|
97
|
+
"http-request": E,
|
|
98
|
+
"show-file-list": !1,
|
|
99
|
+
class: U([
|
|
100
|
+
"upload-main",
|
|
101
|
+
{ "disable-upload": i.value.length >= t.props.limit }
|
|
102
|
+
]),
|
|
103
|
+
onClick: l[0] || (l[0] = B(() => {
|
|
104
|
+
}, ["prevent"]))
|
|
105
|
+
}, D({
|
|
106
|
+
default: o(() => [
|
|
107
|
+
t.props.listType !== "text" ? (r(), d(s(S), {
|
|
108
|
+
key: 0,
|
|
109
|
+
disabled: !0
|
|
110
|
+
}, {
|
|
111
|
+
default: o(() => [
|
|
112
|
+
m(s(O))
|
|
113
|
+
]),
|
|
114
|
+
_: 1
|
|
115
|
+
})) : (r(), d(s(M), {
|
|
116
|
+
key: 1,
|
|
117
|
+
class: "upload-button",
|
|
118
|
+
type: "primary"
|
|
119
|
+
}, {
|
|
120
|
+
default: o(() => [
|
|
121
|
+
N(" 上传附件 ")
|
|
122
|
+
]),
|
|
123
|
+
_: 1
|
|
124
|
+
}))
|
|
125
|
+
]),
|
|
126
|
+
_: 2
|
|
127
|
+
}, [
|
|
128
|
+
t.props.tip ? {
|
|
129
|
+
name: "tip",
|
|
130
|
+
fn: o(() => [
|
|
131
|
+
y("div", A, z(t.props.tip), 1)
|
|
132
|
+
]),
|
|
133
|
+
key: "0"
|
|
134
|
+
} : void 0
|
|
135
|
+
]), 1032, ["file-list", "limit", "accept", "list-type", "class"]),
|
|
136
|
+
m(s($), {
|
|
137
|
+
modelValue: p.value,
|
|
138
|
+
"onUpdate:modelValue": l[1] || (l[1] = (a) => p.value = a)
|
|
139
|
+
}, {
|
|
140
|
+
default: o(() => [
|
|
141
|
+
y("img", {
|
|
142
|
+
"w-full": "",
|
|
143
|
+
src: f.value,
|
|
144
|
+
alt: "Preview Image"
|
|
145
|
+
}, null, 8, L)
|
|
146
|
+
]),
|
|
147
|
+
_: 1
|
|
148
|
+
}, 8, ["modelValue"])
|
|
149
|
+
]));
|
|
150
|
+
}
|
|
151
|
+
}, W = /* @__PURE__ */ q(F, [["__scopeId", "data-v-5ba16803"]]);
|
|
152
|
+
export {
|
|
153
|
+
W as default
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=ImagesUploader-BC0EK9qE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImagesUploader-BC0EK9qE.js","sources":["../src/framework/field/images/ImagesUploader.vue"],"sourcesContent":["<script setup>\nimport { ElUpload, ElDialog, ElIcon, ElButton } from \"element-plus\";\nimport { computed, ref } from \"vue\";\nimport { ElMessage } from \"element-plus\";\nimport { Plus } from \"@element-plus/icons-vue\";\nimport http from \"../../utils/http\";\nimport HeicImage from \"../../component/HeicImage.vue\";\n\nconst emit = defineEmits([\"on-remove\", \"on-upload\"]);\nconst dialogImageUrl = ref(\"\");\nconst dialogVisible = ref(false);\nconst props = defineProps({\n images: {\n type: Array,\n default() {\n return [];\n },\n },\n limit: { type: Number },\n props: {\n type: Object,\n default() {\n return {\n listType: \"picture-card\",\n limit: 5,\n accept: \"image/*\",\n tip: \"\",\n };\n },\n },\n});\n\nconst files = computed(() => {\n return props.images.map((item) => {\n if (!item?.url) {\n return { ...item, name: \"unknown\", fileType: \"unknown\" };\n }\n\n const fileType = item.url.substring(item.url.lastIndexOf(\".\") + 1);\n const parts = item.url.split(\"/\");\n const namedItem = {\n ...item,\n name: parts[parts.length - 1],\n fileType,\n };\n return namedItem;\n });\n});\n\nfunction onRemove(uploadFile) {\n if (props.props.deleteParams) {\n const paramsData = props.props.deleteParams?.data\n ? props.props.deleteParams?.data\n : {};\n http\n .remove(\n `${props.props.deleteParams.url}/${uploadFile.id}/attachment`,\n paramsData,\n paramsData,\n )\n .then(() => {\n emit(\"on-remove\", uploadFile);\n });\n } else {\n emit(\"on-remove\", uploadFile);\n }\n}\n\nfunction onExceed() {\n ElMessage({\n message: `最多只能上传 ${props.props.limit} 个文件!`,\n type: \"warning\",\n });\n}\n\nfunction onPreview(uploadFile) {\n dialogImageUrl.value = uploadFile.url;\n dialogVisible.value = true;\n}\n\nfunction beforeUpload(uploadFile) {\n const limitSize = 1024 * 1024 * 5;\n if (uploadFile.size > limitSize) {\n ElMessage({\n message: \"上传大小不能超过 5MB!\",\n type: \"warning\",\n });\n return false;\n }\n\n return true;\n}\n\nfunction httpRequest(uploadFile) {\n const formData = new FormData();\n formData.append(\"file\", uploadFile.file);\n emit(\"on-upload\", formData);\n}\n</script>\n\n<template>\n <div style=\"display: flex; flex-wrap: wrap\">\n <template v-for=\"item in files\" :key=\"item.url\">\n <HeicImage\n v-if=\"item.url\"\n :src=\"item.url\"\n :preview-src-list=\"[item.url]\"\n fit=\"scale-down\"\n class=\"image\"\n width=\"146px\"\n height=\"146px\"\n hide-on-click-modal\n />\n </template>\n <el-upload\n :file-list=\"files\"\n :limit=\"props.props.limit\"\n :accept=\"props.props.accept\"\n :list-type=\"props.props.listType\"\n :on-remove=\"onRemove\"\n :on-exceed=\"onExceed\"\n :on-preview=\"onPreview\"\n :multiple=\"true\"\n :before-upload=\"beforeUpload\"\n :http-request=\"httpRequest\"\n :show-file-list=\"false\"\n :class=\"[\n 'upload-main',\n { 'disable-upload': files.length >= props.props.limit },\n ]\"\n @click.prevent\n >\n <template v-if=\"props.props.listType !== 'text'\">\n <el-icon :disabled=\"true\">\n <Plus />\n </el-icon>\n </template>\n <template v-else>\n <el-button class=\"upload-button\" type=\"primary\"> 上传附件 </el-button>\n </template>\n <template v-if=\"props.props.tip\" #tip>\n <div class=\"el-upload__tip\">{{ props.props.tip }}</div>\n </template>\n </el-upload>\n <el-dialog v-model=\"dialogVisible\">\n <img w-full :src=\"dialogImageUrl\" alt=\"Preview Image\" />\n </el-dialog>\n </div>\n</template>\n<style scoped lang=\"scss\">\n:deep(.el-upload-list) {\n .el-upload-list__item-actions span {\n margin-left: 20px;\n }\n}\n.image {\n border: 1px dashed var(--el-border-color);\n border-radius: 6px;\n cursor: pointer;\n}\n.disable-upload {\n :deep(.el-upload--picture-card) {\n display: none !important;\n }\n\n :deep(.el-upload--text) {\n display: none !important;\n }\n\n :deep(.el-upload--picture) {\n display: none !important;\n }\n}\n.upload-main {\n //flex-basis: 100%;\n}\n.file-list {\n display: flex;\n align-items: center;\n margin-top: 10px;\n .file-type {\n height: 22px;\n line-height: 22px;\n margin-right: 5px;\n background: #eeeeee;\n border-radius: 4px;\n font-size: 12px;\n padding: 0 4px;\n }\n :deep(.el-form-item__content) {\n display: contents;\n }\n :deep(.el-input__wrapper) {\n margin: 0 5px;\n }\n :deep(.el-input__inner) {\n height: 20px;\n line-height: 20px;\n }\n}\n</style>\n"],"names":["emit","__emit","dialogImageUrl","ref","dialogVisible","props","__props","files","computed","item","fileType","parts","onRemove","uploadFile","paramsData","_a","_b","http","onExceed","ElMessage","onPreview","beforeUpload","httpRequest","formData"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,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,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as rr, onMounted as ir, onBeforeUnmount as ar, ref as $n, watch as Pn, nextTick as Gn, h as or, computed as sr, openBlock as ur, createBlock as lr, unref as fr } from "vue";
|
|
2
2
|
import * as rt from "quill";
|
|
3
3
|
import Rn from "quill";
|
|
4
|
-
import { o as W, r as cr, m as hr, j as dr } from "./index-
|
|
4
|
+
import { o as W, r as cr, m as hr, j as dr } from "./index-DNFSi8-n.js";
|
|
5
5
|
import { ElMessage as Ln } from "element-plus";
|
|
6
6
|
var ue = -1, re = 1, Z = 0;
|
|
7
7
|
function at(r, a, n, u) {
|
|
@@ -1811,4 +1811,4 @@ const Wn = {
|
|
|
1811
1811
|
export {
|
|
1812
1812
|
Rr as default
|
|
1813
1813
|
};
|
|
1814
|
-
//# sourceMappingURL=RichTextEditor-
|
|
1814
|
+
//# sourceMappingURL=RichTextEditor-x1Xbn7_6.js.map
|