Merge branch 'ASTRA-80' into 'master'

[WIP] Добавил возможность загрузки сканов и документов на форме данных обследования

See merge request andrusyakka/urban-couscous!363
This commit is contained in:
Vasiliy Gavrilin
2023-05-15 15:12:38 +00:00
2 changed files with 47 additions and 16 deletions

View File

@@ -3,6 +3,7 @@
q-input( q-input(
v-model="value", v-model="value",
:name="name", :name="name",
:multiple="multiple"
:class="{'circle': circle, 'font-input': true, 'doc': doc}", :class="{'circle': circle, 'font-input': true, 'doc': doc}",
:input-style="{ color: textColor, borderColor: borderColor, resize: resize}", :input-style="{ color: textColor, borderColor: borderColor, resize: resize}",
:borderless="borderless", :borderless="borderless",
@@ -40,6 +41,7 @@ export default {
name: "BaseInput", name: "BaseInput",
components: { BaseInputContainer }, components: { BaseInputContainer },
props: { props: {
multiple: Boolean,
circle: Boolean, circle: Boolean,
doc: Boolean, doc: Boolean,
dense: { dense: {
@@ -132,6 +134,7 @@ export default {
z-index: 5 z-index: 5
opacity: 0 opacity: 0
cursor: pointer cursor: pointer
.doc .doc
width: 100% width: 100%
height: 100% height: 100%

View File

@@ -56,13 +56,16 @@
:width="548", :width="548",
type="file", type="file",
id="upload", id="upload",
borderless accept=".xlsx, .xls, .doc, .docx, .pdf, .odt",
borderless,
multiple
) )
.text.flex.flex-col.items-center.justify-center.absolute.font-medium.text-smm .text.flex.flex-col.items-center.justify-center.absolute.font-medium.text-smm
span Загрузите документ span Загрузите документ
label.label.cursor-pointer(for="upload") с компьютера label.label.cursor-pointer(for="upload") с компьютера
span или перетащите его в это поле span или перетащите его в это поле
.photo-field.flex.gap-x-2.items-center(v-if="docData.length", v-for="item in docData") .doc.flex(v-if="docData.length")
.photo-field.flex.gap-x-2.items-center(v-for="item in docData")
q-avatar(size="24px") q-avatar(size="24px")
img.h-10.w-10.object-cover( img.h-10.w-10.object-cover(
:src="iconDictionary[item.name.substr(item.name.lastIndexOf('.') + 1)]" :src="iconDictionary[item.name.substr(item.name.lastIndexOf('.') + 1)]"
@@ -77,18 +80,21 @@
:width="548", :width="548",
type="file", type="file",
id="upload", id="upload",
borderless accept="image/*",
borderless,
multiple
) )
.text.flex.flex-col.items-center.justify-center.absolute.font-medium.text-smm .text.flex.flex-col.items-center.justify-center.absolute.font-medium.text-smm
span Загрузите скан документа span Загрузите скан документа
label.label(for="upload") с компьютера label.label(for="upload") с компьютера
span или перетащите его в это поле span или перетащите его в это поле
.photo-field.flex.gap-x-2.items-center(v-if="scanData.length", v-for="item in scanData") .doc.flex(v-if="scanData.length")
q-avatar(size="24px") .scan-field.flex.gap-x-2.items-center.pl-2.pr-4.py-2(v-for="item in scanData")
img.h-10.w-10.object-cover( q-avatar(size="40px", rounded)
:src="iconDictionary[item.name.substr(item.name.lastIndexOf('.') + 1)]" img.h-10.w-10.object-cover(:src="item.file")
) .flex.flex-col.gap-y-1
.doc-text.font-medium.text-smm {{item.name}} .doc-text.font-medium.text-smm {{item.name.substr(0, item.name.lastIndexOf('.'))}}
.title.font-medium.text-xsx {{item.size + " Мб"}}
</template> </template>
<script> <script>
@@ -138,9 +144,10 @@ export default {
iconDictionary: { iconDictionary: {
doc: wordIcon, doc: wordIcon,
docx: wordIcon, docx: wordIcon,
xls: exelIcon,
xlsx: exelIcon,
odt: wordIcon, odt: wordIcon,
pdf: pdfIcon, pdf: pdfIcon,
xls: exelIcon,
}, },
}; };
}, },
@@ -170,7 +177,17 @@ export default {
this.docData = [...this.docData, ...e.target.files]; this.docData = [...this.docData, ...e.target.files];
}, },
addNewScan(e) { addNewScan(e) {
this.scanData = [...this.scanData, ...e.target.files]; [...e.target.files].forEach((file) => {
const reader = new FileReader();
reader.onload = (e) => {
this.scanData.push({
file: e.target.result,
name: file.name,
size: (file.size / 1024 / 1024).toFixed(1),
});
};
reader.readAsDataURL(file);
});
}, },
}, },
}; };
@@ -276,4 +293,15 @@ export default {
border-radius: 4px border-radius: 4px
padding: 4px 8px padding: 4px 8px
width: fit-content width: fit-content
.doc
column-gap: 4px
row-gap: 4px
flex-wrap: wrap !important
.scan-field
height: 56px
background: var(--bg-light-grey)
border-radius: 4px
width: fit-content
</style> </style>