|
|
@@ -6,27 +6,27 @@
|
|
|
<span class="label">ISBN:</span>
|
|
|
<span class="value">{{ outStockData.isbn || '-' }}</span>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<div class="info-row">
|
|
|
<span class="label">书名:</span>
|
|
|
<span class="value">{{ outStockData.bookName || '-' }}</span>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<div class="info-row">
|
|
|
<span class="label">数量:</span>
|
|
|
<span class="value">{{ outStockData.num || '-' }}</span>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<div class="info-row">
|
|
|
<span class="label">链接:</span>
|
|
|
- <span class="value link-text">{{ outStockData.urlLink || '-' }}</span>
|
|
|
+ <span class="value link-text" @click="handleRedirect(outStockData.urlLink)">{{ outStockData.urlLink || '-' }}</span>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<div class="info-row">
|
|
|
<span class="label">提取码:</span>
|
|
|
<span class="value">{{ outStockData.extCode || '-' }}</span>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<div class="info-row">
|
|
|
<span class="label">备注:</span>
|
|
|
<span class="value">{{ outStockData.remark || '-' }}</span>
|
|
|
@@ -43,14 +43,38 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
- import { ref, reactive } from 'vue';
|
|
|
- import { EleMessage } from 'ele-admin-plus/es';
|
|
|
-
|
|
|
- /** 弹窗是否打开 */
|
|
|
- const visible = defineModel({ type: Boolean });
|
|
|
-
|
|
|
- /** 出库数据 */
|
|
|
- const outStockData = reactive({
|
|
|
+import { ref, reactive } from 'vue';
|
|
|
+import { EleMessage } from 'ele-admin-plus/es';
|
|
|
+
|
|
|
+/** 弹窗是否打开 */
|
|
|
+const visible = defineModel({ type: Boolean });
|
|
|
+
|
|
|
+/** 出库数据 */
|
|
|
+const outStockData = reactive({
|
|
|
+ isbn: '',
|
|
|
+ bookName: '',
|
|
|
+ num: '',
|
|
|
+ urlLink: '',
|
|
|
+ extCode: '',
|
|
|
+ remark: ''
|
|
|
+});
|
|
|
+
|
|
|
+/** 处理链接点击事件 */
|
|
|
+const handleRedirect = (url) => {
|
|
|
+ if (url) {
|
|
|
+ window.open(url, '_blank');
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 关闭弹窗 */
|
|
|
+const handleCancel = () => {
|
|
|
+ visible.value = false;
|
|
|
+};
|
|
|
+
|
|
|
+/** 弹窗关闭事件 */
|
|
|
+const handleClosed = () => {
|
|
|
+ // 重置数据
|
|
|
+ Object.assign(outStockData, {
|
|
|
isbn: '',
|
|
|
bookName: '',
|
|
|
num: '',
|
|
|
@@ -58,78 +82,61 @@
|
|
|
extCode: '',
|
|
|
remark: ''
|
|
|
});
|
|
|
+};
|
|
|
|
|
|
- /** 关闭弹窗 */
|
|
|
- const handleCancel = () => {
|
|
|
- visible.value = false;
|
|
|
- };
|
|
|
-
|
|
|
- /** 弹窗关闭事件 */
|
|
|
- const handleClosed = () => {
|
|
|
- // 重置数据
|
|
|
- Object.assign(outStockData, {
|
|
|
- isbn: '',
|
|
|
- bookName: '',
|
|
|
- num: '',
|
|
|
- urlLink: '',
|
|
|
- extCode: '',
|
|
|
- remark: ''
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- /** 复制全部信息 */
|
|
|
- const handleCopyAll = async () => {
|
|
|
- try {
|
|
|
- // 格式化复制内容
|
|
|
- const copyText = `ISBN: ${outStockData.isbn || '-'}
|
|
|
+/** 复制全部信息 */
|
|
|
+const handleCopyAll = async () => {
|
|
|
+ try {
|
|
|
+ // 格式化复制内容
|
|
|
+ const copyText = `ISBN: ${outStockData.isbn || '-'}
|
|
|
书名: ${outStockData.bookName || '-'}
|
|
|
数量: ${outStockData.num || '-'}
|
|
|
链接: ${outStockData.urlLink || '-'}
|
|
|
提取码: ${outStockData.extCode || '-'}
|
|
|
备注: ${outStockData.remark || '-'}`;
|
|
|
|
|
|
- // 使用 Clipboard API 复制到剪贴板
|
|
|
- if (navigator.clipboard && window.isSecureContext) {
|
|
|
- await navigator.clipboard.writeText(copyText);
|
|
|
- } else {
|
|
|
- // 降级方案:使用 document.execCommand
|
|
|
- const textArea = document.createElement('textarea');
|
|
|
- textArea.value = copyText;
|
|
|
- textArea.style.position = 'fixed';
|
|
|
- textArea.style.left = '-999999px';
|
|
|
- textArea.style.top = '-999999px';
|
|
|
- document.body.appendChild(textArea);
|
|
|
- textArea.focus();
|
|
|
- textArea.select();
|
|
|
- document.execCommand('copy');
|
|
|
- textArea.remove();
|
|
|
- }
|
|
|
-
|
|
|
- EleMessage.success('复制成功');
|
|
|
- } catch (error) {
|
|
|
- console.error('复制失败:', error);
|
|
|
- EleMessage.error('复制失败,请手动复制');
|
|
|
+ // 使用 Clipboard API 复制到剪贴板
|
|
|
+ if (navigator.clipboard && window.isSecureContext) {
|
|
|
+ await navigator.clipboard.writeText(copyText);
|
|
|
+ } else {
|
|
|
+ // 降级方案:使用 document.execCommand
|
|
|
+ const textArea = document.createElement('textarea');
|
|
|
+ textArea.value = copyText;
|
|
|
+ textArea.style.position = 'fixed';
|
|
|
+ textArea.style.left = '-999999px';
|
|
|
+ textArea.style.top = '-999999px';
|
|
|
+ document.body.appendChild(textArea);
|
|
|
+ textArea.focus();
|
|
|
+ textArea.select();
|
|
|
+ document.execCommand('copy');
|
|
|
+ textArea.remove();
|
|
|
}
|
|
|
- };
|
|
|
-
|
|
|
- /** 弹窗打开事件 */
|
|
|
- const handleOpen = (data) => {
|
|
|
- if (data) {
|
|
|
- Object.assign(outStockData, {
|
|
|
- isbn: data.isbn || '',
|
|
|
- bookName: data.bookName || '',
|
|
|
- num: data.num || '',
|
|
|
- urlLink: data.urlLink || '',
|
|
|
- extCode: data.extCode || '',
|
|
|
- remark: data.remark || ''
|
|
|
- });
|
|
|
- visible.value = true;
|
|
|
- }
|
|
|
- };
|
|
|
|
|
|
- defineExpose({
|
|
|
- handleOpen
|
|
|
- });
|
|
|
+ EleMessage.success('复制成功');
|
|
|
+ } catch (error) {
|
|
|
+ console.error('复制失败:', error);
|
|
|
+ EleMessage.error('复制失败,请手动复制');
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 弹窗打开事件 */
|
|
|
+const handleOpen = (data) => {
|
|
|
+ if (data) {
|
|
|
+ Object.assign(outStockData, {
|
|
|
+ isbn: data.isbn || '',
|
|
|
+ bookName: data.bookName || '',
|
|
|
+ num: data.num || '',
|
|
|
+ urlLink: data.urlLink || '',
|
|
|
+ extCode: data.extCode || '',
|
|
|
+ remark: data.remark || ''
|
|
|
+ });
|
|
|
+ visible.value = true;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+defineExpose({
|
|
|
+ handleOpen
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|