Skip to content

Commit

Permalink
♻️ Refactoring code. 重构字典、前端main.js 常用公用方法
Browse files Browse the repository at this point in the history
  • Loading branch information
lbw committed Sep 29, 2022
1 parent c50efd7 commit 10adf5e
Show file tree
Hide file tree
Showing 36 changed files with 629 additions and 432 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ yarn-error.log*
*.ntvs*
*.njsproj
*.sln
*.iml
*.sw*
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
"serve": "vite preview --host"
},
"dependencies": {
"element-plus": "^2.2.16",
"@element-plus/icons-vue": "^0.2.4",
"@smallwei/avue": "3.1.3",
"@sscfaith/avue-form-design": "^3.0.0-beta.5",
"@smallwei/avue": "^3.1.4",
"avue-form-design": "^3.0.0",
"animate.css": "^4.1.1",
"axios": "^0.21.1",
"benz-amr-recorder": "^1.1.3",
"codemirror": "^5.58.1",
"crypto-js": "^4.1.1",
"element-plus": "^2.2.16",
"js-cookie": "^3.0.1",
"mockjs": "^1.1.0",
"nprogress": "^0.2.0",
Expand Down
4 changes: 2 additions & 2 deletions src/api/admin/dict.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,9 @@ export function putObj(obj) {
})
}

