123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <template>
- <div class="upload">
- <el-button type="primary" @click="uploadHandle" v-if="!pathImg">点击上传</el-button>
- <div class="msg" v-if="!pathImg">只能上传jpg/png文件,且不超过2MB</div>
- <div class="uopload-box" v-if="pathImg">
- <div class="upload-img">
- <!-- <img :src="pathUrl + pathImg" style="width: 60px;" /> -->
-
- <el-image
- style="width: 60px; height: 60px"
- :src="pathUrl + pathImg"
- :zoom-rate="1.2"
- :max-scale="7"
- :min-scale="0.2"
- :preview-src-list="srcList"
- :initial-index="4"
- fit="cover"
- />
- </div>
- <div class="del" @click="delPath">删除</div>
- </div>
- </div>
- </template>
- <script setup>
- import { ref } from 'vue'
- const { proxy } = getCurrentInstance();
- const value = ref([])
- const config = ref({})
- const srcList = ref([])
- const pathUrl = ref('')
- const emit = defineEmits();
- const pathImg = ref('')
- const props = defineProps({
- propConfig:{},
- propValue:{},
- parentValue:{}
- })
-
- const uploadHandle = () => {
- const accept = '.jpg,.png'
- let input = document.createElement('input')
- input.style.display = 'none'
- input.type = 'file'
- input.accept = accept
- document.body.appendChild(input)
- input.addEventListener('change', function (e) {
- let txt = e.target.files[0];
- let s = txt.name.split('.');
- let suffix = '.' + s[s.length - 1];
- if(accept.indexOf(suffix) == -1){
- proxy.$message({message:'不支持该类型文件上传!'})
- return
- }
- let siz = 2 * 1024*1024;
- if(siz < txt.size){
- proxy.$message({message:'上传文件不能超过2M!'})
- return
- }
- let data = new FormData();
- data.append('file' , txt)
- proxy.request({
- url:'/system/oss/upload',
- method:'post',
- data:data
- }).then(res => {
- pathImg.value = res.data.fileName
- srcList.value[0] = pathUrl.value + res.data.fileName
- onChange()
- }).catch(err => {
- if(err && err.msg) {
- proxy.$message({
- showClose: true,
- message:err.msg,
- type:'error'
- })
- }
- })
- })
- input.click()
- document.body.removeChild(input)
- }
- const delPath = () => {
- proxy.$confirm('您确定删除该图片?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- pathImg.value = '';
- srcList.value = []
- onChange()
- }).catch(()=>{})
-
- }
- const onChange = () => {
- srcList.value[0] = pathUrl.value + pathImg.value
- emit('onChange',pathImg.value)
- }
- const setValue = data => {
- pathImg.value = data ? data : '';
- srcList.value[0] = pathUrl.value + pathImg.value
- }
- defineExpose({
- setValue
- })
- pathUrl.value = import.meta.env.VITE_APP_UPLOAD_URL
- if(props.propValue){
- setValue(props.propValue)
- }
- </script>
- <style lang="scss" scoped>
- .upload{
- width: 100%;
- .msg{
- font-size: 12px;
- // padding: 8px 0;
- }
- .uopload-box{
- display: flex;
- align-items: end;
- .del{
- font-size: 12px;
- color: red;
- margin-left: 8px;
- cursor: pointer;
- }
- }
- .upload-img{
- height: 60px;
- width: 60px;
- border: solid 1px #EEE;
- overflow: hidden;
- overflow: hidden;
- display: flex;
- align-items: center;
- >img{
- width: 100%;
- }
- }
- }
- </style>
|