workdesktop-ai 1.1.0 → 1.1.1
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/api-button/index.mjs +1 -1
- package/dist/auto-complete/index.mjs +1 -1
- package/dist/checkbox-list/index.mjs +1 -1
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-CweWFfDE.mjs → ApiButton.vue_vue_type_script_setup_true_lang-KKzJxwpV.mjs} +2 -2
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-CweWFfDE.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-KKzJxwpV.mjs.map} +1 -1
- package/dist/chunks/{AutoComplete-B_L169hU.mjs → AutoComplete-CLV_PwcZ.mjs} +2 -2
- package/dist/chunks/{AutoComplete-B_L169hU.mjs.map → AutoComplete-CLV_PwcZ.mjs.map} +1 -1
- package/dist/chunks/{CheckboxList-bPqpbd8d.mjs → CheckboxList-Bx3Ce1q5.mjs} +2 -2
- package/dist/chunks/{CheckboxList-bPqpbd8d.mjs.map → CheckboxList-Bx3Ce1q5.mjs.map} +1 -1
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-D4w6G2Kv.mjs} +2 -2
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-D4w6G2Kv.mjs.map} +1 -1
- package/dist/chunks/{DataForm-C6UW92Ds.mjs → DataForm-C5MBVdei.mjs} +2 -2
- package/dist/chunks/{DataForm-C6UW92Ds.mjs.map → DataForm-C5MBVdei.mjs.map} +1 -1
- package/dist/chunks/{DataGrid-BhgND4G_.mjs → DataGrid-HUzKWuQx.mjs} +3 -3
- package/dist/chunks/{DataGrid-BhgND4G_.mjs.map → DataGrid-HUzKWuQx.mjs.map} +1 -1
- package/dist/chunks/{EditableGrid-Cx7ScWkW.mjs → EditableGrid-C8A-nJZv.mjs} +3 -3
- package/dist/chunks/{EditableGrid-Cx7ScWkW.mjs.map → EditableGrid-C8A-nJZv.mjs.map} +1 -1
- package/dist/chunks/{ImageUpload-D3JGJjVO.mjs → ImageUpload-DGehzaYa.mjs} +2 -2
- package/dist/chunks/{ImageUpload-D3JGJjVO.mjs.map → ImageUpload-DGehzaYa.mjs.map} +1 -1
- package/dist/chunks/{Panel-d4chdlTA.mjs → Panel-CrRqBTj6.mjs} +33 -31
- package/dist/chunks/Panel-CrRqBTj6.mjs.map +1 -0
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs → PromptButton.vue_vue_type_script_setup_true_lang-Gck1QAHc.mjs} +2 -2
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-Gck1QAHc.mjs.map} +1 -1
- package/dist/chunks/{RadioList-DT-8WSN2.mjs → RadioList-vE8JOuST.mjs} +2 -2
- package/dist/chunks/{RadioList-DT-8WSN2.mjs.map → RadioList-vE8JOuST.mjs.map} +1 -1
- package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs → Requester.vue_vue_type_script_setup_true_lang-B8TwXbYR.mjs} +2 -2
- package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs.map → Requester.vue_vue_type_script_setup_true_lang-B8TwXbYR.mjs.map} +1 -1
- package/dist/chunks/{Select-CMw-tWYm.mjs → Select-DAGZDXvI.mjs} +2 -2
- package/dist/chunks/{Select-CMw-tWYm.mjs.map → Select-DAGZDXvI.mjs.map} +1 -1
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-CCU_d3jW.mjs → Switch.vue_vue_type_script_setup_true_lang-CulPqp7M.mjs} +2 -2
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-CCU_d3jW.mjs.map → Switch.vue_vue_type_script_setup_true_lang-CulPqp7M.mjs.map} +1 -1
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs → Upload.vue_vue_type_script_setup_true_lang-D07Bhllc.mjs} +2 -2
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs.map → Upload.vue_vue_type_script_setup_true_lang-D07Bhllc.mjs.map} +1 -1
- package/dist/chunks/{Viewer-COLbtcgF.mjs → Viewer-iub6TjoD.mjs} +2 -2
- package/dist/chunks/{Viewer-COLbtcgF.mjs.map → Viewer-iub6TjoD.mjs.map} +1 -1
- package/dist/chunks/{http-DUPsbs2K.mjs → http-Bs-dM076.mjs} +2 -2
- package/dist/chunks/{http-DUPsbs2K.mjs.map → http-Bs-dM076.mjs.map} +1 -1
- package/dist/chunks/{useApiAction-C1CdKGjt.mjs → useApiAction-6_vvf5Fd.mjs} +2 -2
- package/dist/chunks/{useApiAction-C1CdKGjt.mjs.map → useApiAction-6_vvf5Fd.mjs.map} +1 -1
- package/dist/chunks/{useColumnSettings-BDtF5-8R.mjs → useColumnSettings-BYDQdk4o.mjs} +2 -2
- package/dist/chunks/{useColumnSettings-BDtF5-8R.mjs.map → useColumnSettings-BYDQdk4o.mjs.map} +1 -1
- package/dist/chunks/{useOptionsLoader-D0RTB_ar.mjs → useOptionsLoader-Bi8oqNbG.mjs} +2 -2
- package/dist/chunks/{useOptionsLoader-D0RTB_ar.mjs.map → useOptionsLoader-Bi8oqNbG.mjs.map} +1 -1
- package/dist/confirm-button/index.mjs +1 -1
- package/dist/data-form/index.mjs +1 -1
- package/dist/data-grid/index.mjs +1 -1
- package/dist/editable-grid/index.mjs +1 -1
- package/dist/image-upload/index.mjs +1 -1
- package/dist/index.esm.js +21 -21
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/panel/index.mjs +1 -1
- package/dist/panel/style.css +1 -1
- package/dist/prompt-button/index.mjs +1 -1
- package/dist/radio-list/index.mjs +1 -1
- package/dist/requester/index.mjs +1 -1
- package/dist/select/index.mjs +1 -1
- package/dist/style.css +1 -1
- package/dist/switch/index.mjs +1 -1
- package/dist/types/src/components/styles/Panel.vue.d.ts +11 -0
- package/dist/upload/index.mjs +1 -1
- package/dist/viewer/index.mjs +1 -1
- package/llms.txt +658 -0
- package/package.json +3 -2
- package/dist/chunks/Panel-d4chdlTA.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs","sources":["../../src/components/upload/Upload.vue"],"sourcesContent":["<template>\n <el-upload\n ref=\"uploadRef\"\n :action=\"resolvedAction\"\n :headers=\"uploadHeaders\"\n :accept=\"accept\"\n :limit=\"limit\"\n :multiple=\"multiple\"\n :auto-upload=\"autoUpload\"\n :name=\"name\"\n :data=\"data\"\n :disabled=\"disabled\"\n :show-file-list=\"showFileList\"\n v-model:file-list=\"innerFileList\"\n :before-upload=\"beforeUpload\"\n :before-remove=\"beforeRemove\"\n :on-success=\"onSuccess\"\n :on-error=\"onError\"\n :on-remove=\"onRemove\"\n :on-exceed=\"onExceed\"\n :on-preview=\"onPreview\"\n v-bind=\"$attrs\"\n >\n <slot>\n <el-button type=\"primary\">{{ buttonText }}</el-button>\n </slot>\n <template v-if=\"withSubmit && !autoUpload\" #tip>\n <div class=\"el-upload__tip\">\n <el-button size=\"small\" type=\"success\" :loading=\"submitting\" @click.stop=\"submitUpload\">\n {{ submitButtonText }}\n </el-button>\n </div>\n </template>\n </el-upload>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onMounted, ref, watch } from 'vue'\nimport type { UploadFile, UploadFiles, UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { request } from '../../lib/core/http'\nimport { getGlobalConfig } from '../../lib/core/config'\nimport { refreshDataGrid } from '../../lib/core/linkage'\nimport { filterProp, headRefreshDatagridProp } from '../common/props'\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'WdUpload', inheritAttrs: false })\n\nconst props = defineProps({\n ...filterProp,\n ...headRefreshDatagridProp,\n /** 上传地址(走全局 urlPrefix 拼接;为空则 el-upload 不真正提交,由外部接管) */\n api: { type: String, default: '' },\n /** 后端删除地址 */\n deleteApi: { type: String, default: '' },\n /** 删除请求方法 */\n deleteMethod: {\n type: String as PropType<'get' | 'post' | 'put' | 'delete'>,\n default: 'post'\n },\n /** 删除时取文件记录的主键字段名 */\n primaryKey: { type: String, default: 'id' },\n /** 手动提交按钮文案(auto-upload=false 时显示) */\n submitButtonText: { type: String, default: '开始上传' },\n /** 选择按钮文案(默认插槽未提供时) */\n buttonText: { type: String, default: '点击上传' },\n // ---- el-upload 同名透传 ----\n accept: { type: String, default: '' },\n limit: { type: Number, default: undefined },\n multiple: { type: Boolean, default: false },\n autoUpload: { type: Boolean, default: true },\n /** 上传字段名 */\n name: { type: String, default: 'file' },\n /** 附加表单数据 */\n data: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\n disabled: { type: Boolean, default: false },\n showFileList: { type: Boolean, default: true },\n /** 文件大小限制(MB),0 不限制 */\n maxSize: { type: Number, default: 0 },\n /** v-model 绑定的已上传文件列表(含后端返回记录) */\n modelValue: { type: Array as PropType<UploadUserFile[]>, default: () => [] }\n})\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'change',\n 'success',\n 'error',\n 'delete-success',\n 'preview',\n 'exceed',\n 'apiBefore',\n 'apiSuccess',\n 'apiFail',\n 'apiException',\n 'apiAfter'\n])\n\nconst instance = getCurrentInstance()\nconst uploadRef = ref<UploadInstance>()\nconst submitting = ref(false)\nconst innerFileList = ref<UploadUserFile[]>([...props.modelValue])\n\nwatch(\n () => props.modelValue,\n (val) => {\n innerFileList.value = [...val]\n }\n)\n\n/** 拼接完整上传地址(el-upload 原生 XHR 不走 axios 实例,需自行拼 prefix) */\nconst resolvedAction = computed(() => {\n if (!props.api) return '#'\n if (/^https?:\\/\\//.test(props.api)) return props.api\n const cfg = getGlobalConfig()\n const prefix = cfg.request.urlPrefix || ''\n return prefix ? `${prefix.replace(/\\/$/, '')}/${props.api.replace(/^\\//, '')}` : props.api\n})\n\n/** 透传全局请求头(如 Authorization) */\nconst uploadHeaders = computed<Record<string, string>>(() => {\n const cfg = getGlobalConfig()\n const headers: Record<string, string> = {}\n const interceptor = cfg.request.transform.requestInterceptor\n // requestInterceptor 为 async,无法同步取头;此处仅注入静态 token 头\n const token = (cfg.request as any).token || ''\n if (token) headers.Authorization = `Bearer ${token}`\n return headers\n})\n\nconst withSubmit = computed(() => !props.autoUpload)\n\nfunction syncModel() {\n emit('update:modelValue', innerFileList.value)\n emit('change', innerFileList.value)\n}\n\nconst beforeUpload: UploadProps['beforeUpload'] = (rawFile) => {\n if (props.maxSize && rawFile.size / 1024 / 1024 > props.maxSize) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB`)\n return false\n }\n emit('apiBefore', { url: props.api, file: rawFile })\n return true\n}\n\n/** el-upload 原生 XHR 成功回调:按全局解封约定判断业务成败 */\nconst onSuccess: UploadProps['onSuccess'] = (response, uploadFile, uploadFiles) => {\n const cfg = getGlobalConfig()\n const { codeName } = cfg.response.props\n const code = response?.[codeName]\n const ok = code === undefined || code === null || Number.isNaN(Number(code)) || Number(code) >= cfg.response.successCode\n\n // 把后端返回记录挂到文件对象,供删除时取主键\n ;(uploadFile as any).response = response\n if (ok && response?.[cfg.response.props.dataName]) {\n const bizData = response[cfg.response.props.dataName]\n ;(uploadFile as any).biz = bizData\n if (bizData && typeof bizData === 'object') {\n uploadFile.url = uploadFile.url || bizData.url || bizData.path\n }\n }\n\n if (ok) {\n emit('success', { response, file: uploadFile, files: uploadFiles })\n emit('apiSuccess', { data: response?.[cfg.response.props.dataName], raw: response })\n if (props.headRefreshDatagrid) refreshDataGrid(props.headRefreshDatagrid, props.filter)\n } else {\n ElMessage.error(response?.[cfg.response.props.messageName] || '上传失败')\n emit('error', { response, file: uploadFile })\n emit('apiFail', { code, message: response?.[cfg.response.props.messageName] })\n }\n emit('apiAfter', { url: props.api })\n syncModel()\n}\n\nconst onError: UploadProps['onError'] = (err, uploadFile, uploadFiles) => {\n ElMessage.error('上传失败,请稍后重试')\n emit('error', { error: err, file: uploadFile, files: uploadFiles })\n emit('apiException', { error: err, message: err?.message })\n emit('apiAfter', { url: props.api, error: err })\n syncModel()\n}\n\n/**\n * 删除前置钩子:二次确认 + 已上传文件走后端删除接口\n * 返回 false / reject Promise 中止移除(el-upload 约定)\n */\nconst beforeRemove: UploadProps['beforeRemove'] = async (uploadFile) => {\n try {\n await ElMessageBox.confirm('确认删除该文件?删除后不可恢复。', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n } catch {\n return false\n }\n\n const biz = (uploadFile as any).biz || uploadFile\n const fileId = biz?.[props.primaryKey] ?? (uploadFile.response as any)?.[props.primaryKey]\n\n if (props.deleteApi && fileId !== undefined && fileId !== null) {\n emit('apiBefore', { url: props.deleteApi })\n try {\n const param = { ...(props.data || {}), [props.primaryKey]: fileId }\n const result =\n props.deleteMethod === 'get'\n ? await request.get(props.deleteApi, param)\n : props.deleteMethod === 'delete'\n ? await request.delete(props.deleteApi, param)\n : props.deleteMethod === 'put'\n ? await request.put(props.deleteApi, param)\n : await request.post(props.deleteApi, param)\n if (result.success) {\n emit('delete-success', { file: uploadFile, data: result.data })\n emit('apiSuccess', { data: result.data })\n if (props.headRefreshDatagrid) refreshDataGrid(props.headRefreshDatagrid, props.filter)\n } else {\n emit('apiFail', { code: result.code, message: result.message })\n return false\n }\n } catch (error: any) {\n emit('apiException', { error, message: error?.message })\n return false\n } finally {\n emit('apiAfter', { url: props.deleteApi })\n }\n } else {\n // 仅本地移除(未上传成功或未配置删除接口)\n emit('delete-success', { file: uploadFile })\n }\n return true\n}\n\n/** 文件已从列表移除(el-upload 内部状态已更新) */\nconst onRemove: UploadProps['onRemove'] = () => {\n syncModel()\n}\n\nconst onExceed: UploadProps['onExceed'] = (selectedFiles, uploadFiles) => {\n ElMessage.warning(`最多上传 ${props.limit} 个文件`)\n emit('exceed', { selectedFiles, files: uploadFiles })\n}\n\nconst onPreview: UploadProps['onPreview'] = (uploadFile) => {\n emit('preview', { file: uploadFile })\n}\n\n/** 手动触发上传(auto-upload=false) */\nfunction submitUpload() {\n uploadRef.value?.submit()\n}\n\nfunction clearFiles() {\n uploadRef.value?.clearFiles()\n innerFileList.value = []\n syncModel()\n}\n\n/** 追加外部文件记录(如表单回显) */\nfunction addFile(file: UploadUserFile) {\n innerFileList.value = [...innerFileList.value, file]\n syncModel()\n}\n\nonMounted(() => {\n // 暴露给 HTML 场景根作用域(与 model/q 模式一致)\n if (instance) {\n instance.appContext.config.globalProperties.$wdUpload = { submitUpload, clearFiles }\n }\n})\n\ndefineExpose({ submitUpload, clearFiles, addFile, uploadRef })\n</script>\n"],"names":["props","__props","emit","__emit","instance","getCurrentInstance","uploadRef","ref","submitting","innerFileList","watch","val","resolvedAction","computed","prefix","getGlobalConfig","uploadHeaders","cfg","headers","token","withSubmit","syncModel","beforeUpload","rawFile","ElMessage","onSuccess","response","uploadFile","uploadFiles","codeName","code","ok","bizData","refreshDataGrid","onError","err","beforeRemove","ElMessageBox","biz","fileId","_a","param","result","request","error","onRemove","onExceed","selectedFiles","onPreview","submitUpload","clearFiles","addFile","file","onMounted","__expose","_openBlock","_createBlock","_component_el_upload","_mergeProps","$event","$attrs","_createSlots","_renderSlot","_ctx","_createVNode","_component_el_button","_createElementVNode","_hoisted_1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Upload.vue_vue_type_script_setup_true_lang-D07Bhllc.mjs","sources":["../../src/components/upload/Upload.vue"],"sourcesContent":["<template>\n <el-upload\n ref=\"uploadRef\"\n :action=\"resolvedAction\"\n :headers=\"uploadHeaders\"\n :accept=\"accept\"\n :limit=\"limit\"\n :multiple=\"multiple\"\n :auto-upload=\"autoUpload\"\n :name=\"name\"\n :data=\"data\"\n :disabled=\"disabled\"\n :show-file-list=\"showFileList\"\n v-model:file-list=\"innerFileList\"\n :before-upload=\"beforeUpload\"\n :before-remove=\"beforeRemove\"\n :on-success=\"onSuccess\"\n :on-error=\"onError\"\n :on-remove=\"onRemove\"\n :on-exceed=\"onExceed\"\n :on-preview=\"onPreview\"\n v-bind=\"$attrs\"\n >\n <slot>\n <el-button type=\"primary\">{{ buttonText }}</el-button>\n </slot>\n <template v-if=\"withSubmit && !autoUpload\" #tip>\n <div class=\"el-upload__tip\">\n <el-button size=\"small\" type=\"success\" :loading=\"submitting\" @click.stop=\"submitUpload\">\n {{ submitButtonText }}\n </el-button>\n </div>\n </template>\n </el-upload>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, onMounted, ref, watch } from 'vue'\nimport type { UploadFile, UploadFiles, UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { request } from '../../lib/core/http'\nimport { getGlobalConfig } from '../../lib/core/config'\nimport { refreshDataGrid } from '../../lib/core/linkage'\nimport { filterProp, headRefreshDatagridProp } from '../common/props'\nimport type { PropType } from 'vue'\n\ndefineOptions({ name: 'WdUpload', inheritAttrs: false })\n\nconst props = defineProps({\n ...filterProp,\n ...headRefreshDatagridProp,\n /** 上传地址(走全局 urlPrefix 拼接;为空则 el-upload 不真正提交,由外部接管) */\n api: { type: String, default: '' },\n /** 后端删除地址 */\n deleteApi: { type: String, default: '' },\n /** 删除请求方法 */\n deleteMethod: {\n type: String as PropType<'get' | 'post' | 'put' | 'delete'>,\n default: 'post'\n },\n /** 删除时取文件记录的主键字段名 */\n primaryKey: { type: String, default: 'id' },\n /** 手动提交按钮文案(auto-upload=false 时显示) */\n submitButtonText: { type: String, default: '开始上传' },\n /** 选择按钮文案(默认插槽未提供时) */\n buttonText: { type: String, default: '点击上传' },\n // ---- el-upload 同名透传 ----\n accept: { type: String, default: '' },\n limit: { type: Number, default: undefined },\n multiple: { type: Boolean, default: false },\n autoUpload: { type: Boolean, default: true },\n /** 上传字段名 */\n name: { type: String, default: 'file' },\n /** 附加表单数据 */\n data: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\n disabled: { type: Boolean, default: false },\n showFileList: { type: Boolean, default: true },\n /** 文件大小限制(MB),0 不限制 */\n maxSize: { type: Number, default: 0 },\n /** v-model 绑定的已上传文件列表(含后端返回记录) */\n modelValue: { type: Array as PropType<UploadUserFile[]>, default: () => [] }\n})\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'change',\n 'success',\n 'error',\n 'delete-success',\n 'preview',\n 'exceed',\n 'apiBefore',\n 'apiSuccess',\n 'apiFail',\n 'apiException',\n 'apiAfter'\n])\n\nconst instance = getCurrentInstance()\nconst uploadRef = ref<UploadInstance>()\nconst submitting = ref(false)\nconst innerFileList = ref<UploadUserFile[]>([...props.modelValue])\n\nwatch(\n () => props.modelValue,\n (val) => {\n innerFileList.value = [...val]\n }\n)\n\n/** 拼接完整上传地址(el-upload 原生 XHR 不走 axios 实例,需自行拼 prefix) */\nconst resolvedAction = computed(() => {\n if (!props.api) return '#'\n if (/^https?:\\/\\//.test(props.api)) return props.api\n const cfg = getGlobalConfig()\n const prefix = cfg.request.urlPrefix || ''\n return prefix ? `${prefix.replace(/\\/$/, '')}/${props.api.replace(/^\\//, '')}` : props.api\n})\n\n/** 透传全局请求头(如 Authorization) */\nconst uploadHeaders = computed<Record<string, string>>(() => {\n const cfg = getGlobalConfig()\n const headers: Record<string, string> = {}\n const interceptor = cfg.request.transform.requestInterceptor\n // requestInterceptor 为 async,无法同步取头;此处仅注入静态 token 头\n const token = (cfg.request as any).token || ''\n if (token) headers.Authorization = `Bearer ${token}`\n return headers\n})\n\nconst withSubmit = computed(() => !props.autoUpload)\n\nfunction syncModel() {\n emit('update:modelValue', innerFileList.value)\n emit('change', innerFileList.value)\n}\n\nconst beforeUpload: UploadProps['beforeUpload'] = (rawFile) => {\n if (props.maxSize && rawFile.size / 1024 / 1024 > props.maxSize) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB`)\n return false\n }\n emit('apiBefore', { url: props.api, file: rawFile })\n return true\n}\n\n/** el-upload 原生 XHR 成功回调:按全局解封约定判断业务成败 */\nconst onSuccess: UploadProps['onSuccess'] = (response, uploadFile, uploadFiles) => {\n const cfg = getGlobalConfig()\n const { codeName } = cfg.response.props\n const code = response?.[codeName]\n const ok = code === undefined || code === null || Number.isNaN(Number(code)) || Number(code) >= cfg.response.successCode\n\n // 把后端返回记录挂到文件对象,供删除时取主键\n ;(uploadFile as any).response = response\n if (ok && response?.[cfg.response.props.dataName]) {\n const bizData = response[cfg.response.props.dataName]\n ;(uploadFile as any).biz = bizData\n if (bizData && typeof bizData === 'object') {\n uploadFile.url = uploadFile.url || bizData.url || bizData.path\n }\n }\n\n if (ok) {\n emit('success', { response, file: uploadFile, files: uploadFiles })\n emit('apiSuccess', { data: response?.[cfg.response.props.dataName], raw: response })\n if (props.headRefreshDatagrid) refreshDataGrid(props.headRefreshDatagrid, props.filter)\n } else {\n ElMessage.error(response?.[cfg.response.props.messageName] || '上传失败')\n emit('error', { response, file: uploadFile })\n emit('apiFail', { code, message: response?.[cfg.response.props.messageName] })\n }\n emit('apiAfter', { url: props.api })\n syncModel()\n}\n\nconst onError: UploadProps['onError'] = (err, uploadFile, uploadFiles) => {\n ElMessage.error('上传失败,请稍后重试')\n emit('error', { error: err, file: uploadFile, files: uploadFiles })\n emit('apiException', { error: err, message: err?.message })\n emit('apiAfter', { url: props.api, error: err })\n syncModel()\n}\n\n/**\n * 删除前置钩子:二次确认 + 已上传文件走后端删除接口\n * 返回 false / reject Promise 中止移除(el-upload 约定)\n */\nconst beforeRemove: UploadProps['beforeRemove'] = async (uploadFile) => {\n try {\n await ElMessageBox.confirm('确认删除该文件?删除后不可恢复。', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n } catch {\n return false\n }\n\n const biz = (uploadFile as any).biz || uploadFile\n const fileId = biz?.[props.primaryKey] ?? (uploadFile.response as any)?.[props.primaryKey]\n\n if (props.deleteApi && fileId !== undefined && fileId !== null) {\n emit('apiBefore', { url: props.deleteApi })\n try {\n const param = { ...(props.data || {}), [props.primaryKey]: fileId }\n const result =\n props.deleteMethod === 'get'\n ? await request.get(props.deleteApi, param)\n : props.deleteMethod === 'delete'\n ? await request.delete(props.deleteApi, param)\n : props.deleteMethod === 'put'\n ? await request.put(props.deleteApi, param)\n : await request.post(props.deleteApi, param)\n if (result.success) {\n emit('delete-success', { file: uploadFile, data: result.data })\n emit('apiSuccess', { data: result.data })\n if (props.headRefreshDatagrid) refreshDataGrid(props.headRefreshDatagrid, props.filter)\n } else {\n emit('apiFail', { code: result.code, message: result.message })\n return false\n }\n } catch (error: any) {\n emit('apiException', { error, message: error?.message })\n return false\n } finally {\n emit('apiAfter', { url: props.deleteApi })\n }\n } else {\n // 仅本地移除(未上传成功或未配置删除接口)\n emit('delete-success', { file: uploadFile })\n }\n return true\n}\n\n/** 文件已从列表移除(el-upload 内部状态已更新) */\nconst onRemove: UploadProps['onRemove'] = () => {\n syncModel()\n}\n\nconst onExceed: UploadProps['onExceed'] = (selectedFiles, uploadFiles) => {\n ElMessage.warning(`最多上传 ${props.limit} 个文件`)\n emit('exceed', { selectedFiles, files: uploadFiles })\n}\n\nconst onPreview: UploadProps['onPreview'] = (uploadFile) => {\n emit('preview', { file: uploadFile })\n}\n\n/** 手动触发上传(auto-upload=false) */\nfunction submitUpload() {\n uploadRef.value?.submit()\n}\n\nfunction clearFiles() {\n uploadRef.value?.clearFiles()\n innerFileList.value = []\n syncModel()\n}\n\n/** 追加外部文件记录(如表单回显) */\nfunction addFile(file: UploadUserFile) {\n innerFileList.value = [...innerFileList.value, file]\n syncModel()\n}\n\nonMounted(() => {\n // 暴露给 HTML 场景根作用域(与 model/q 模式一致)\n if (instance) {\n instance.appContext.config.globalProperties.$wdUpload = { submitUpload, clearFiles }\n }\n})\n\ndefineExpose({ submitUpload, clearFiles, addFile, uploadRef })\n</script>\n"],"names":["props","__props","emit","__emit","instance","getCurrentInstance","uploadRef","ref","submitting","innerFileList","watch","val","resolvedAction","computed","prefix","getGlobalConfig","uploadHeaders","cfg","headers","token","withSubmit","syncModel","beforeUpload","rawFile","ElMessage","onSuccess","response","uploadFile","uploadFiles","codeName","code","ok","bizData","refreshDataGrid","onError","err","beforeRemove","ElMessageBox","biz","fileId","_a","param","result","request","error","onRemove","onExceed","selectedFiles","onPreview","submitUpload","clearFiles","addFile","file","onMounted","__expose","_openBlock","_createBlock","_component_el_upload","_mergeProps","$event","$attrs","_createSlots","_renderSlot","_ctx","_createVNode","_component_el_button","_createElementVNode","_hoisted_1"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as ge, useSlots as be, computed as h, ref as v, watch as z, onMounted as _e, resolveComponent as u, resolveDirective as we, withDirectives as ye, openBlock as d, createElementBlock as b, createBlock as C, mergeProps as Se, withCtx as n, Fragment as q, renderList as L, resolveDynamicComponent as R, renderSlot as F, createTextVNode as _, toDisplayString as J, createElementVNode as j, withModifiers as N, createVNode as r, unref as P, createCommentVNode as A, normalizeClass as De } from "vue";
|
|
2
2
|
import { ScaleToOriginal as ke, Setting as he, Rank as $e } from "@element-plus/icons-vue";
|
|
3
|
-
import { r as B } from "./http-
|
|
3
|
+
import { r as B } from "./http-Bs-dM076.mjs";
|
|
4
4
|
import { _ as xe } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
|
|
5
5
|
const Ve = { class: "wd-viewer" }, Ce = {
|
|
6
6
|
key: 1,
|
|
@@ -378,4 +378,4 @@ const Ve = { class: "wd-viewer" }, Ce = {
|
|
|
378
378
|
export {
|
|
379
379
|
Ne as W
|
|
380
380
|
};
|
|
381
|
-
//# sourceMappingURL=Viewer-
|
|
381
|
+
//# sourceMappingURL=Viewer-iub6TjoD.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Viewer-COLbtcgF.mjs","sources":["../../src/components/data/viewer/Viewer.vue"],"sourcesContent":["<template>\n <div class=\"wd-viewer\" v-loading=\"loading\">\n <!-- 描述列表模式:items 配置驱动,自带大小/字段工具 -->\n <el-descriptions\n v-if=\"!useContentSlot && (hasData || loading)\"\n :title=\"title\"\n :column=\"column\"\n :border=\"border\"\n :size=\"innerSize\"\n :label-style=\"labelStyle\"\n :content-style=\"contentStyle\"\n v-bind=\"$attrs\"\n >\n <!-- 标题右侧工具:文字大小切换 + 显示字段选择(自动启用,无需配置) -->\n <template #extra>\n <div class=\"wd-viewer__tools\" @click.stop>\n <el-tooltip content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button circle>\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip content=\"显示字段\" placement=\"top\">\n <el-button circle @click=\"fieldSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n </div>\n </template>\n\n <el-descriptions-item\n v-for=\"item in displayedItems\"\n :key=\"item.prop\"\n :label=\"item.label\"\n :span=\"item.span || 1\"\n :width=\"item.width\"\n :align=\"item.align\"\n :label-align=\"item.labelAlign\"\n >\n <template v-if=\"item.slot && $slots[item.slot]\">\n <component :is=\"$slots[item.slot]\" :row=\"viewData\" :value=\"viewData[item.prop]\" />\n </template>\n <component\n :is=\"item.render\"\n v-else-if=\"item.render\"\n :row=\"viewData\"\n :value=\"viewData[item.prop]\"\n :item=\"item\"\n />\n <template v-else>\n <slot :name=\"`${item.prop}-cell`\" :row=\"viewData\" :value=\"viewData[item.prop]\">\n {{ formatValue(item) }}\n </slot>\n </template>\n </el-descriptions-item>\n\n <slot />\n </el-descriptions>\n\n <!-- 整体内容插槽模式:透传当前数据,完全接管内容布局(脱离描述列表栅格) -->\n <div v-if=\"useContentSlot && hasData\" class=\"wd-viewer__content\">\n <slot name=\"content\" :row=\"viewData\" :data=\"viewData\" />\n </div>\n <div v-else-if=\"useContentSlot && !loading\" class=\"wd-viewer__empty\">\n <slot name=\"empty\">\n <el-empty :description=\"emptyText\" />\n </slot>\n </div>\n\n <div v-if=\"!useContentSlot && !hasData && !loading\" class=\"wd-viewer__empty\">\n <slot name=\"empty\">\n <el-empty :description=\"emptyText\" :image-size=\"60\" />\n </slot>\n </div>\n\n <!-- 显示字段设置弹层 -->\n <el-dialog v-if=\"!useContentSlot\" v-model=\"fieldSettingVisible\" title=\"显示字段\" width=\"360px\" append-to-body>\n <div class=\"wd-viewer__field-tip\">勾选控制字段的显示 / 隐藏,拖拽手柄可调整字段顺序</div>\n <div class=\"wd-viewer__field-setting\">\n <div\n v-for=\"item in controllableItems\"\n :key=\"item.prop\"\n class=\"wd-viewer__field-item\"\n :class=\"{\n 'is-dragging': draggingProp === item.prop,\n 'drag-over--before': dragOverProp === item.prop && dragOverPosition === 'before',\n 'drag-over--after': dragOverProp === item.prop && dragOverPosition === 'after'\n }\"\n @dragover.prevent=\"onFieldDragOver($event, item.prop)\"\n @dragleave=\"onFieldDragLeave(item.prop)\"\n @drop.prevent=\"onFieldDrop(item.prop)\"\n >\n <el-checkbox\n class=\"wd-viewer__field-checkbox\"\n :model-value=\"visibleProps.has(item.prop)\"\n @update:model-value=\"(v: boolean) => setFieldVisible(item.prop, v)\"\n >\n {{ item.label }}\n </el-checkbox>\n <span\n class=\"wd-viewer__field-handle\"\n draggable=\"true\"\n title=\"拖拽调整顺序\"\n @dragstart=\"onFieldDragStart($event, item.prop)\"\n @dragend=\"onFieldDragEnd\"\n >\n <el-icon><Rank /></el-icon>\n </span>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"resetFields()\">恢复默认</el-button>\n <el-button type=\"primary\" @click=\"fieldSettingVisible = false\">完成</el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, useSlots, watch, type PropType } from 'vue'\nimport { Setting, ScaleToOriginal, Rank } from '@element-plus/icons-vue'\nimport { request } from '../../../lib/core/http'\n\ndefineOptions({ name: 'WdViewer', inheritAttrs: false })\n\nconst slots = useSlots()\n/** 是否使用整体内容插槽:存在 #content 时完全接管内容布局,不再渲染描述列表及其工具 */\nconst useContentSlot = computed(() => !!slots.content)\n\nconst props = defineProps({\n title: { type: String, default: '' },\n column: { type: [Number, Object], default: 3 },\n border: { type: Boolean, default: true },\n size: { type: String as PropType<'large' | 'default' | 'small'>, default: 'default' },\n labelStyle: { type: Object, default: () => ({ width: '100px', textAlign: 'right' }) },\n contentStyle: { type: Object },\n api: { type: String, default: '' },\n apiMethod: { type: String as PropType<'get' | 'post' | 'put' | 'delete'>, default: 'get' },\n apiParam: { type: Object, default: () => ({}) },\n active: { type: Boolean, default: false },\n data: { type: Object },\n items: { type: Array as PropType<ViewerItem[]>, default: () => [] },\n emptyText: { type: String, default: '暂无数据' }\n})\n\nconst emit = defineEmits([\n 'load-success',\n 'load-fail',\n 'apiBefore',\n 'apiSuccess',\n 'apiFail',\n 'apiException',\n 'apiAfter'\n])\n\ninterface ViewerItem {\n prop: string\n label: string\n span?: number\n width?: string | number\n align?: 'left' | 'center' | 'right'\n labelAlign?: 'left' | 'center' | 'right'\n /** 自定义渲染插槽名 */\n slot?: string\n render?: any\n formatter?: (val: any, row: any) => string\n type?: 'text' | 'tag' | 'time' | 'status' | 'image' | 'copy'\n tagColors?: Record<string, string>\n timeFormat?: string\n imageSize?: number\n}\n\nconst viewData = ref<Record<string, any>>({})\nconst loading = ref(false)\n\nconst hasData = computed(() => Object.keys(viewData.value).length > 0)\n\n/** 过滤掉无效项(无 prop) */\nconst normalizedItems = computed<ViewerItem[]>(() =>\n props.items.filter((item) => item && item.prop)\n)\n\n// ---------- 文字大小切换(大 / 默认 / 小),不持久化 ----------\nconst innerSize = ref<'large' | 'default' | 'small'>(props.size)\nwatch(\n () => props.size,\n (v) => {\n innerSize.value = v\n }\n)\nfunction onSizeChange(cmd: 'large' | 'default' | 'small') {\n innerSize.value = cmd\n}\n\n// ---------- 显示字段设置(显隐 + 排序,自动启用) ----------\ninterface FieldState {\n prop: string\n label: string\n visible: boolean\n}\n\n/** 字段状态即按当前展示顺序排列的数组 */\nconst fieldStates = ref<FieldState[]>([])\nconst fieldSettingVisible = ref(false)\n\n/** 以 items 配置同步字段状态(新增字段自动追加并默认显示;删除字段移除;保留用户的显隐与排序) */\nfunction syncFieldStates() {\n const merged: FieldState[] = []\n // 先保留用户已调整过顺序的字段\n fieldStates.value.forEach((f) => {\n const item = normalizedItems.value.find((i) => i.prop === f.prop)\n if (item) {\n merged.push({ prop: f.prop, label: item.label, visible: f.visible })\n }\n })\n // 再追加配置中新增的字段(按配置顺序)\n normalizedItems.value.forEach((item) => {\n if (!merged.some((f) => f.prop === item.prop)) {\n merged.push({ prop: item.prop, label: item.label, visible: true })\n }\n })\n fieldStates.value = merged\n}\n\nwatch(\n () => normalizedItems.value.map((i) => `${i.prop}:${i.label}`).join('|'),\n () => syncFieldStates(),\n { immediate: true }\n)\n\nconst visibleProps = computed(() => new Set(fieldStates.value.filter((f) => f.visible).map((f) => f.prop)))\n\n/** 按字段状态顺序产出实际渲染的字段 */\nconst displayedItems = computed(() =>\n fieldStates.value\n .filter((f) => f.visible)\n .map((f) => normalizedItems.value.find((item) => item.prop === f.prop))\n .filter((item): item is ViewerItem => !!item)\n)\n\n/** 弹层中可控制的字段(数组顺序即展示顺序) */\nconst controllableItems = computed(() =>\n fieldStates.value.map((f) => ({ prop: f.prop, label: f.label }))\n)\n\nfunction setFieldVisible(prop: string, visible: boolean) {\n const field = fieldStates.value.find((f) => f.prop === prop)\n if (field) field.visible = visible\n}\n\n// ---------- 显示字段:拖拽排序(与 DataGrid 列设置一致) ----------\nconst draggingProp = ref('')\nconst dragOverProp = ref('')\nconst dragOverPosition = ref<'before' | 'after'>('before')\n\nfunction onFieldDragStart(e: DragEvent, prop: string) {\n draggingProp.value = prop\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move'\n // Firefox 需要 setData 才会触发拖拽\n e.dataTransfer.setData('text/plain', prop)\n }\n}\n\nfunction onFieldDragOver(e: DragEvent, prop: string) {\n if (!draggingProp.value || draggingProp.value === prop) return\n const el = e.currentTarget as HTMLElement\n const rect = el.getBoundingClientRect()\n dragOverProp.value = prop\n dragOverPosition.value = e.clientY - rect.top < rect.height / 2 ? 'before' : 'after'\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'move'\n}\n\nfunction onFieldDragLeave(prop: string) {\n if (dragOverProp.value === prop) dragOverProp.value = ''\n}\n\nfunction reorderField(fromProp: string, toProp: string, position: 'before' | 'after' = 'before') {\n if (!fromProp || !toProp || fromProp === toProp) return\n const arr = fieldStates.value.slice()\n const fromIdx = arr.findIndex((f) => f.prop === fromProp)\n if (fromIdx < 0) return\n const [item] = arr.splice(fromIdx, 1)\n let insertIdx = arr.findIndex((f) => f.prop === toProp)\n if (insertIdx < 0) return\n if (position === 'after') insertIdx += 1\n arr.splice(insertIdx, 0, item)\n fieldStates.value = arr\n}\n\nfunction onFieldDrop(prop: string) {\n reorderField(draggingProp.value, prop, dragOverPosition.value)\n onFieldDragEnd()\n}\n\nfunction onFieldDragEnd() {\n draggingProp.value = ''\n dragOverProp.value = ''\n}\n\nfunction resetFields() {\n fieldStates.value = normalizedItems.value.map((item) => ({\n prop: item.prop,\n label: item.label,\n visible: true\n }))\n}\n\nfunction formatValue(item: ViewerItem): string {\n const value = viewData.value?.[item.prop]\n if (value === null || value === undefined || value === '') return '-'\n if (item.formatter) return item.formatter(value, viewData.value)\n return String(value)\n}\n\nasync function requestApi(extraParam?: Record<string, any>) {\n if (!props.api) return\n const param = { ...props.apiParam, ...extraParam }\n loading.value = true\n emit('apiBefore', { url: props.api, param })\n try {\n let result: any\n if (props.apiMethod === 'get') {\n result = await request.get(props.api, param)\n } else if (props.apiMethod === 'post') {\n result = await request.post(props.api, param)\n } else if (props.apiMethod === 'put') {\n result = await request.put(props.api, param)\n } else {\n result = await request.delete(props.api, param)\n }\n if (result.success) {\n viewData.value = result.data || {}\n emit('load-success', { data: result.data })\n emit('apiSuccess', { data: result.data, raw: result })\n } else {\n emit('load-fail', { code: result.code, message: result.message })\n emit('apiFail', { code: result.code, message: result.message })\n }\n return result\n } catch (error: any) {\n emit('apiException', { error, message: error?.message })\n } finally {\n loading.value = false\n emit('apiAfter', { url: props.api })\n }\n}\n\nfunction resetData() {\n viewData.value = {}\n}\n\nfunction getData() {\n return viewData.value\n}\n\ndefineExpose({ requestApi, resetData, getData, loading })\n\nwatch(\n () => props.data,\n (val) => {\n if (val && typeof val === 'object') {\n viewData.value = { ...val }\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n if (props.active && props.api && !props.data) {\n requestApi()\n }\n})\n\nwatch(\n () => JSON.stringify(props.apiParam),\n () => {\n if (props.active && props.api && !props.data) {\n requestApi()\n }\n }\n)\n</script>\n\n<style scoped>\n.wd-viewer {\n position: relative;\n width: 100%;\n}\n.wd-viewer__tools {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.wd-viewer__empty {\n padding: 20px 0;\n text-align: center;\n}\n.wd-viewer__content {\n width: 100%;\n}\n.wd-viewer__field-tip {\n margin-bottom: 8px;\n font-size: var(--wd-font-size-small, 12px);\n color: var(--wd-text-color-secondary, #909399);\n}\n.wd-viewer__field-setting {\n max-height: 400px;\n overflow: auto;\n}\n.wd-viewer__field-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n}\n.wd-viewer__field-item:hover {\n background-color: var(--wd-fill-color-light, #f5f7fa);\n}\n.wd-viewer__field-checkbox {\n flex: 1;\n}\n.wd-viewer__field-handle {\n display: inline-flex;\n align-items: center;\n cursor: grab;\n color: var(--wd-text-color-placeholder, #a8abb2);\n touch-action: none;\n}\n.wd-viewer__field-handle:active {\n cursor: grabbing;\n}\n/* 正在拖拽的源行 */\n.wd-viewer__field-item.is-dragging {\n opacity: 0.45;\n}\n/* 放置位置指示线 */\n.wd-viewer__field-item.drag-over--before::before,\n.wd-viewer__field-item.drag-over--after::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--wd-color-primary, #409eff);\n}\n.wd-viewer__field-item.drag-over--before::before {\n top: -1px;\n}\n.wd-viewer__field-item.drag-over--after::after {\n bottom: -1px;\n}\n</style>\n"],"names":["slots","useSlots","useContentSlot","computed","props","__props","emit","__emit","viewData","ref","loading","hasData","normalizedItems","item","innerSize","watch","v","onSizeChange","cmd","fieldStates","fieldSettingVisible","syncFieldStates","merged","f","i","visibleProps","displayedItems","controllableItems","setFieldVisible","prop","visible","field","draggingProp","dragOverProp","dragOverPosition","onFieldDragStart","onFieldDragOver","rect","onFieldDragLeave","reorderField","fromProp","toProp","position","arr","fromIdx","insertIdx","onFieldDrop","onFieldDragEnd","resetFields","formatValue","value","_a","requestApi","extraParam","param","result","request","error","resetData","getData","__expose","val","onMounted","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_createBlock","_component_el_descriptions","_mergeProps","$attrs","_createElementVNode","_createVNode","_component_el_tooltip","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_cache","_component_el_button","_component_el_icon","_unref","ScaleToOriginal","Setting","_Fragment","_renderList","_component_el_descriptions_item","$slots","_resolveDynamicComponent","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_hoisted_2","_hoisted_3","_component_el_empty","_hoisted_4","_component_el_dialog","$event","_hoisted_5","_withModifiers","_component_el_checkbox","Rank"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Viewer-iub6TjoD.mjs","sources":["../../src/components/data/viewer/Viewer.vue"],"sourcesContent":["<template>\n <div class=\"wd-viewer\" v-loading=\"loading\">\n <!-- 描述列表模式:items 配置驱动,自带大小/字段工具 -->\n <el-descriptions\n v-if=\"!useContentSlot && (hasData || loading)\"\n :title=\"title\"\n :column=\"column\"\n :border=\"border\"\n :size=\"innerSize\"\n :label-style=\"labelStyle\"\n :content-style=\"contentStyle\"\n v-bind=\"$attrs\"\n >\n <!-- 标题右侧工具:文字大小切换 + 显示字段选择(自动启用,无需配置) -->\n <template #extra>\n <div class=\"wd-viewer__tools\" @click.stop>\n <el-tooltip content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button circle>\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip content=\"显示字段\" placement=\"top\">\n <el-button circle @click=\"fieldSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n </div>\n </template>\n\n <el-descriptions-item\n v-for=\"item in displayedItems\"\n :key=\"item.prop\"\n :label=\"item.label\"\n :span=\"item.span || 1\"\n :width=\"item.width\"\n :align=\"item.align\"\n :label-align=\"item.labelAlign\"\n >\n <template v-if=\"item.slot && $slots[item.slot]\">\n <component :is=\"$slots[item.slot]\" :row=\"viewData\" :value=\"viewData[item.prop]\" />\n </template>\n <component\n :is=\"item.render\"\n v-else-if=\"item.render\"\n :row=\"viewData\"\n :value=\"viewData[item.prop]\"\n :item=\"item\"\n />\n <template v-else>\n <slot :name=\"`${item.prop}-cell`\" :row=\"viewData\" :value=\"viewData[item.prop]\">\n {{ formatValue(item) }}\n </slot>\n </template>\n </el-descriptions-item>\n\n <slot />\n </el-descriptions>\n\n <!-- 整体内容插槽模式:透传当前数据,完全接管内容布局(脱离描述列表栅格) -->\n <div v-if=\"useContentSlot && hasData\" class=\"wd-viewer__content\">\n <slot name=\"content\" :row=\"viewData\" :data=\"viewData\" />\n </div>\n <div v-else-if=\"useContentSlot && !loading\" class=\"wd-viewer__empty\">\n <slot name=\"empty\">\n <el-empty :description=\"emptyText\" />\n </slot>\n </div>\n\n <div v-if=\"!useContentSlot && !hasData && !loading\" class=\"wd-viewer__empty\">\n <slot name=\"empty\">\n <el-empty :description=\"emptyText\" :image-size=\"60\" />\n </slot>\n </div>\n\n <!-- 显示字段设置弹层 -->\n <el-dialog v-if=\"!useContentSlot\" v-model=\"fieldSettingVisible\" title=\"显示字段\" width=\"360px\" append-to-body>\n <div class=\"wd-viewer__field-tip\">勾选控制字段的显示 / 隐藏,拖拽手柄可调整字段顺序</div>\n <div class=\"wd-viewer__field-setting\">\n <div\n v-for=\"item in controllableItems\"\n :key=\"item.prop\"\n class=\"wd-viewer__field-item\"\n :class=\"{\n 'is-dragging': draggingProp === item.prop,\n 'drag-over--before': dragOverProp === item.prop && dragOverPosition === 'before',\n 'drag-over--after': dragOverProp === item.prop && dragOverPosition === 'after'\n }\"\n @dragover.prevent=\"onFieldDragOver($event, item.prop)\"\n @dragleave=\"onFieldDragLeave(item.prop)\"\n @drop.prevent=\"onFieldDrop(item.prop)\"\n >\n <el-checkbox\n class=\"wd-viewer__field-checkbox\"\n :model-value=\"visibleProps.has(item.prop)\"\n @update:model-value=\"(v: boolean) => setFieldVisible(item.prop, v)\"\n >\n {{ item.label }}\n </el-checkbox>\n <span\n class=\"wd-viewer__field-handle\"\n draggable=\"true\"\n title=\"拖拽调整顺序\"\n @dragstart=\"onFieldDragStart($event, item.prop)\"\n @dragend=\"onFieldDragEnd\"\n >\n <el-icon><Rank /></el-icon>\n </span>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"resetFields()\">恢复默认</el-button>\n <el-button type=\"primary\" @click=\"fieldSettingVisible = false\">完成</el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, useSlots, watch, type PropType } from 'vue'\nimport { Setting, ScaleToOriginal, Rank } from '@element-plus/icons-vue'\nimport { request } from '../../../lib/core/http'\n\ndefineOptions({ name: 'WdViewer', inheritAttrs: false })\n\nconst slots = useSlots()\n/** 是否使用整体内容插槽:存在 #content 时完全接管内容布局,不再渲染描述列表及其工具 */\nconst useContentSlot = computed(() => !!slots.content)\n\nconst props = defineProps({\n title: { type: String, default: '' },\n column: { type: [Number, Object], default: 3 },\n border: { type: Boolean, default: true },\n size: { type: String as PropType<'large' | 'default' | 'small'>, default: 'default' },\n labelStyle: { type: Object, default: () => ({ width: '100px', textAlign: 'right' }) },\n contentStyle: { type: Object },\n api: { type: String, default: '' },\n apiMethod: { type: String as PropType<'get' | 'post' | 'put' | 'delete'>, default: 'get' },\n apiParam: { type: Object, default: () => ({}) },\n active: { type: Boolean, default: false },\n data: { type: Object },\n items: { type: Array as PropType<ViewerItem[]>, default: () => [] },\n emptyText: { type: String, default: '暂无数据' }\n})\n\nconst emit = defineEmits([\n 'load-success',\n 'load-fail',\n 'apiBefore',\n 'apiSuccess',\n 'apiFail',\n 'apiException',\n 'apiAfter'\n])\n\ninterface ViewerItem {\n prop: string\n label: string\n span?: number\n width?: string | number\n align?: 'left' | 'center' | 'right'\n labelAlign?: 'left' | 'center' | 'right'\n /** 自定义渲染插槽名 */\n slot?: string\n render?: any\n formatter?: (val: any, row: any) => string\n type?: 'text' | 'tag' | 'time' | 'status' | 'image' | 'copy'\n tagColors?: Record<string, string>\n timeFormat?: string\n imageSize?: number\n}\n\nconst viewData = ref<Record<string, any>>({})\nconst loading = ref(false)\n\nconst hasData = computed(() => Object.keys(viewData.value).length > 0)\n\n/** 过滤掉无效项(无 prop) */\nconst normalizedItems = computed<ViewerItem[]>(() =>\n props.items.filter((item) => item && item.prop)\n)\n\n// ---------- 文字大小切换(大 / 默认 / 小),不持久化 ----------\nconst innerSize = ref<'large' | 'default' | 'small'>(props.size)\nwatch(\n () => props.size,\n (v) => {\n innerSize.value = v\n }\n)\nfunction onSizeChange(cmd: 'large' | 'default' | 'small') {\n innerSize.value = cmd\n}\n\n// ---------- 显示字段设置(显隐 + 排序,自动启用) ----------\ninterface FieldState {\n prop: string\n label: string\n visible: boolean\n}\n\n/** 字段状态即按当前展示顺序排列的数组 */\nconst fieldStates = ref<FieldState[]>([])\nconst fieldSettingVisible = ref(false)\n\n/** 以 items 配置同步字段状态(新增字段自动追加并默认显示;删除字段移除;保留用户的显隐与排序) */\nfunction syncFieldStates() {\n const merged: FieldState[] = []\n // 先保留用户已调整过顺序的字段\n fieldStates.value.forEach((f) => {\n const item = normalizedItems.value.find((i) => i.prop === f.prop)\n if (item) {\n merged.push({ prop: f.prop, label: item.label, visible: f.visible })\n }\n })\n // 再追加配置中新增的字段(按配置顺序)\n normalizedItems.value.forEach((item) => {\n if (!merged.some((f) => f.prop === item.prop)) {\n merged.push({ prop: item.prop, label: item.label, visible: true })\n }\n })\n fieldStates.value = merged\n}\n\nwatch(\n () => normalizedItems.value.map((i) => `${i.prop}:${i.label}`).join('|'),\n () => syncFieldStates(),\n { immediate: true }\n)\n\nconst visibleProps = computed(() => new Set(fieldStates.value.filter((f) => f.visible).map((f) => f.prop)))\n\n/** 按字段状态顺序产出实际渲染的字段 */\nconst displayedItems = computed(() =>\n fieldStates.value\n .filter((f) => f.visible)\n .map((f) => normalizedItems.value.find((item) => item.prop === f.prop))\n .filter((item): item is ViewerItem => !!item)\n)\n\n/** 弹层中可控制的字段(数组顺序即展示顺序) */\nconst controllableItems = computed(() =>\n fieldStates.value.map((f) => ({ prop: f.prop, label: f.label }))\n)\n\nfunction setFieldVisible(prop: string, visible: boolean) {\n const field = fieldStates.value.find((f) => f.prop === prop)\n if (field) field.visible = visible\n}\n\n// ---------- 显示字段:拖拽排序(与 DataGrid 列设置一致) ----------\nconst draggingProp = ref('')\nconst dragOverProp = ref('')\nconst dragOverPosition = ref<'before' | 'after'>('before')\n\nfunction onFieldDragStart(e: DragEvent, prop: string) {\n draggingProp.value = prop\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move'\n // Firefox 需要 setData 才会触发拖拽\n e.dataTransfer.setData('text/plain', prop)\n }\n}\n\nfunction onFieldDragOver(e: DragEvent, prop: string) {\n if (!draggingProp.value || draggingProp.value === prop) return\n const el = e.currentTarget as HTMLElement\n const rect = el.getBoundingClientRect()\n dragOverProp.value = prop\n dragOverPosition.value = e.clientY - rect.top < rect.height / 2 ? 'before' : 'after'\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'move'\n}\n\nfunction onFieldDragLeave(prop: string) {\n if (dragOverProp.value === prop) dragOverProp.value = ''\n}\n\nfunction reorderField(fromProp: string, toProp: string, position: 'before' | 'after' = 'before') {\n if (!fromProp || !toProp || fromProp === toProp) return\n const arr = fieldStates.value.slice()\n const fromIdx = arr.findIndex((f) => f.prop === fromProp)\n if (fromIdx < 0) return\n const [item] = arr.splice(fromIdx, 1)\n let insertIdx = arr.findIndex((f) => f.prop === toProp)\n if (insertIdx < 0) return\n if (position === 'after') insertIdx += 1\n arr.splice(insertIdx, 0, item)\n fieldStates.value = arr\n}\n\nfunction onFieldDrop(prop: string) {\n reorderField(draggingProp.value, prop, dragOverPosition.value)\n onFieldDragEnd()\n}\n\nfunction onFieldDragEnd() {\n draggingProp.value = ''\n dragOverProp.value = ''\n}\n\nfunction resetFields() {\n fieldStates.value = normalizedItems.value.map((item) => ({\n prop: item.prop,\n label: item.label,\n visible: true\n }))\n}\n\nfunction formatValue(item: ViewerItem): string {\n const value = viewData.value?.[item.prop]\n if (value === null || value === undefined || value === '') return '-'\n if (item.formatter) return item.formatter(value, viewData.value)\n return String(value)\n}\n\nasync function requestApi(extraParam?: Record<string, any>) {\n if (!props.api) return\n const param = { ...props.apiParam, ...extraParam }\n loading.value = true\n emit('apiBefore', { url: props.api, param })\n try {\n let result: any\n if (props.apiMethod === 'get') {\n result = await request.get(props.api, param)\n } else if (props.apiMethod === 'post') {\n result = await request.post(props.api, param)\n } else if (props.apiMethod === 'put') {\n result = await request.put(props.api, param)\n } else {\n result = await request.delete(props.api, param)\n }\n if (result.success) {\n viewData.value = result.data || {}\n emit('load-success', { data: result.data })\n emit('apiSuccess', { data: result.data, raw: result })\n } else {\n emit('load-fail', { code: result.code, message: result.message })\n emit('apiFail', { code: result.code, message: result.message })\n }\n return result\n } catch (error: any) {\n emit('apiException', { error, message: error?.message })\n } finally {\n loading.value = false\n emit('apiAfter', { url: props.api })\n }\n}\n\nfunction resetData() {\n viewData.value = {}\n}\n\nfunction getData() {\n return viewData.value\n}\n\ndefineExpose({ requestApi, resetData, getData, loading })\n\nwatch(\n () => props.data,\n (val) => {\n if (val && typeof val === 'object') {\n viewData.value = { ...val }\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n if (props.active && props.api && !props.data) {\n requestApi()\n }\n})\n\nwatch(\n () => JSON.stringify(props.apiParam),\n () => {\n if (props.active && props.api && !props.data) {\n requestApi()\n }\n }\n)\n</script>\n\n<style scoped>\n.wd-viewer {\n position: relative;\n width: 100%;\n}\n.wd-viewer__tools {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.wd-viewer__empty {\n padding: 20px 0;\n text-align: center;\n}\n.wd-viewer__content {\n width: 100%;\n}\n.wd-viewer__field-tip {\n margin-bottom: 8px;\n font-size: var(--wd-font-size-small, 12px);\n color: var(--wd-text-color-secondary, #909399);\n}\n.wd-viewer__field-setting {\n max-height: 400px;\n overflow: auto;\n}\n.wd-viewer__field-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n}\n.wd-viewer__field-item:hover {\n background-color: var(--wd-fill-color-light, #f5f7fa);\n}\n.wd-viewer__field-checkbox {\n flex: 1;\n}\n.wd-viewer__field-handle {\n display: inline-flex;\n align-items: center;\n cursor: grab;\n color: var(--wd-text-color-placeholder, #a8abb2);\n touch-action: none;\n}\n.wd-viewer__field-handle:active {\n cursor: grabbing;\n}\n/* 正在拖拽的源行 */\n.wd-viewer__field-item.is-dragging {\n opacity: 0.45;\n}\n/* 放置位置指示线 */\n.wd-viewer__field-item.drag-over--before::before,\n.wd-viewer__field-item.drag-over--after::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--wd-color-primary, #409eff);\n}\n.wd-viewer__field-item.drag-over--before::before {\n top: -1px;\n}\n.wd-viewer__field-item.drag-over--after::after {\n bottom: -1px;\n}\n</style>\n"],"names":["slots","useSlots","useContentSlot","computed","props","__props","emit","__emit","viewData","ref","loading","hasData","normalizedItems","item","innerSize","watch","v","onSizeChange","cmd","fieldStates","fieldSettingVisible","syncFieldStates","merged","f","i","visibleProps","displayedItems","controllableItems","setFieldVisible","prop","visible","field","draggingProp","dragOverProp","dragOverPosition","onFieldDragStart","onFieldDragOver","rect","onFieldDragLeave","reorderField","fromProp","toProp","position","arr","fromIdx","insertIdx","onFieldDrop","onFieldDragEnd","resetFields","formatValue","value","_a","requestApi","extraParam","param","result","request","error","resetData","getData","__expose","val","onMounted","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_createBlock","_component_el_descriptions","_mergeProps","$attrs","_createElementVNode","_createVNode","_component_el_tooltip","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_cache","_component_el_button","_component_el_icon","_unref","ScaleToOriginal","Setting","_Fragment","_renderList","_component_el_descriptions_item","$slots","_resolveDynamicComponent","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_hoisted_2","_hoisted_3","_component_el_empty","_hoisted_4","_component_el_dialog","$event","_hoisted_5","_withModifiers","_component_el_checkbox","Rank"],"mappings":"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"}
|
|
@@ -2578,7 +2578,7 @@ const {
|
|
|
2578
2578
|
getAdapter: Ys,
|
|
2579
2579
|
mergeConfig: eo,
|
|
2580
2580
|
create: to
|
|
2581
|
-
} = _, Cs = "1.
|
|
2581
|
+
} = _, Cs = "1.1.1", rt = {
|
|
2582
2582
|
// 库版本号,界面版本号显示统一从这里读取
|
|
2583
2583
|
version: Cs,
|
|
2584
2584
|
page: {
|
|
@@ -2948,4 +2948,4 @@ export {
|
|
|
2948
2948
|
co as r,
|
|
2949
2949
|
ro as s
|
|
2950
2950
|
};
|
|
2951
|
-
//# sourceMappingURL=http-
|
|
2951
|
+
//# sourceMappingURL=http-Bs-dM076.mjs.map
|