wms-antdvue/.svn/pristine/44/44897f4c8eeaa4b70ea7fa1abb69fac469903bd0.svn-base
2024-11-07 16:33:03 +08:00

216 lines
7.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<a-form :label-col="{ style: { width: '150px' } }" :model="formData" ref="formRef">
<a-form-item
v-for="(item, index) in configItemList.filter((item) => item.type != 'hidden')"
:key="index"
:label="`${item.name}`"
:name="item.code"
>
<template
v-if="
item.type == 'text' ||
item.type == 'readonly' ||
item.type == 'textarea' ||
item.type == 'password'
"
>
<component
:is="
item.type == 'text' || item.type == 'readonly'
? 'a-input'
: item.type == 'textarea'
? 'a-textarea'
: 'a-input-password'
"
v-model:value="formData[item.code]"
:placeholder="`请输入${item.name}`"
:type="item.type == 'textarea' ? 'textarea' : item.type == 'password' ? 'password' : ''"
:disabled="item.type == 'readonly'"
/>
</template>
<template v-else-if="item.type == 'number'">
<a-input-number v-model:value="formData[item.code]" placeholder="请输入" />
</template>
<!-- <template v-else-if="item.type=='icon'">
<IconPicker class="flex-1" v-model="formData[item.code]"/>
</template> -->
<template v-else-if="item.type == 'radio'">
<a-radio-group v-model:value="formData[item.code]" :name="item.code">
<a-radio v-for="(value, key) in item.param" :value="key" :key="key">
{{ value }}
</a-radio>
</a-radio-group>
</template>
<template v-else-if="item.type == 'checkbox'">
<a-checkbox-group v-model:value="formData[item.code]" :name="item.code">
<a-checkbox :value="key" :key="key" v-for="(value, key) in item.param">{{
value
}}</a-checkbox>
</a-checkbox-group>
</template>
<template v-else-if="item.type == 'select' || item.type == 'selects'">
<a-select
v-model:value="formData[item.code]"
:mode="item.type == 'selects' ? 'multiple' : ''"
>
<a-select-option v-for="(value, key) in item.param" :key="key" :value="key">{{
value
}}</a-select-option>
</a-select>
</template>
<template v-else-if="item.type == 'date' || item.type == 'datetime'">
<a-date-picker
:type="item.type"
:placeholder="`请选择${item.name}`"
v-model:value="formData[item.code]"
style="width: 100%"
:value-format="item.type == 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss'"
:format="item.type == 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss'"
/>
</template>
<template v-else-if="item.type == 'image'">
<UploadImg
:fileType="['image/jpeg', 'image/png', 'image/jpg', 'image/gif']"
name="setting"
:fileSize="200"
v-model:image-url="formData[item.code]"
>
<template #tip>支持扩展名: jpg png jpeg;文件大小不超过200M</template>
</UploadImg>
</template>
<template v-else-if="item.type == 'images'">
<UploadImgs
@upload="fileUploadImgs"
file-type=".jpeg,.png,.jpg,.gif"
name="setting"
:fileSize="200"
:multiple="true"
:fileList="item.filePath"
:z-index="index"
/>
</template>
<template v-else-if="item.type == 'file'">
<UploadFile
@upload="fileUploadFile"
file-type=".xlsx.xls.doc.docx"
name="setting"
:file-list="formData[item.code] ? [{ name: item.fileName, url: item.filePath }] : []"
:z-index="index"
/>
</template>
<template v-else-if="item.type == 'files'">
<UploadFile
@upload="fileUploadFiles"
file-type=".xlsx.xls.doc.docx"
name="setting"
:multiple="true"
:file-list="item.filePath"
:z-index="index"
/>
</template>
<template v-else-if="item.type == 'ueditor'">
<Editor ref="editorRef" :height="fwbHeight" class="flex-1" name="setting" />
</template>
</a-form-item>
</a-form>
<div class="submit-btn">
<a-button type="primary" @click="handleSubmit" v-perm="['sys:configWeb:save']"
>更新系统设置</a-button
>
</div>
</div>
</template>
<script lang="ts" setup>
import { reactive, ref, onMounted, nextTick } from 'vue';
import { message } from 'ant-design-vue';
import Editor from '@/components/Editor/tinymce.vue';
import UploadImg from '@/components/Upload/Image.vue';
import UploadImgs from '@/components/Upload/Images.vue';
import UploadFile from '@/components/Upload/file.vue';
// import IconPicker from "@/components/icon/picker.vue";
import { updateWeb } from '@/api/setting/web';
const props = defineProps({
dataList: {
type: Array,
required: true,
default: [],
},
activeName: {
type: String,
required: true,
default: '',
},
});
const editorRef = ref();
const formRef = ref();
const fwbHeight = document.body.clientHeight - 400;
const formData = reactive({});
const configItemList = ref([]);
const emit = defineEmits(['success']);
const handleSubmit = async () => {
await formRef.value?.validate();
let ueditorIndex = 0;
configItemList.value.map((item) => {
if (item.type == 'ueditor') {
formData[item.code] = editorRef.value[ueditorIndex].myValue;
ueditorIndex++;
}
});
console.log(formData);
await updateWeb(formData);
message.success('更新成功');
emit('success', props.activeName);
};
const fileUploadImgs = (list: any, index: any) => {
const code = configItemList.value[index].code;
formData[code] = [];
configItemList.value[index].filePath = [];
list.map((item) => {
formData[code].push(item.filePath);
configItemList.value[index].filePath.push({ filePath: item.filePath });
});
};
const fileUploadFile = async (filePath: any, fileName: any, index: any) => {
const code = configItemList.value[index].code;
formData[code] = filePath ? `${fileName}|${filePath}` : '';
configItemList.value[index].filePath = filePath;
configItemList.value[index].fileName = fileName;
};
const fileUploadFiles = (list: any, index: any) => {
const code = configItemList.value[index].code;
configItemList.value[index].filePath = [];
formData[code] = [];
list.map((item) => {
formData[code].push(`${item.name}|${item.url}`);
configItemList.value[index].filePath.push({ name: item.name, url: item.url });
});
};
onMounted(() => {
configItemList.value = JSON.parse(JSON.stringify(props.dataList));
nextTick(() => {
let ueditorIndex = 0;
configItemList.value.map((item) => {
formData[item.code] = item.value;
if (item.type == 'ueditor') {
if (editorRef.value) {
editorRef.value[ueditorIndex].myValue = item.value;
ueditorIndex++;
}
}
});
});
});
</script>
<style lang="less" scoped>
.submit-btn {
position: fixed;
bottom: 50px;
right: 4%;
}
</style>