|
2 | 2 | * @Author: 秦少卫
|
3 | 3 | * @Date: 2022-09-03 19:16:55
|
4 | 4 | * @LastEditors: 秦少卫
|
5 |
| - * @LastEditTime: 2024-04-22 16:26:27 |
| 5 | + * @LastEditTime: 2024-05-11 13:34:51 |
6 | 6 | * @Description: 导入JSON文件
|
7 | 7 | -->
|
8 | 8 |
|
9 | 9 | <template>
|
10 | 10 | <div style="display: inline-block">
|
11 |
| - <Button @click="insert" type="text" size="small">{{ $t('import_files') }}</Button> |
| 11 | + <Dropdown @on-click="clickHandler"> |
| 12 | + <a href="javascript:void(0)"> |
| 13 | + {{ $t('importFiles.file') }} |
| 14 | + <Icon type="ios-arrow-down"></Icon> |
| 15 | + </a> |
| 16 | + <template #list> |
| 17 | + <DropdownMenu> |
| 18 | + <DropdownItem name="createDesign"> |
| 19 | + {{ $t('importFiles.createDesign.title') }} |
| 20 | + </DropdownItem> |
| 21 | + <DropdownItem name="importFiles">{{ $t('importFiles.importFiles') }}</DropdownItem> |
| 22 | + </DropdownMenu> |
| 23 | + </template> |
| 24 | + </Dropdown> |
| 25 | + |
| 26 | + <!-- 创建设计 --> |
| 27 | + <Modal v-model="modal" :title="$t('importFiles.createDesign.title')" footer-hide> |
| 28 | + <h3> |
| 29 | + {{ $t('importFiles.createDesign.customSize') }} |
| 30 | + </h3> |
| 31 | + <Form ref="formInline" inline :label-width="40"> |
| 32 | + <FormItem label="宽度"> |
| 33 | + <InputNumber v-model="width" :min="1" placeholder="请输入"></InputNumber> |
| 34 | + </FormItem> |
| 35 | + <FormItem label="高度"> |
| 36 | + <InputNumber v-model="height" :min="1" placeholder="请输入"></InputNumber> |
| 37 | + </FormItem> |
| 38 | + <FormItem :label-width="0"> |
| 39 | + <Button type="primary" @click="customSizeCreate"> |
| 40 | + {{ $t('importFiles.createDesign.create') }} |
| 41 | + </Button> |
| 42 | + </FormItem> |
| 43 | + </Form> |
| 44 | + <Divider class="divider" /> |
| 45 | + <h3> |
| 46 | + {{ $t('importFiles.createDesign.systemSize') }} |
| 47 | + </h3> |
| 48 | + <CellGroup @on-click="setSize"> |
| 49 | + <Cell |
| 50 | + :title="item.name" |
| 51 | + :label="`${item.width}x${item.height}${item.unit}`" |
| 52 | + :arrow="false" |
| 53 | + :key="item.name" |
| 54 | + :name="`${item.width}x${item.height}x${item.unit}`" |
| 55 | + v-for="item in sizeList" |
| 56 | + > |
| 57 | + <template #extra> |
| 58 | + <Icon type="md-add" /> |
| 59 | + </template> |
| 60 | + </Cell> |
| 61 | + </CellGroup> |
| 62 | + </Modal> |
12 | 63 | </div>
|
13 | 64 | </template>
|
14 | 65 |
|
15 | 66 | <script name="ImportJson" setup>
|
16 | 67 | import useSelect from '@/hooks/select';
|
17 |
| - |
| 68 | +import useMaterial from '@/hooks/useMaterial'; |
| 69 | +import { Message } from 'view-ui-plus'; |
18 | 70 | const { canvasEditor } = useSelect();
|
19 |
| -const insert = () => { |
20 |
| - canvasEditor.insert(); |
| 71 | +const { createTmpl, routerToId } = useMaterial(); |
| 72 | + |
| 73 | +const clickHandler = (type) => { |
| 74 | + const handleMap = { |
| 75 | + // 导入文件 |
| 76 | + importFiles: canvasEditor.insert, |
| 77 | + // 创建文件 |
| 78 | + createDesign, |
| 79 | + }; |
| 80 | + handleMap[type]?.(); |
| 81 | +}; |
| 82 | + |
| 83 | +const modal = ref(false); |
| 84 | +const width = ref(null); |
| 85 | +const height = ref(null); |
| 86 | +const sizeList = ref([]); |
| 87 | +const createDesign = () => { |
| 88 | + width.value = null; |
| 89 | + height.value = null; |
| 90 | + // 获取素材 |
| 91 | + canvasEditor.getSizeList().then((res) => { |
| 92 | + sizeList.value = res; |
| 93 | + }); |
| 94 | + modal.value = true; |
| 95 | +}; |
| 96 | +const setSize = (itemString) => { |
| 97 | + const [w, h] = itemString.split('x'); |
| 98 | + width.value = Number(w); |
| 99 | + height.value = Number(h); |
| 100 | +}; |
| 101 | + |
| 102 | +const customSizeCreate = async () => { |
| 103 | + if (width.value && height.value) { |
| 104 | + const res = await createTmpl(width.value, height.value); |
| 105 | + routerToId(res.data.data.id); |
| 106 | + modal.value = false; |
| 107 | + Message.success('创建成功'); |
| 108 | + } else { |
| 109 | + Message.warning('请检查尺寸'); |
| 110 | + } |
21 | 111 | };
|
22 | 112 | </script>
|
| 113 | +<style scoped lang="less"> |
| 114 | +h3 { |
| 115 | + margin-bottom: 10px; |
| 116 | +} |
| 117 | +.divider { |
| 118 | + margin-top: 0; |
| 119 | +} |
| 120 | +</style> |
0 commit comments