日常修复内容
This commit is contained in:
98
cdTMP/package-lock.json
generated
98
cdTMP/package-lock.json
generated
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"name": "testplant",
|
||||
"version": "1.0.1",
|
||||
"version": "0.1.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "testplant",
|
||||
"version": "1.0.1",
|
||||
"version": "0.1.1",
|
||||
"dependencies": {
|
||||
"@arco-design/color": "^0.4.0",
|
||||
"@arco-design/web-vue": "^2.57.0",
|
||||
"@tanstack/vue-query": "^5.99.0",
|
||||
"@arco-design/web-vue": "^2.58.0",
|
||||
"@tanstack/vue-query": "^5.99.2",
|
||||
"@tinymce/tinymce-vue": "^6.3.0",
|
||||
"@vueuse/core": "^14.2.1",
|
||||
"axios": "^1.15.0",
|
||||
"axios": "^1.15.1",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"dayjs": "^1.11.20",
|
||||
@@ -47,7 +47,7 @@
|
||||
"@vitejs/plugin-vue-jsx": "^5.1.5",
|
||||
"@vue/babel-plugin-jsx": "^2.0.1",
|
||||
"browserslist": "^4.28.2",
|
||||
"eslint": "^10.2.0",
|
||||
"eslint": "^10.2.1",
|
||||
"eslint-plugin-vue": "^10.8.0",
|
||||
"less": "^4.6.4",
|
||||
"less-loader": "^12.3.2",
|
||||
@@ -55,7 +55,7 @@
|
||||
"prettier": "^3.8.3",
|
||||
"rollup-plugin-visualizer": "^7.0.1",
|
||||
"tailwindcss": "^4.2.2",
|
||||
"typescript": "^6.0.2",
|
||||
"typescript": "^6.0.3",
|
||||
"vite": "^8.0.8",
|
||||
"vue-eslint-parser": "^10.4.0"
|
||||
}
|
||||
@@ -83,9 +83,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@arco-design/web-vue": {
|
||||
"version": "2.57.0",
|
||||
"resolved": "https://registry.npmmirror.com/@arco-design/web-vue/-/web-vue-2.57.0.tgz",
|
||||
"integrity": "sha512-R5YReC3C2sG3Jv0+YuR3B7kzkq2KdhhQNCGXD8T11xAoa0zMt6SWTP1xJQOdZcM9du+q3z6tk5mRvh4qkieRJw==",
|
||||
"version": "2.58.0",
|
||||
"resolved": "https://registry.npmmirror.com/@arco-design/web-vue/-/web-vue-2.58.0.tgz",
|
||||
"integrity": "sha512-b1vdPYOmjG5VAkVa7jlVwCb+WynBK+rnKN8zH3yKohpZObZbostRd3HgYNtjjZjGVU3OqR0Yy2FX7ftgF0bcOw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@arco-design/color": "^0.4.0",
|
||||
@@ -99,7 +99,7 @@
|
||||
"vue": "^3.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.1.0"
|
||||
"vue": ">=3.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
@@ -570,13 +570,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-array": {
|
||||
"version": "0.23.4",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/config-array/-/config-array-0.23.4.tgz",
|
||||
"integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==",
|
||||
"version": "0.23.5",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/config-array/-/config-array-0.23.5.tgz",
|
||||
"integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/object-schema": "^3.0.4",
|
||||
"@eslint/object-schema": "^3.0.5",
|
||||
"debug": "^4.3.1",
|
||||
"minimatch": "^10.2.4"
|
||||
},
|
||||
@@ -585,22 +585,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-helpers": {
|
||||
"version": "0.5.4",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.5.4.tgz",
|
||||
"integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==",
|
||||
"version": "0.5.5",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.5.5.tgz",
|
||||
"integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/core": "^1.2.0"
|
||||
"@eslint/core": "^1.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || ^22.13.0 || >=24"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/core": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/core/-/core-1.2.0.tgz",
|
||||
"integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==",
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/core/-/core-1.2.1.tgz",
|
||||
"integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -611,9 +611,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/object-schema": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/object-schema/-/object-schema-3.0.4.tgz",
|
||||
"integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==",
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/object-schema/-/object-schema-3.0.5.tgz",
|
||||
"integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -621,13 +621,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/plugin-kit": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz",
|
||||
"integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==",
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz",
|
||||
"integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/core": "^1.2.0",
|
||||
"@eslint/core": "^1.2.1",
|
||||
"levn": "^0.4.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1371,9 +1371,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@tanstack/query-core": {
|
||||
"version": "5.99.0",
|
||||
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.99.0.tgz",
|
||||
"integrity": "sha512-3Jv3WQG0BCcH7G+7lf/bP8QyBfJOXeY+T08Rin3GZ1bshvwlbPt7NrDHMEzGdKIOmOzvIQmxjk28YEQX60k7pQ==",
|
||||
"version": "5.99.2",
|
||||
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.99.2.tgz",
|
||||
"integrity": "sha512-1HunU0bXVsR1ZJMZbcOPE6VtaBJxsW809RE9xPe4Gz7MlB0GWwQvuTPhMoEmQ/hIzFKJ/DWAuttIe7BOaWx0tA==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "github",
|
||||
@@ -1381,13 +1381,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@tanstack/vue-query": {
|
||||
"version": "5.99.0",
|
||||
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.99.0.tgz",
|
||||
"integrity": "sha512-okrHNkouasL5cjo7O8hUxul22DiIL335KUQus/cfoAdCOUytF/OIv3BpNDevfqE6zHqqJ651Fb9OkUJPUCL0ZQ==",
|
||||
"version": "5.99.2",
|
||||
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.99.2.tgz",
|
||||
"integrity": "sha512-ll7dzgeM/3/ckNsp+J0ZrUuvJEZan3RlOrb1T4M47CJPM0rS0WNanSYQWPgK0A+Eu/ihwm/kEBmAZOA7toHP8g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@tanstack/match-sorter-utils": "^8.19.4",
|
||||
"@tanstack/query-core": "5.99.0",
|
||||
"@tanstack/query-core": "5.99.2",
|
||||
"@vue/devtools-api": "^6.6.3",
|
||||
"vue-demi": "^0.14.10"
|
||||
},
|
||||
@@ -1924,9 +1924,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.15.0.tgz",
|
||||
"integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
|
||||
"version": "1.15.1",
|
||||
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.15.1.tgz",
|
||||
"integrity": "sha512-WOG+Jj8ZOvR0a3rAn+Tuf1UQJRxw5venr6DgdbJzngJE3qG7X0kL83CZGpdHMxEm+ZK3seAbvFsw4FfOfP9vxg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.11",
|
||||
@@ -2559,18 +2559,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "10.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-10.2.0.tgz",
|
||||
"integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==",
|
||||
"version": "10.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-10.2.1.tgz",
|
||||
"integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.8.0",
|
||||
"@eslint-community/regexpp": "^4.12.2",
|
||||
"@eslint/config-array": "^0.23.4",
|
||||
"@eslint/config-helpers": "^0.5.4",
|
||||
"@eslint/core": "^1.2.0",
|
||||
"@eslint/plugin-kit": "^0.7.0",
|
||||
"@eslint/config-array": "^0.23.5",
|
||||
"@eslint/config-helpers": "^0.5.5",
|
||||
"@eslint/core": "^1.2.1",
|
||||
"@eslint/plugin-kit": "^0.7.1",
|
||||
"@humanfs/node": "^0.16.6",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@humanwhocodes/retry": "^0.4.2",
|
||||
@@ -5010,9 +5010,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-6.0.2.tgz",
|
||||
"integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==",
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-6.0.3.tgz",
|
||||
"integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "testplant",
|
||||
"private": true,
|
||||
"version": "1.0.1",
|
||||
"version": "0.1.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -12,11 +12,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@arco-design/color": "^0.4.0",
|
||||
"@arco-design/web-vue": "^2.57.0",
|
||||
"@tanstack/vue-query": "^5.99.0",
|
||||
"@arco-design/web-vue": "^2.58.0",
|
||||
"@tanstack/vue-query": "^5.99.2",
|
||||
"@tinymce/tinymce-vue": "^6.3.0",
|
||||
"@vueuse/core": "^14.2.1",
|
||||
"axios": "^1.15.0",
|
||||
"axios": "^1.15.1",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"dayjs": "^1.11.20",
|
||||
@@ -50,7 +50,7 @@
|
||||
"@vitejs/plugin-vue-jsx": "^5.1.5",
|
||||
"@vue/babel-plugin-jsx": "^2.0.1",
|
||||
"browserslist": "^4.28.2",
|
||||
"eslint": "^10.2.0",
|
||||
"eslint": "^10.2.1",
|
||||
"eslint-plugin-vue": "^10.8.0",
|
||||
"less": "^4.6.4",
|
||||
"less-loader": "^12.3.2",
|
||||
@@ -58,7 +58,7 @@
|
||||
"prettier": "^3.8.3",
|
||||
"rollup-plugin-visualizer": "^7.0.1",
|
||||
"tailwindcss": "^4.2.2",
|
||||
"typescript": "^6.0.2",
|
||||
"typescript": "^6.0.3",
|
||||
"vite": "^8.0.8",
|
||||
"vue-eslint-parser": "^10.4.0"
|
||||
}
|
||||
|
||||
@@ -21,13 +21,7 @@
|
||||
</template>
|
||||
<a-spin :loading="dataLoading" tip="加载中..." class="w-full">
|
||||
<!-- 修改源码parentKey -->
|
||||
<ma-form
|
||||
v-model="form"
|
||||
:columns="formColumns"
|
||||
:parent-key="props.parentKey"
|
||||
:options="formOptions"
|
||||
ref="maFormRef"
|
||||
>
|
||||
<ma-form v-model="form" :columns="formColumns" :parent-key="props.parentKey" :options="formOptions" ref="maFormRef">
|
||||
<template v-for="slot in Object.keys($slots)" #[slot]="component">
|
||||
<slot :name="slot" v-bind="component" />
|
||||
</template>
|
||||
@@ -88,12 +82,17 @@ const submit = async () => {
|
||||
if (isFunction(options.beforeAdd) && !(await options.beforeAdd(formData))) {
|
||||
return false
|
||||
}
|
||||
// 修改源码添加parameters参数
|
||||
try {
|
||||
if (!options.parameters) {
|
||||
response = await options.add.api(formData)
|
||||
} else {
|
||||
response = await options.add.api({ ...formData, ...options.parameters })
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("标识重复")
|
||||
return false
|
||||
}
|
||||
// 修改源码添加parameters参数
|
||||
isFunction(options.afterAdd) && (await options.afterAdd(response, formData))
|
||||
} else {
|
||||
if (isFunction(options.beforeEdit) && !(await options.beforeEdit(formData))) {
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
<!--
|
||||
- @Author XXX
|
||||
- @Link XXX
|
||||
-->
|
||||
<template>
|
||||
<component
|
||||
:is="getComponentName()"
|
||||
v-model="value"
|
||||
:placeholder="
|
||||
props.component.formType === 'range'
|
||||
? ['请选择开始时间', '请选择结束时间']
|
||||
: `请选择${props.component.title}`
|
||||
"
|
||||
:placeholder="props.component.formType === 'range' ? ['请选择开始时间', '请选择结束时间'] : `请选择${props.component.title}`"
|
||||
:time-picker-props="props.component.formType == 'range' ? { defaultValue: ['00:00:00', '23:59:59'] } : {}"
|
||||
:show-time="props.component.showTime"
|
||||
:type="props.component.range ? (props.component.formType === 'time' ? 'time-range' : 'range') : ''"
|
||||
|
||||
@@ -51,14 +51,14 @@ const props = defineProps({
|
||||
// 插件
|
||||
plugins: {
|
||||
type: [String, Array],
|
||||
default: "visualchars code table nonbreaking lists autosave autoresize"
|
||||
default: "visualchars code table nonbreaking autosave autoresize"
|
||||
// 备份:"searchreplace visualchars code table nonbreaking lists autosave autoresize"
|
||||
},
|
||||
// 工具栏
|
||||
toolbar: {
|
||||
type: [String, Array],
|
||||
// 如果要取消粘贴只粘贴文本,需要用户加格式请加上pastetext
|
||||
default: "code undo redo aligncenter alignleft indent styleselect formatselect fontselect fontsizeselect removeformat"
|
||||
default: "code undo redo aligncenter alignleft indent styleselect formatselect fontselect fontsizeselect"
|
||||
|
||||
// 下面是备份配置:
|
||||
// default:"code undo redo restoredraft | paste | bold | aligncenter alignleft alignjustify indent searchreplace | \
|
||||
|
||||
@@ -41,7 +41,7 @@ const imageUrl = ref("")
|
||||
|
||||
const handleSyncOk = async () => {
|
||||
// 验证题注是否为空
|
||||
if (fontnote.value.trim().length <= 0 || !imageUrl.value.trim()) {
|
||||
if (fontnote.value?.trim().length <= 0 || !imageUrl.value?.trim()) {
|
||||
Message.error("请输入题注和粘贴图片")
|
||||
return false
|
||||
}
|
||||
@@ -65,8 +65,8 @@ const open = async () => {
|
||||
proxy?.$loading?.show("数据加载中...")
|
||||
try {
|
||||
const { data } = await projectApi.getInterfaceImage(route.query.id)
|
||||
fontnote.value = data.fontnote
|
||||
imageUrl.value = data.content
|
||||
fontnote.value = data.fontnote || ""
|
||||
imageUrl.value = data.content || ""
|
||||
visible.value = true
|
||||
} catch (e) {
|
||||
} finally {
|
||||
|
||||
@@ -46,7 +46,7 @@ const fontnote = ref("")
|
||||
|
||||
const handleSyncOk = async () => {
|
||||
// 验证题注是否为空
|
||||
if (tableData.value.length <= 0) {
|
||||
if (tableData.value?.length <= 0) {
|
||||
Message.error("请输入表格内容再提交")
|
||||
return false
|
||||
}
|
||||
@@ -80,7 +80,7 @@ const open = async (title: string) => {
|
||||
if (res.code === 25001) {
|
||||
const data = res.data
|
||||
tableData.value = data.table
|
||||
fontnote.value = data.fontnote
|
||||
fontnote.value = data.fontnote || ""
|
||||
}
|
||||
visible.value = true
|
||||
} catch (e) {
|
||||
|
||||
@@ -89,8 +89,8 @@ const open = async (category_str: string) => {
|
||||
const res = await projectApi.getEnvAnalysis(route.query.id)
|
||||
if (res.code === 25001) {
|
||||
tableDatas.value = res.data.table
|
||||
fontnote.value = res.data.fontnote
|
||||
description.value = res.data.description
|
||||
fontnote.value = res.data.fontnote || ""
|
||||
description.value = res.data.description || ""
|
||||
}
|
||||
visible.value = true
|
||||
} catch (e) {
|
||||
|
||||
@@ -22,56 +22,75 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { Message } from "@arco-design/web-vue"
|
||||
import { nextTick, ref } from "vue"
|
||||
import { nextTick, ref, onMounted, onBeforeUnmount } from "vue"
|
||||
|
||||
// 储存图片base64
|
||||
const imgData = defineModel<string>()
|
||||
// 储存题注
|
||||
const fontnote = defineModel<string>("fontnote")
|
||||
// 加载状态
|
||||
const isLoading = ref(false)
|
||||
|
||||
// 处理粘贴事件
|
||||
const handlePaste = async (e: ClipboardEvent) => {
|
||||
// 全局粘贴处理函数
|
||||
const onGlobalPaste = (e: ClipboardEvent) => {
|
||||
// 可以增加判断:只有当前组件所在的 modal 打开时才处理(通过 props 传入 visible 状态或使用 provide/inject)
|
||||
// 简单起见,这里假设始终需要处理(父组件控制显示隐藏)
|
||||
handlePaste(e)
|
||||
}
|
||||
|
||||
// 处理粘贴逻辑(复用之前的修复版)
|
||||
const handlePaste = (e: ClipboardEvent) => {
|
||||
e.preventDefault()
|
||||
// 处理没有粘贴内容
|
||||
if (!e.clipboardData) return
|
||||
const items = e.clipboardData!.items
|
||||
// 遍历粘贴板内容
|
||||
const clipboardData = e.clipboardData
|
||||
if (!clipboardData) return
|
||||
|
||||
const items = clipboardData.items
|
||||
let imageItem: DataTransferItem | null = null
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const item = items[i]
|
||||
// 判断是否是粘贴的图片
|
||||
if (item.kind === "file" && item.type.startsWith("image/")) {
|
||||
const file = item.getAsFile()
|
||||
imageItem = item
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (!imageItem) {
|
||||
Message.error("请粘贴图片,无法粘贴文字或其他内容")
|
||||
return
|
||||
}
|
||||
|
||||
const file = imageItem.getAsFile()
|
||||
if (!file) {
|
||||
Message.error("读取图片失败,请重新粘贴")
|
||||
break
|
||||
return
|
||||
}
|
||||
// 判断大小不超过50M
|
||||
|
||||
if (file.size > 50 * 1024 * 1024) {
|
||||
Message.error("要求图片不超过50M")
|
||||
break
|
||||
return
|
||||
}
|
||||
|
||||
isLoading.value = true
|
||||
const reader = new FileReader()
|
||||
reader.onload = async (e: ProgressEvent<FileReader>) => {
|
||||
reader.onload = (e) => {
|
||||
imgData.value = e.target!.result as string
|
||||
await nextTick() // 保证图片展示
|
||||
nextTick(() => {
|
||||
isLoading.value = false
|
||||
})
|
||||
}
|
||||
// 加载失败处理
|
||||
reader.onerror = () => {
|
||||
Message.error("图片加载失败,请重试")
|
||||
isLoading.value = false
|
||||
}
|
||||
reader.readAsDataURL(file) // 可直接转为base64的url给img元素使用
|
||||
break
|
||||
} else {
|
||||
Message.error("请粘贴图片,无法粘贴文字或其他内容")
|
||||
break
|
||||
}
|
||||
}
|
||||
reader.readAsDataURL(file)
|
||||
}
|
||||
|
||||
// 挂载全局监听
|
||||
onMounted(() => {
|
||||
document.addEventListener("paste", onGlobalPaste)
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
document.removeEventListener("paste", onGlobalPaste)
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<span>题注:</span>
|
||||
<a-input v-model="fontnote" :style="{ width: '500px' }"></a-input>
|
||||
</a-space>
|
||||
<a-alert type="warning" class="mt-2">表格第一行为[表头],测评数据、软/硬件项表格会自动添加序号列,而其他纯自定义表格(动态环境描述、软件概述)不会添加序号列</a-alert>
|
||||
</div>
|
||||
<div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover">
|
||||
<div class="arco-table-container">
|
||||
|
||||
@@ -70,7 +70,8 @@ const handleRelatedChange = async (record) => {
|
||||
// 因为switch绑定了record.related所以可以动态改变
|
||||
loading.value = true
|
||||
// 判断该用例是否是未通过,如果未执行或已通过则不允许关联问题单
|
||||
if (!caseIsPassed(caseInfo.value)) {
|
||||
// 修改:当用户取消关联时应该不判断是否caseIsPassed
|
||||
if (record.related && !caseIsPassed(caseInfo.value)) {
|
||||
Message.error("该用例没有缓存或无未通过步骤,请切换页面或设置未通过步骤后添加问题单!")
|
||||
loading.value = false
|
||||
record.related = !record.related
|
||||
@@ -90,7 +91,7 @@ const handleRelatedChange = async (record) => {
|
||||
})
|
||||
if (res) {
|
||||
if (!res.data.isOK) {
|
||||
// 后台说没关联成功则保持不变
|
||||
// 后端返回失败则回退switch状态
|
||||
record.related = !record.related
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
<tr class="arco-table-tr" v-for="(row, idx) in item.children" :key="idx">
|
||||
<td class="arco-table-td">
|
||||
<span class="arco-table-cell arco-table-cell-align-center">
|
||||
{{ idx + 1 }}
|
||||
{{ Number(idx) + 1 }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="arco-table-td">
|
||||
@@ -161,7 +161,6 @@ const fetchTestType = async () => {
|
||||
fetchTestType()
|
||||
|
||||
// 初始化设计需求
|
||||
|
||||
const currentKey: string = route.query.key as string
|
||||
const getDesign = async () => {
|
||||
try {
|
||||
|
||||
@@ -5,7 +5,7 @@ import caseApi from "@/api/project/case"
|
||||
import { useTreeDataStore } from "@/store"
|
||||
import { isEqual, cloneDeep } from "lodash-es"
|
||||
/**
|
||||
* Dut被测件的crud选项
|
||||
* 用例的Crud Init
|
||||
*/
|
||||
export default function (crudRef: Ref<InstanceType<typeof MaCrud>>) {
|
||||
// globals
|
||||
@@ -24,7 +24,6 @@ export default function (crudRef: Ref<InstanceType<typeof MaCrud>>) {
|
||||
if (!beforeFormStep) {
|
||||
return
|
||||
}
|
||||
crudRef.value.getFormData().testStep
|
||||
const iuEqualValue = isEqual(crudRef.value.getFormData().testStep, beforeFormStep)
|
||||
!iuEqualValue &&
|
||||
app.$modal.confirm({
|
||||
|
||||
@@ -39,17 +39,9 @@
|
||||
@replaceSuccess="replaceSuccessHandle"
|
||||
/>
|
||||
<!-- 批量替换人员组件 -->
|
||||
<replace-person
|
||||
:selectRows="undefined"
|
||||
@modify-success="crudRef.refresh()"
|
||||
ref="replacePersonModalRef"
|
||||
/>
|
||||
<replace-person :selectRows="undefined" @modify-success="crudRef.refresh()" ref="replacePersonModalRef" />
|
||||
<!-- 批量替换时间 -->
|
||||
<replace-exetime
|
||||
:selectRows="undefined"
|
||||
@modify-success="crudRef.refresh()"
|
||||
ref="replaceExetimeModalRef"
|
||||
/>
|
||||
<replace-exetime :selectRows="undefined" @modify-success="crudRef.refresh()" ref="replaceExetimeModalRef" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -214,6 +214,8 @@ const useCrudInit = function () {
|
||||
hide: true,
|
||||
search: false,
|
||||
formType: "select",
|
||||
maxTagCount: 4,
|
||||
multiple: true,
|
||||
allowCreate: true,
|
||||
createInfo: {
|
||||
title: "运行环境"
|
||||
@@ -259,6 +261,8 @@ const useCrudInit = function () {
|
||||
hide: true,
|
||||
search: false,
|
||||
formType: "select",
|
||||
multiple:true,
|
||||
maxTagCount: 4,
|
||||
allowCreate: true,
|
||||
createInfo: {
|
||||
title: "开发环境"
|
||||
|
||||
@@ -26,9 +26,7 @@
|
||||
</a-space>
|
||||
</template>
|
||||
</a-popover>
|
||||
<a-button @click="enterWorkPlant(record)" size="mini" status="warning" type="outline">
|
||||
工作区
|
||||
</a-button>
|
||||
<a-button @click="enterWorkPlant(record)" size="mini" status="warning" type="outline"> 工作区 </a-button>
|
||||
<a-link @click="previewRef.open(record)"><icon-eye />预览</a-link>
|
||||
<a-link @click="handleFragmentClick(record)"><icon-file />片段</a-link>
|
||||
<a-link @click="handleBoardClick(record)"><icon-dashboard />看板</a-link>
|
||||
|
||||
Reference in New Issue
Block a user