export function remote(type) {
export function remote(key) {
return request({
url: '/admin/dict/type/' + type,
url: '/admin/dict/key/' + key,
method: 'get'
})
}
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion src/components/DictTag/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
:disable-transitions="true"
:key="item.value"
:index="index"
:type="item.type"
:type="item.type || ''"
>
{{ item.label }}
</el-tag>
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@

<script>
import store from "@/store";
import {baseUrl} from "../../config/env.js";
export default {
name: "ExcelUpload",
Expand All @@ -102,8 +101,7 @@ export default {
isUploading: false
},
errorVisible: false,
errorData: [],
baseUrl: baseUrl,
errorData: []
};
},
computed: {
Expand Down
File renamed without changes.
224 changes: 224 additions & 0 deletions src/components/ImageUpload/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
<template>
<div class="component-upload-image">
<el-upload
multiple
:action="baseUrl + uploadImgUrl"
list-type="picture-card"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
ref="imageUpload"
:on-remove="handleDelete"
:show-file-list="true"
:headers="headers"
:file-list="fileList"
:on-preview="handlePictureCardPreview"
:class="{hide: this.fileList.length >= this.limit}"
>
<i class="el-icon-plus"></i>
</el-upload>

<!-- 上传提示 -->
<div class="el-upload__tip" slot="tip" v-if="showTip">
请上传
<template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b></template>
<template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b></template>
的文件
</div>

<el-dialog
:visible.sync="dialogVisible"
title="预览"
width="800"
append-to-body
>
<img
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
/>
</el-dialog>
</div>
</template>

<script>
import store from "@/store/index.js";
export default {
props: {
modelValue: [String, Object, Array],
// 图片数量限制
limit: {
type: Number,
default: 1,
},
// 大小限制(MB)
fileSize: {
type: Number,
default: 5,
},
// 文件类型, 例如['png', 'jpg', 'jpeg']
fileType: {
type: Array,
default: () => ["png", "jpg", "jpeg"],
},
// 是否显示提示
isShowTip: {
type: Boolean,
default: true
}
},
data() {
return {
number: 0,
uploadList: [],
dialogImageUrl: "",
dialogVisible: false,
hideUpload: false,
uploadImgUrl: "/admin/sys-file/upload", // 上传的图片服务器地址
fileList: []
};
},
watch: {
modelValue: {
handler(val) {
if (val) {
// 首先将值转为数组
const list = Array.isArray(val) ? val : this.modelValue.split(',');
// 然后将数组转为对象数组
this.fileList = list.map(item => {
if (typeof item === "string") {
if (item.indexOf(this.baseUrl) === -1) {
item = {name: this.baseUrl + item, url: this.baseUrl + item};
} else {
item = {name: item, url: item};
}
}
return item;
});
} else {
this.fileList = [];
return [];
}
},
deep: true,
immediate: true
}
},
computed: {
// 是否显示提示
showTip() {
return this.isShowTip && (this.fileType || this.fileSize);
},
headers: function () {
return {
Authorization: "Bearer " + store.getters.access_token
};
}
},
methods: {
// 上传前loading加载
handleBeforeUpload(file) {
let isImg = false;
if (this.fileType.length) {
let fileExtension = "";
if (file.name.lastIndexOf(".") > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
}
isImg = this.fileType.some(type => {
if (file.type.indexOf(type) > -1) return true;
if (fileExtension && fileExtension.indexOf(type) > -1) return true;
return false;
});
} else {
isImg = file.type.indexOf("image") > -1;
}
if (!isImg) {
this.$message.error(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`);
return false;
}
if (this.fileSize) {
const isLt = file.size / 1024 / 1024 < this.fileSize;
if (!isLt) {
this.$message.error(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
return false;
}
}
this.number++;
},
// 文件个数超出
handleExceed() {
this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`);
},
// 上传成功回调
handleUploadSuccess(res, file) {
if (res.code === 0) {
this.uploadList.push({name: res.data.fileName, url: this.baseUrl + res.data.url});
this.uploadedSuccessfully();
} else {
this.number--;
this.$message.error(res.msg);
this.$refs.imageUpload.handleRemove(file);
this.uploadedSuccessfully();
}
},
// 删除图片
handleDelete(file) {
const findex = this.fileList.map(f => f.name).indexOf(file.name);
if (findex > -1) {
this.fileList.splice(findex, 1);
this.$emit("update:modelValue", this.listToString(this.fileList));
}
},
// 上传失败
handleUploadError() {
this.$message.error("上传图片失败,请重试");
},
// 上传结束处理
uploadedSuccessfully() {
if (this.number > 0 && this.uploadList.length === this.number) {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
this.$emit("update:modelValue", this.listToString(this.fileList));
}
},
// 预览
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
// 对象转成指定字符串分隔
listToString(list, separator) {
let strs = "";
separator = separator || ",";
for (let i in list) {
if (list[i].url) {
strs += list[i].url.replace(this.baseUrl, "") + separator;
}
}
return strs !== '' ? strs.substr(0, strs.length - 1) : '';
}
}
};
</script>
<style scoped lang="scss">
// .el-upload--picture-card 控制加号部分
:deep(.hide .el-upload--picture-card) {
display: none;
}
// 去掉动画效果
:deep( .el-list-enter-active),
:deep(.el-list-leave-active) {
transition: all 0s;
}
:deep( .el-list-enter, .el-list-leave-active ) {
opacity: 0;
transform: translateY(0);
}
</style>

21 changes: 13 additions & 8 deletions src/components/sms/sms.vue → src/components/Sms/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</template>
</el-input>
</el-form-item>
<el-form-item prop="code" :label="codeLabel">
<el-form-item prop="code" :label="codeLabel" v-if="codeShow">
<el-input
v-model="smsForm.code"
auto-complete="off"
Expand All @@ -39,6 +39,7 @@

<script>
import {sendSmsCode} from "@/api/login";
import {validatenull} from "@/util/validate.js";

const MSGINIT = "发送验证码",
MSGSCUCCESS = "${time}秒后重发",
Expand All @@ -53,6 +54,10 @@ export default {
codeLabel: {
type: String
},
codeShow: {
type: Boolean,
default: true
},
lableWidth: {
type: String
},
Expand All @@ -63,28 +68,28 @@ export default {
}
}
},
watch:{
watch: {
smsForm: {
handler (val) {
this.$emit('input', val)
handler(val) {
this.$emit('"update:modelValue"', val)
},
deep: true,
immediate:true
immediate: true
},
modelValue: {
handler (val) {
handler(val) {
this.smsForm = val
},
deep: true,
immediate:true
immediate: true
},
},
data() {
const validatePhone = (rule, value, callback) => {
this.$emit('validatePhone', rule, value, callback)
};
const validateCode = (rule, value, callback) => {
if (value.length !== 6) {
if (validatenull(value) || value.length !== 6) {
callback(new Error("请输入6位数的验证码"));
} else {
callback();
Expand Down
Loading

0 comments on commit 10adf5e

Please sign in to comment.