Commit 99d568fb authored by 赵伟庚's avatar 赵伟庚

update:代码格式化

parent fdd9d524
root = true
[*]
charset = utf-8
insert_final_newline = true
end_of_line = lf
indent_style = space
indent_size = 2
max_line_length = 120
/**
* 优先级高于.editorconfig
* https://prettier.io/docs/en/options.html
* 单引号,双引号,末尾是否逗号,是否需要分号根据团队需要配置
* 但是prettier对vue template的格式化能力有限,建议多观察是否满足需要,最佳实践还是要结合eslint进行风格统一
*/
module.exports = {
arrowParens: "always",
bracketSameLine: true, // https://prettier.io/docs/en/options.html#bracket-line
bracketSpacing: true,
embeddedLanguageFormatting: "auto",
htmlWhitespaceSensitivity: "css",
insertPragma: false,
jsxSingleQuote: false,
printWidth: 120, // 如果属性过多需要换行,减少该值
proseWrap: "preserve",
quoteProps: "as-needed",
requirePragma: false,
semi: true,
singleAttributePerLine: false,
singleQuote: false, // 双引号
tabWidth: 2, // 缩进
trailingComma: "es5",
useTabs: false, // 不要用tab缩进
vueIndentScriptAndStyle: false,
endOfLine: "lf",
};
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
:action="action" :action="action"
:data="{ :data="{
directory: 'image', directory: 'image',
uniqueCode: false uniqueCode: false,
}" }"
:auto-upload="autoUpload" :auto-upload="autoUpload"
:list-type="listType" :list-type="listType"
...@@ -17,8 +17,7 @@ ...@@ -17,8 +17,7 @@
:on-success="handleSuccess" :on-success="handleSuccess"
:on-remove="handleRemove" :on-remove="handleRemove"
:on-preview="handlePreview" :on-preview="handlePreview"
:multiple="multiple" :multiple="multiple">
>
<template v-slot:trigger> <template v-slot:trigger>
<el-icon v-if="listType === 'picture-card'"><Plus /></el-icon> <el-icon v-if="listType === 'picture-card'"><Plus /></el-icon>
<!-- <i class="el-icon-plus" v-if="listType === 'picture-card'"></i> --> <!-- <i class="el-icon-plus" v-if="listType === 'picture-card'"></i> -->
...@@ -28,36 +27,29 @@ ...@@ -28,36 +27,29 @@
</template> </template>
<template v-if="!autoUpload"> <template v-if="!autoUpload">
<el-button <el-button type="success" icon="el-icon-position" @click="submitUpload" style="margin-left: 16px">
type="success"
icon="el-icon-position"
@click="submitUpload"
style="margin-left: 16px"
>
上传到服务器 上传到服务器
</el-button> </el-button>
</template> </template>
<template v-slot:tip v-if="showTips && tips"> <template v-slot:tip v-if="showTips && tips">
<div class="el-upload__tip" style="color:#909bb6;"> <div class="el-upload__tip" style="color: #909bb6">
{{ customTips||tips }} {{ customTips || tips }}
</div> </div>
</template> </template>
</el-upload> </el-upload>
<el-dialog title="图片预览" v-model="dialogVisible" custom-class="bg-upload-image-dialog"> <el-dialog title="图片预览" v-model="dialogVisible" class="bg-upload-image-dialog">
<img style="margin:30px 0;width: 600px;" :src="dialogImageUrl" alt="Preview Image" /> <img style="margin: 30px 0; width: 600px" :src="dialogImageUrl" alt="Preview Image" />
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import { import { UploadFilled } from "@element-plus/icons-vue";
UploadFilled
} from '@element-plus/icons-vue'
export default { export default {
name: "BgUploadImage", name: "BgUploadImage",
props: { props: {
modelValue:{ modelValue: {
type: Array, type: Array,
default: () => [], default: () => [],
}, },
...@@ -99,12 +91,12 @@ export default { ...@@ -99,12 +91,12 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, // 显示提示 }, // 显示提示
customTips:{ customTips: {
type: String, type: String,
default: "", default: "",
},// 自定义提示内容 }, // 自定义提示内容
}, },
emits: ['update:modelValue',"change"], emits: ["update:modelValue", "change"],
computed: { computed: {
acceptTypes() { acceptTypes() {
if (Array.isArray(this.accept)) { if (Array.isArray(this.accept)) {
...@@ -146,34 +138,34 @@ export default { ...@@ -146,34 +138,34 @@ export default {
return { return {
fileList: [], fileList: [],
UploadFilled, UploadFilled,
dialogImageUrl:'', dialogImageUrl: "",
dialogVisible:false dialogVisible: false,
}; };
}, },
watch: { watch: {
modelValue() { modelValue() {
let newStr = this.modelValue.map((v) => v.url).join(","); let newStr = this.modelValue.map((v) => v.url).join(",");
let oldStr = this.fileList let oldStr = this.fileList.map((v) => (v.response && v.response.data) || v.url).join(",");
.map((v) => (v.response && v.response.data) || v.url)
.join(",");
if (newStr !== oldStr) { if (newStr !== oldStr) {
this.fileList = [...this.modelValue]; this.fileList = [...this.modelValue];
} }
this.$nextTick().then(() => { this.$nextTick().then(() => {
this.checkLimit(this.modelValue) this.checkLimit(this.modelValue);
}); });
}, },
}, },
methods: { methods: {
checkLimit(filelist) { checkLimit(filelist) {
const limit = this.limit const limit = this.limit;
const uploadDom = this.$refs['upload'] const uploadDom = this.$refs["upload"];
const length = uploadDom.$el.children[0].children.length const length = uploadDom.$el.children[0].children.length;
if (filelist.length === limit) { if (filelist.length === limit) {
uploadDom.$el.children[0].children[length-1].style.display = 'none' uploadDom.$el.children[0].children[length - 1].style.display = "none";
} else { } else {
uploadDom.$el.children[0].children[length-1]?uploadDom.$el.children[0].children[length-1].style.display = '':'' uploadDom.$el.children[0].children[length - 1]
? (uploadDom.$el.children[0].children[length - 1].style.display = "")
: "";
} }
}, },
handleBeforeUpload(file) { handleBeforeUpload(file) {
...@@ -184,12 +176,9 @@ export default { ...@@ -184,12 +176,9 @@ export default {
}; };
let temp = file.name.split("."); let temp = file.name.split(".");
let type = "." + temp[temp.length - 1].toLocaleLowerCase(); let type = "." + temp[temp.length - 1].toLocaleLowerCase();
let fileTypeIsOk = let fileTypeIsOk = this.types.length === 0 || this.types.indexOf(type) > -1;
this.types.length === 0 || this.types.indexOf(type) > -1;
let fileSizeIsOk = let fileSizeIsOk =
this.fileSize === 0 || this.fileSize === 0 || this.fileSize === undefined || file.size / units[this.fileSizeUnit] <= this.fileSize;
this.fileSize === undefined ||
file.size / units[this.fileSizeUnit] <= this.fileSize;
let checked = fileTypeIsOk && fileSizeIsOk; let checked = fileTypeIsOk && fileSizeIsOk;
if (!checked) { if (!checked) {
...@@ -200,15 +189,15 @@ export default { ...@@ -200,15 +189,15 @@ export default {
}, },
handleSuccess(response, file, fileList) { handleSuccess(response, file, fileList) {
this.updateFileList(fileList); this.updateFileList(fileList);
this.checkLimit(fileList) this.checkLimit(fileList);
}, },
handleRemove(file, fileList) { handleRemove(file, fileList) {
this.updateFileList(fileList); this.updateFileList(fileList);
this.checkLimit(fileList) this.checkLimit(fileList);
}, },
handlePreview({ name, url }) { handlePreview({ name, url }) {
this.dialogImageUrl = url this.dialogImageUrl = url;
this.dialogVisible = true this.dialogVisible = true;
// let a = document.createElement("a"); // 生成一个a元素 // let a = document.createElement("a"); // 生成一个a元素
// let event = new MouseEvent("click"); // 创建一个单击事件 // let event = new MouseEvent("click"); // 创建一个单击事件
...@@ -229,7 +218,7 @@ export default { ...@@ -229,7 +218,7 @@ export default {
console.log(values); console.log(values);
this.$emit("update:modelValue", values); this.$emit("update:modelValue", values);
this.$emit("change",values); this.$emit("change", values);
}, },
submitUpload() { submitUpload() {
this.$refs.upload.submit(); this.$refs.upload.submit();
......
This diff is collapsed.
...@@ -5,8 +5,7 @@ ...@@ -5,8 +5,7 @@
:model="contactForm" :model="contactForm"
:rules="contactFormRules" :rules="contactFormRules"
ref="contactRef" ref="contactRef"
style="max-width: 66%" style="max-width: 66%">
>
<el-form-item label="联系人姓名" prop="contact_name"> <el-form-item label="联系人姓名" prop="contact_name">
<el-input v-model="contactForm.contact_name" /> <el-input v-model="contactForm.contact_name" />
</el-form-item> </el-form-item>
...@@ -14,24 +13,22 @@ ...@@ -14,24 +13,22 @@
<el-input v-model="contactForm.contact_phone" /> <el-input v-model="contactForm.contact_phone" />
</el-form-item> </el-form-item>
<el-form-item label="联系人邮箱" prop="contact_email"> <el-form-item label="联系人邮箱" prop="contact_email">
<el-input v-model="contactForm.contact_email"/> <el-input v-model="contactForm.contact_email" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="3" v-model="contactForm.remark" show-word-limit maxlength="300"/> <el-input type="textarea" :rows="3" v-model="contactForm.remark" show-word-limit maxlength="300" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<script setup> <script setup>
import { reactive, ref, onMounted,getCurrentInstance } from 'vue' import { reactive, ref, onMounted } from "vue";
const { proxy } = getCurrentInstance()
const { $axios,$message } = proxy
const contactForm = reactive({ const contactForm = reactive({
contact_name: '', contact_name: "",
contact_phone: '', contact_phone: "",
contact_email: '', contact_email: "",
remark: '', remark: "",
}) });
const props = defineProps({ const props = defineProps({
formType: { formType: {
type: Boolean, type: Boolean,
...@@ -39,14 +36,14 @@ const props = defineProps({ ...@@ -39,14 +36,14 @@ const props = defineProps({
}, },
id: { id: {
type: String, type: String,
default: '', default: "",
} },
}); });
const checkPhone = (rule, value, callback) => { const checkPhone = (rule, value, callback) => {
var phone_ruler = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/; var phone_ruler = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
setTimeout(() => { setTimeout(() => {
if (!phone_ruler.test(value)&&value.length!==0) { if (!phone_ruler.test(value) && value.length !== 0) {
callback(new Error("请输入正确的手机号码")); callback(new Error("请输入正确的手机号码"));
} else { } else {
callback(); callback();
...@@ -72,55 +69,53 @@ const checkPhone = (rule, value, callback) => { ...@@ -72,55 +69,53 @@ const checkPhone = (rule, value, callback) => {
// } // }
const checkName = (rule, value, callback) => { const checkName = (rule, value, callback) => {
var reg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/ var reg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/;
if (!reg.test(value)) { if (!reg.test(value)) {
callback(new Error("只能输入字母、数字和汉字")) callback(new Error("只能输入字母、数字和汉字"));
}else { } else {
callback() callback();
} }
} };
const contactFormRules = reactive({ const contactFormRules = reactive({
contact_name: [ contact_name: [
{ required: true, message: '请输入联系人姓名', trigger: 'blur' }, { required: true, message: "请输入联系人姓名", trigger: "blur" },
{ max: 50, message: "联系人姓名最大长度为50个字符", trigger: "blur"}, { max: 50, message: "联系人姓名最大长度为50个字符", trigger: "blur" },
{ validator: checkName, trigger: 'blur' }, { validator: checkName, trigger: "blur" },
], ],
contact_phone: [ contact_phone: [
{ required: true, message: '请输入联系人手机号', trigger: 'blur' }, { required: true, message: "请输入联系人手机号", trigger: "blur" },
{ validator: checkPhone, trigger: 'blur' }, { validator: checkPhone, trigger: "blur" },
// { validator: checkPhoneRepet, trigger: 'blur' } // { validator: checkPhoneRepet, trigger: 'blur' }
], ],
contact_email: [ contact_email: [
{ type: 'email', message: '请输入正确的邮箱', trigger: 'blur' }, { type: "email", message: "请输入正确的邮箱", trigger: "blur" },
{ max: 100, message: "邮箱最大长度为100个字符", trigger: "blur"}, { max: 100, message: "邮箱最大长度为100个字符", trigger: "blur" },
] ],
}) });
const contactRef = ref(null) const contactRef = ref(null);
const emit = defineEmits(['action']) const emit = defineEmits(["action"]);
const submitForm = async () => { const submitForm = async () => {
if (!contactRef) return if (!contactRef) return;
await contactRef.value.validate((valid, fields) => { await contactRef.value.validate((valid, fields) => {
if (valid) { if (valid) {
emit('action', contactForm) emit("action", contactForm);
} else { } else {
emit('action',null) emit("action", null);
} }
}) });
} };
const clearForm = () => { const clearForm = () => {
if (!contactRef) return if (!contactRef) return;
contactRef.value.resetFields() contactRef.value.resetFields();
} };
const setForm = (data) => { const setForm = (data) => {
Object.assign(contactForm, data); Object.assign(contactForm, data);
} };
onMounted(() => {
}) onMounted(() => {});
defineExpose({ submitForm, clearForm, setForm }) defineExpose({ submitForm, clearForm, setForm });
</script> </script>
This diff is collapsed.
...@@ -4,20 +4,23 @@ ...@@ -4,20 +4,23 @@
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item> 开发管理 </el-breadcrumb-item> <el-breadcrumb-item> 开发管理 </el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/develop/account' }"> 系统账号管理 </el-breadcrumb-item> <el-breadcrumb-item :to="{ path: '/develop/account' }"> 系统账号管理 </el-breadcrumb-item>
<el-breadcrumb-item > 详情 </el-breadcrumb-item> <el-breadcrumb-item> 详情 </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
<div class="page_content apaas_scroll"> <div class="page_content apaas_scroll">
<div class="info_row"> <div class="info_row">
<div class="title"> <div class="title">
<div><span class="icon_box"></span> 基础信息</div> <div><span class="icon_box"></span> 基础信息</div>
<div class="dashed_line"> <div class="dashed_line"></div>
</div>
</div> </div>
<div class="info_content"> <div class="info_content">
<div class="img_box"> <div class="img_box">
<img v-if="logo" :src="logo" style="height: 96px;width: 96px;border-radius: 99px" alt=""> <img v-if="logo" :src="logo" style="height: 96px; width: 96px; border-radius: 99px" alt="" />
<img v-else src="/src/assets/imgs/home_ic_user.png" style="height: 96px;width: 96px;border-radius: 99px" alt=""> <img
v-else
src="/src/assets/imgs/home_ic_user.png"
style="height: 96px; width: 96px; border-radius: 99px"
alt="" />
</div> </div>
<div class="info_box"> <div class="info_box">
<bg-info :data="baseInfo"></bg-info> <bg-info :data="baseInfo"></bg-info>
...@@ -27,8 +30,7 @@ ...@@ -27,8 +30,7 @@
<div> <div>
<div class="title"> <div class="title">
<div><span class="icon_box"></span> 联系人信息</div> <div><span class="icon_box"></span> 联系人信息</div>
<div class="dashed_line"> <div class="dashed_line"></div>
</div>
</div> </div>
<div class="info_content"> <div class="info_content">
<div class="img_box"></div> <div class="img_box"></div>
...@@ -42,111 +44,107 @@ ...@@ -42,111 +44,107 @@
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, ref, } from '@vue/reactivity' import { reactive, toRefs, ref, onBeforeMount } from "vue";
import { getCurrentInstance } from 'vue' import { useRoute, useRouter } from "vue-router";
import { computed, onBeforeMount } from '@vue/runtime-core' import axios from "@/request/http.js";
import { useRoute, useRouter } from 'vue-router'; import { ElMessage } from "element-plus";
const route = useRoute(); const route = useRoute();
const { proxy } = getCurrentInstance() const baseInfo = reactive([
const { $axios,$message } = proxy {
const baseInfo = reactive(
[{
name: "所属机构", name: "所属机构",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "业务系统编码", name: "业务系统编码",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "业务系统名称", name: "业务系统名称",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "账号", name: "账号",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "AppID", name: "AppID",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "AppSecret", name: "AppSecret",
value: "", value: "",
copy_icon: true, copy_icon: true,
secret: true, secret: true,
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "创建人", name: "创建人",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "创建时间", name: "创建时间",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "是否启用", name: "是否启用",
value: "", value: "",
state: "", state: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "开发厂商名称", name: "开发厂商名称",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "访问地址", name: "访问地址",
value: "", value: "",
full: true, full: true,
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "业务系统描述", name: "业务系统描述",
value: "", value: "",
full: true, full: true,
nameWidth: 130 nameWidth: 130,
}, },
] ]);
)
const contactInfo = reactive( const contactInfo = reactive([
[{ {
name: "联系人姓名", name: "联系人姓名",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "联系人手机号", name: "联系人手机号",
value: "", value: "",
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "联系人邮箱", name: "联系人邮箱",
value: "", value: "",
full: true, full: true,
nameWidth: 130 nameWidth: 130,
}, },
{ {
name: "备注", name: "备注",
value: "", value: "",
full: true, full: true,
nameWidth: 130 nameWidth: 130,
}, },
]) ]);
const logo = ref('') const logo = ref("");
const getDetail = () => { const getDetail = () => {
$axios.get(`/apaas/system/v5/user/detail/${route.query.id}`) axios.get(`/apaas/system/v5/user/detail/${route.query.id}`).then((res) => {
.then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
const detail = res.data.data; const detail = res.data.data;
baseInfo[0].value = detail.organization_name; baseInfo[0].value = detail.organization_name;
...@@ -155,10 +153,11 @@ const baseInfo = reactive( ...@@ -155,10 +153,11 @@ const baseInfo = reactive(
baseInfo[3].value = detail.system_account; baseInfo[3].value = detail.system_account;
baseInfo[4].value = detail.app_id; baseInfo[4].value = detail.app_id;
baseInfo[5].value = detail.app_secret; baseInfo[5].value = detail.app_secret;
baseInfo[6].value = detail.created_by+"("+(detail.created_user_role ? detail.created_user_role.join('') : '')+")"; baseInfo[6].value =
detail.created_by + "(" + (detail.created_user_role ? detail.created_user_role.join("") : "") + ")";
baseInfo[7].value = detail.created_time; baseInfo[7].value = detail.created_time;
baseInfo[8].value = detail.state === 1 ? '' : ''; baseInfo[8].value = detail.state === 1 ? "" : "";
baseInfo[8].state = detail.state === 1 ? 'success' : 'default'; baseInfo[8].state = detail.state === 1 ? "success" : "default";
baseInfo[9].value = detail.develop_name; baseInfo[9].value = detail.develop_name;
baseInfo[10].value = detail.access_address; baseInfo[10].value = detail.access_address;
baseInfo[11].value = detail.business_desc; baseInfo[11].value = detail.business_desc;
...@@ -169,15 +168,15 @@ const baseInfo = reactive( ...@@ -169,15 +168,15 @@ const baseInfo = reactive(
contactInfo[3].value = detail.remark; contactInfo[3].value = detail.remark;
logo.value = detail.logo; logo.value = detail.logo;
}else { } else {
$message.error(res.data.data) ElMessage.error(res.data.data);
}
})
} }
});
};
onBeforeMount(() => { onBeforeMount(() => {
getDetail() getDetail();
}) });
</script> </script>
<style scoped> <style scoped>
...@@ -221,5 +220,4 @@ const baseInfo = reactive( ...@@ -221,5 +220,4 @@ const baseInfo = reactive(
border-radius: 2px; border-radius: 2px;
margin-right: 5px; margin-right: 5px;
} }
</style> </style>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template> <template>
<el-form <el-form :model="formData" :rules="formRules" ref="form" style="max-width: 1048px" class="form">
:model="formData"
:rules="formRules"
ref="form"
style="max-width: 1048px"
class="form"
>
<el-form-item label="banner名称" prop="banner_name"> <el-form-item label="banner名称" prop="banner_name">
<el-input v-model="formData.banner_name" /> <el-input v-model="formData.banner_name" />
</el-form-item> </el-form-item>
...@@ -13,75 +7,70 @@ ...@@ -13,75 +7,70 @@
<el-input v-model="formData.link_address" /> <el-input v-model="formData.link_address" />
</el-form-item> </el-form-item>
<el-form-item label="上传banner图片" prop="banner_image"> <el-form-item label="上传banner图片" prop="banner_image">
<bg-upload-image v-model="formData.banner_image" :fileSize="1" :showTips="true" customTips="请选择图片上传:大小1920 * 560像素支持jpg、png等格式,图片需小于1MB" :limit="1" listType="picture-card" :accept="['.jpg','.jpeg','.png']"></bg-upload-image> <bg-upload-image
v-model="formData.banner_image"
:fileSize="1"
:showTips="true"
customTips="请选择图片上传:大小1920 * 560像素支持jpg、png等格式,图片需小于1MB"
:limit="1"
listType="picture-card"
:accept="['.jpg', '.jpeg', '.png']"></bg-upload-image>
</el-form-item> </el-form-item>
<el-form-item label="是否启用" prop="state" class="state_form_item"> <el-form-item label="是否启用" prop="state" class="state_form_item">
<bg-switch :labels="['否','是']" :values="[0,1]" v-model="formData.state"></bg-switch> <bg-switch :labels="['否', '是']" :values="[0, 1]" v-model="formData.state"></bg-switch>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, ref, onBeforeMount, nextTick } from 'vue' import { reactive, toRefs, ref, onBeforeMount, nextTick } from "vue";
import axios from '../../../../../request/http.js' import axios from "../../../../../request/http.js";
import { ElMessage } from 'element-plus' import { ElMessage } from "element-plus";
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
const router = useRouter() const router = useRouter();
const route = useRoute() const route = useRoute();
const form = ref(null) const form = ref(null);
const state = reactive({ const state = reactive({
formData: { formData: {
banner_name: "", banner_name: "",
link_address: "", link_address: "",
banner_image: [], banner_image: [],
state: 1 state: 1,
}, },
formRules: { formRules: {
banner_name: [ banner_name: [{ required: true, message: "请输入banner名称", trigger: "blur" }],
{ required: true, message: '请输入banner名称', trigger: 'blur' }, banner_image: [{ required: true, message: "请上传banner图", trigger: "change" }],
], state: [{ required: true, message: "请选择启用状态", trigger: "change" }],
banner_image: [ },
{ required: true, message: '请上传banner图', trigger: 'change' }, });
],
state: [
{ required: true, message: '请选择启用状态', trigger: 'change' },
],
}
})
const emit = defineEmits(['action']) const emit = defineEmits(["action"]);
const submitForm = async () => { const submitForm = async () => {
if (!form) return if (!form) return;
await form.value.validate((valid, fields) => { await form.value.validate((valid, fields) => {
if (valid) { if (valid) {
emit('action', state.formData) emit("action", state.formData);
} else { } else {
emit('action',null) emit("action", null);
} }
}) });
} };
const clearForm = () => { const clearForm = () => {
if (!form) return if (!form) return;
form.value.resetFields() form.value.resetFields();
};
}
const setForm = (data) => { const setForm = (data) => {
Object.assign(state.formData, data); Object.assign(state.formData, data);
} };
onBeforeMount(() => {
}) onBeforeMount(() => {});
const { const { formData, formRules } = toRefs(state);
formData,
formRules,
} = toRefs(state)
defineExpose({ submitForm, clearForm, setForm }) defineExpose({ submitForm, clearForm, setForm });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -17,103 +17,96 @@ ...@@ -17,103 +17,96 @@
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, ref, onBeforeMount, nextTick } from 'vue' import { reactive, toRefs, ref, onBeforeMount, nextTick } from "vue";
import axios from '../../../../../request/http.js' import axios from "../../../../../request/http.js";
import { ElMessage } from 'element-plus' import { ElMessage } from "element-plus";
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
import bgBreadcrumb from "@/components/bg-breadcrumb.vue"; import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
import bannerForm from "./banner-form.vue" import bannerForm from "./banner-form.vue";
const router = useRouter() const router = useRouter();
const route = useRoute() const route = useRoute();
const bannerFormRef = ref(null); const bannerFormRef = ref(null);
const state = reactive({ const state = reactive({
formData: { formData: {
banner_name: "", banner_name: "",
link_address: "", link_address: "",
banner_image: [], banner_image: [],
state: 1 state: 1,
} },
}) });
const getDetail = (id) => { const getDetail = (id) => {
axios axios
.get(`/apaas/system/v5/banner/${id}`) .get(`/apaas/system/v5/banner/${id}`)
.then(res => { .then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
const data = res.data.data const data = res.data.data;
bannerFormRef.value.setForm({ bannerFormRef.value.setForm({
banner_name: data.banner_name, banner_name: data.banner_name,
link_address: data.link_address, link_address: data.link_address,
banner_image: data.banner_image ? [{url: data.banner_image}] : [], banner_image: data.banner_image ? [{ url: data.banner_image }] : [],
state: data.state state: data.state,
}) });
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) })
.catch(err => { .catch((err) => {
console.log(err) console.log(err);
}) });
} };
const submit = () => { const submit = () => {
bannerFormRef.value.submitForm() bannerFormRef.value.submitForm();
} };
const submitFormData = (data) => { const submitFormData = (data) => {
if (data) { if (data) {
Object.assign(state.formData,data); Object.assign(state.formData, data);
console.log(state.formData) console.log(state.formData);
if (route.query.id) { if (route.query.id) {
// 编辑 // 编辑
let params = { let params = {
...state.formData, ...state.formData,
id: +route.query.id id: +route.query.id,
} };
params.banner_image = params.banner_image && params.banner_image.length > 0 ? params.banner_image[0].url : '' params.banner_image = params.banner_image && params.banner_image.length > 0 ? params.banner_image[0].url : "";
axios axios.put(`/apaas/system/v5/banner`, params).then((res) => {
.put(`/apaas/system/v5/banner`,params)
.then(res => {
if (res.data.code == 200) { if (res.data.code == 200) {
ElMessage.success(res.data.msg) ElMessage.success(res.data.msg);
router.go(-1) router.go(-1);
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) });
}else { } else {
let params = { let params = {
...state.formData, ...state.formData,
} };
params.banner_image = params.banner_image && params.banner_image.length > 0 ? params.banner_image[0].url : '' params.banner_image = params.banner_image && params.banner_image.length > 0 ? params.banner_image[0].url : "";
axios axios.post(`/apaas/system/v5/banner`, params).then((res) => {
.post(`/apaas/system/v5/banner`,params)
.then(res => {
if (res.data.code == 200) { if (res.data.code == 200) {
ElMessage.success(res.data.msg) ElMessage.success(res.data.msg);
router.go(-1) router.go(-1);
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) });
} }
} }
} };
const cancel = () => { const cancel = () => {
router.go(-1) router.go(-1);
} };
onBeforeMount(() => { onBeforeMount(() => {
if (route.query.id) { if (route.query.id) {
getDetail(route.query.id) getDetail(route.query.id);
} }
}) });
const {
} = toRefs(state)
const {} = toRefs(state);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -133,7 +126,7 @@ const { ...@@ -133,7 +126,7 @@ const {
justify-content: flex-start; justify-content: flex-start;
align-items: stretch; align-items: stretch;
background-color: #fff; background-color: #fff;
box-shadow: 0px 1px 4px 0px rgba(0,7,101,0.15); box-shadow: 0px 1px 4px 0px rgba(0, 7, 101, 0.15);
border-radius: 6px; border-radius: 6px;
margin: 0 0 16px; margin: 0 0 16px;
position: relative; position: relative;
......
...@@ -3,9 +3,7 @@ ...@@ -3,9 +3,7 @@
<div class="detail_container"> <div class="detail_container">
<bg-breadcrumb></bg-breadcrumb> <bg-breadcrumb></bg-breadcrumb>
<div class="main_container"> <div class="main_container">
<bg-filter-group <bg-filter-group :showSearch="false">
:showSearch="false"
>
<template v-slot:left_action> <template v-slot:left_action>
<div class="apaas_button"> <div class="apaas_button">
<el-button class="register_btn" type="primary" @click="addBanner"> <el-button class="register_btn" type="primary" @click="addBanner">
...@@ -17,18 +15,16 @@ ...@@ -17,18 +15,16 @@
</bg-filter-group> </bg-filter-group>
<div class="table_container"> <div class="table_container">
<div class="table bg-scroll"> <div class="table bg-scroll">
<bg-table <bg-table ref="Bgtable" :headers="headers" :rows="tableRows" :isIndex="true" :stripe="true">
ref="Bgtable"
:headers="headers"
:rows="tableRows"
:isIndex="true"
:stripe="true"
>
<template v-slot:updated_time="{ row }"> <template v-slot:updated_time="{ row }">
{{ row.updated_time.split("+")[0].replace("T", " ").replace("Z", " ") }} {{ row.updated_time.split("+")[0].replace("T", " ").replace("Z", " ") }}
</template> </template>
<template v-slot:state="{ row }"> <template v-slot:state="{ row }">
<bg-switch @click="changeUseRow(row)" :labels="['否','是']" :values="[0,1]" v-model="row.state"></bg-switch> <bg-switch
@click="changeUseRow(row)"
:labels="['否', '是']"
:values="[0, 1]"
v-model="row.state"></bg-switch>
</template> </template>
<template v-slot:action="{ row }"> <template v-slot:action="{ row }">
<bg-table-btns :operations="getOperations(row)" /> <bg-table-btns :operations="getOperations(row)" />
...@@ -47,8 +43,7 @@ ...@@ -47,8 +43,7 @@
() => { () => {
dialogDelete = false; dialogDelete = false;
} }
" ">
>
<div>确定要删除吗?</div> <div>确定要删除吗?</div>
<template v-slot:footer> <template v-slot:footer>
<div class="apaas_button"> <div class="apaas_button">
...@@ -61,13 +56,13 @@ ...@@ -61,13 +56,13 @@
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, ref, onBeforeMount, nextTick } from 'vue' import { reactive, toRefs, ref, onBeforeMount, nextTick } from "vue";
import axios from '../../../../request/http.js' import axios from "../../../../request/http.js";
import { ElMessage } from 'element-plus' import { ElMessage } from "element-plus";
import { useRouter } from 'vue-router' import { useRouter } from "vue-router";
import bgBreadcrumb from "@/components/bg-breadcrumb.vue"; import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const router = useRouter() const router = useRouter();
const Bgtable = ref(null) const Bgtable = ref(null);
const state = reactive({ const state = reactive({
headers: [ headers: [
{ {
...@@ -100,27 +95,25 @@ const state = reactive({ ...@@ -100,27 +95,25 @@ const state = reactive({
tableRows: [], tableRows: [],
dialogDelete: false, dialogDelete: false,
actionRow: null, actionRow: null,
}) });
const getRoleRows = () => { const getRoleRows = () => {
axios axios.get(`/apaas/system/v5/banner/list`).then((res) => {
.get(`/apaas/system/v5/banner/list`)
.then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
state.tableRows = res.data.data || [] state.tableRows = res.data.data || [];
if (state.tableRows.length > 0) { if (state.tableRows.length > 0) {
state.tableRows.forEach(e => { state.tableRows.forEach((e) => {
e.canMoveUp = true e.canMoveUp = true;
e.canMoveDown = true e.canMoveDown = true;
}) });
state.tableRows[0].canMoveUp = false state.tableRows[0].canMoveUp = false;
state.tableRows[state.tableRows.length - 1].canMoveDown = false state.tableRows[state.tableRows.length - 1].canMoveDown = false;
} }
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) });
} // 获取列表 }; // 获取列表
const getOperations = (row) => { const getOperations = (row) => {
return [ return [
...@@ -136,117 +129,108 @@ const getOperations = (row) => { ...@@ -136,117 +129,108 @@ const getOperations = (row) => {
}, },
{ {
name: "上移", name: "上移",
callback: () => moveRow(row,1), callback: () => moveRow(row, 1),
disabled: !row.canMoveUp, disabled: !row.canMoveUp,
}, },
{ {
name: "下移", name: "下移",
callback: () => moveRow(row,2), callback: () => moveRow(row, 2),
disabled: !row.canMoveDown, disabled: !row.canMoveDown,
}, },
]; ];
} // 表格操作按钮 }; // 表格操作按钮
const addBanner = () => { const addBanner = () => {
router.push("/home-config/banner/add") router.push("/home-config/banner/add");
} };
const edit_row = (row) => { const edit_row = (row) => {
router.push({ router.push({
path: "/home-config/banner/edit", path: "/home-config/banner/edit",
query: { query: {
id: row.id id: row.id,
} },
}) });
} };
const delete_row = (row) => { const delete_row = (row) => {
state.actionRow = row state.actionRow = row;
state.dialogDelete = true state.dialogDelete = true;
} };
const deleteData = () => { const deleteData = () => {
axios axios.delete(`/apaas/system/v5/banner/${state.actionRow.id}`).then((res) => {
.delete(`/apaas/system/v5/banner/${state.actionRow.id}`)
.then(res => {
if (res.data.code == 200) { if (res.data.code == 200) {
ElMessage.success(res.data.msg) ElMessage.success(res.data.msg);
state.dialogDelete = false state.dialogDelete = false;
getRoleRows() getRoleRows();
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) });
} };
const moveRow = (row,type) => { const moveRow = (row, type) => {
let index let index;
state.tableRows.forEach((e,i) => { state.tableRows.forEach((e, i) => {
if (e.id == row.id) { if (e.id == row.id) {
index = i index = i;
} }
}) });
let nextRow let nextRow;
if (type == 1) { // 上移 if (type == 1) {
nextRow = state.tableRows[index - 1] // 上移
}else { // 下移 nextRow = state.tableRows[index - 1];
nextRow = state.tableRows[index + 1] } else {
// 下移
nextRow = state.tableRows[index + 1];
} }
let params = [ let params = [
{ {
id: row.id, id: row.id,
sort: nextRow.sort sort: nextRow.sort,
}, },
{ {
id: nextRow.id, id: nextRow.id,
sort: row.sort sort: row.sort,
} },
] ];
axios axios
.post(`/apaas/system/v5/banner/sort`,[...params]) .post(`/apaas/system/v5/banner/sort`, [...params])
.then((res) => { .then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
ElMessage.success(res.data.msg) ElMessage.success(res.data.msg);
getRoleRows() getRoleRows();
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) })
.catch((err) => { .catch((err) => {
console.log(err) console.log(err);
}) });
} };
const changeUseRow = (row) => { const changeUseRow = (row) => {
let params = { let params = {
id: row.id, id: row.id,
state: row.state state: row.state,
} };
axios axios.post(`/apaas/system/v5/banner/status`, params).then((res) => {
.post(`/apaas/system/v5/banner/status`,params)
.then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
ElMessage.success(res.data.msg) ElMessage.success(res.data.msg);
getRoleRows() getRoleRows();
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
row.state = row.state == 0 ? 1 : 0 row.state = row.state == 0 ? 1 : 0;
} }
}) });
} };
onBeforeMount(() => { onBeforeMount(() => {
getRoleRows() getRoleRows();
}) });
const {
filter,
headers,
tableRows,
tableTotal,
dialogDelete,
} = toRefs(state)
const { filter, headers, tableRows, tableTotal, dialogDelete } = toRefs(state);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -266,7 +250,7 @@ const { ...@@ -266,7 +250,7 @@ const {
justify-content: flex-start; justify-content: flex-start;
align-items: stretch; align-items: stretch;
background-color: #fff; background-color: #fff;
box-shadow: 0px 1px 4px 0px rgba(0,7,101,0.15); box-shadow: 0px 1px 4px 0px rgba(0, 7, 101, 0.15);
border-radius: 6px; border-radius: 6px;
margin: 0 0 16px; margin: 0 0 16px;
position: relative; position: relative;
......
...@@ -4,21 +4,23 @@ ...@@ -4,21 +4,23 @@
<bg-breadcrumb></bg-breadcrumb> <bg-breadcrumb></bg-breadcrumb>
<div class="main_container"> <div class="main_container">
<div class="content_top"> <div class="content_top">
<el-form <el-form :model="formData" :rules="formRules" ref="formRef" style="max-width: 1048px" class="form">
:model="formData"
:rules="formRules"
ref="formRef"
style="max-width: 1048px"
class="form"
>
<el-form-item label="公司名称" prop="company_name"> <el-form-item label="公司名称" prop="company_name">
<el-input v-model="formData.company_name" placeholder="请输入公司名称" show-word-limit maxlength="50"/> <el-input v-model="formData.company_name" placeholder="请输入公司名称" show-word-limit maxlength="50" />
</el-form-item> </el-form-item>
<el-form-item label="公司地址" prop="company_address"> <el-form-item label="公司地址" prop="company_address">
<el-input v-model="formData.company_address" placeholder="请输入公司地址" show-word-limit maxlength="100"/> <el-input v-model="formData.company_address" placeholder="请输入公司地址" show-word-limit maxlength="100" />
</el-form-item> </el-form-item>
<el-form-item label="公司logo" prop="logo"> <el-form-item label="公司logo" prop="logo">
<bg-upload-image v-model="formData.logo" :fileSize="500" :fileSizeUnit="'KB'" :showTips="true" customTips="请选择图片上传:大小80 * 80像素支持jpg、png等格式,图片需小于500KB" :limit="1" listType="picture-card" :accept="['.jpg','.jpeg','.png']"></bg-upload-image> <bg-upload-image
v-model="formData.logo"
:fileSize="500"
:fileSizeUnit="'KB'"
:showTips="true"
customTips="请选择图片上传:大小80 * 80像素支持jpg、png等格式,图片需小于500KB"
:limit="1"
listType="picture-card"
:accept="['.jpg', '.jpeg', '.png']"></bg-upload-image>
</el-form-item> </el-form-item>
<el-form-item label="公司电话" prop="contact_phone"> <el-form-item label="公司电话" prop="contact_phone">
<el-input v-model="formData.contact_phone" placeholder="请输入公司电话" show-word-limit maxlength="20" /> <el-input v-model="formData.contact_phone" placeholder="请输入公司电话" show-word-limit maxlength="20" />
...@@ -35,104 +37,92 @@ ...@@ -35,104 +37,92 @@
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, ref, onBeforeMount, nextTick } from 'vue' import { reactive, toRefs, ref, onBeforeMount, nextTick } from "vue";
import axios from '../../../../request/http.js' import axios from "../../../../request/http.js";
import { ElMessage } from 'element-plus' import { ElMessage } from "element-plus";
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
import bgBreadcrumb from "@/components/bg-breadcrumb.vue"; import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const router = useRouter() const router = useRouter();
const route = useRoute() const route = useRoute();
const formRef = ref(null); const formRef = ref(null);
const checkPhone = (rule,value,callback) => { const checkPhone = (rule, value, callback) => {
let reg = /^((1[0-9]{10})|(((([0-9]{3}-)?[0-9]{8})|(([0-9]{4}-)?[0-9]{7}))(-[0-9]{1,4})?))$/ let reg = /^((1[0-9]{10})|(((([0-9]{3}-)?[0-9]{8})|(([0-9]{4}-)?[0-9]{7}))(-[0-9]{1,4})?))$/;
if (value !== '') { if (value !== "") {
console.log(1) console.log(1);
if (!reg.test(value)) { if (!reg.test(value)) {
console.log(2) console.log(2);
callback(new Error("电话号码格式不正确,请重新输入")) callback(new Error("电话号码格式不正确,请重新输入"));
}else { } else {
console.log(3) console.log(3);
callback() callback();
} }
}else { } else {
callback() callback();
} }
} };
const state = reactive({ const state = reactive({
formData: { formData: {
company_name: "", company_name: "",
company_address: "", company_address: "",
logo: [], logo: [],
contact_phone: "" contact_phone: "",
}, },
formRules: { formRules: {
company_name: [ company_name: [
{ required: true, message: "请输入公司名称", trigger: "blur"}, { required: true, message: "请输入公司名称", trigger: "blur" },
{ max: 50, message: "长度最大为50个字符", trigger: "blur"} { max: 50, message: "长度最大为50个字符", trigger: "blur" },
],
company_address: [
],
logo: [
], ],
contact_phone: [ company_address: [],
{ validator: checkPhone, trigger: "blur"} logo: [],
], contact_phone: [{ validator: checkPhone, trigger: "blur" }],
} },
}) });
const getFootInfo = () => { const getFootInfo = () => {
axios axios
.get(`/apaas/system/v5/config/get`) .get(`/apaas/system/v5/config/get`)
.then(res => { .then((res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
const data = res.data.data const data = res.data.data;
state.formData = { state.formData = {
company_name: data.company_name, company_name: data.company_name,
company_address: data.company_address, company_address: data.company_address,
logo: data.logo ? [{url: data.logo}] : [], logo: data.logo ? [{ url: data.logo }] : [],
contact_phone: data.contact_phone contact_phone: data.contact_phone,
};
} else {
ElMessage.error(res.data.data);
} }
}else {
ElMessage.error(res.data.data)
}
})
.catch(err => {
console.log(err)
}) })
} .catch((err) => {
console.log(err);
});
};
const submit = () => { const submit = () => {
formRef.value.validate((valid, fields) => { formRef.value.validate((valid, fields) => {
if (valid) { if (valid) {
let params = { let params = {
...state.formData, ...state.formData,
logo: state.formData.logo && state.formData.logo.length > 0 ? state.formData.logo[0].url : '', logo: state.formData.logo && state.formData.logo.length > 0 ? state.formData.logo[0].url : "",
} };
axios axios.post(`/apaas/system/v5/config/set`, params).then((res) => {
.post(`/apaas/system/v5/config/set`,params)
.then(res => {
if (res.data.code == 200) { if (res.data.code == 200) {
ElMessage.success(res.data.msg) ElMessage.success(res.data.msg);
}else { } else {
ElMessage.error(res.data.data) ElMessage.error(res.data.data);
} }
}) });
} }
}) });
} };
onBeforeMount(() => { onBeforeMount(() => {
getFootInfo() getFootInfo();
}) });
const {
formData,
formRules,
} = toRefs(state)
const { formData, formRules } = toRefs(state);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -152,7 +142,7 @@ const { ...@@ -152,7 +142,7 @@ const {
justify-content: flex-start; justify-content: flex-start;
align-items: stretch; align-items: stretch;
background-color: #fff; background-color: #fff;
box-shadow: 0px 1px 4px 0px rgba(0,7,101,0.15); box-shadow: 0px 1px 4px 0px rgba(0, 7, 101, 0.15);
border-radius: 6px; border-radius: 6px;
margin: 0 0 16px; margin: 0 0 16px;
position: relative; position: relative;
......
<template> <template>
<el-form <el-form :model="formData" :rules="formRules" ref="form" style="max-width: 1048px" class="form">
:model="formData"
:rules="formRules"
ref="form"
style="max-width: 1048px"
class="form"
>
<el-form-item label="能力类型" prop="business_type_id"> <el-form-item label="能力类型" prop="business_type_id">
<el-select v-model="formData.business_type_id" placeholder="请选择能力类型" style="width: 100%" @change="changeType" :disabled="route.query.id"> <el-select
<el-option v-model="formData.business_type_id"
v-for="item in props.businessList" placeholder="请选择能力类型"
:key="item.dict_id" style="width: 100%"
:label="item.name" @change="changeType"
:value="item.id" :disabled="route.query.id">
/> <el-option v-for="item in props.businessList" :key="item.dict_id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="上传图标" prop="logo"> <el-form-item label="上传图标" prop="logo">
<bg-upload-image v-model="formData.logo" :fileSize="500" :fileSizeUnit="'KB'" :showTips="true" customTips="请选择图片上传:大小36 * 36像素支持jpg、png等格式,图片需小于500KB" :limit="1" listType="picture-card" :accept="['.jpg','.jpeg','.png']"></bg-upload-image> <bg-upload-image
v-model="formData.logo"
:fileSize="500"
:fileSizeUnit="'KB'"
:showTips="true"
customTips="请选择图片上传:大小36 * 36像素支持jpg、png等格式,图片需小于500KB"
:limit="1"
listType="picture-card"
:accept="['.jpg', '.jpeg', '.png']"></bg-upload-image>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, ref, onBeforeMount, nextTick } from 'vue' import { reactive, toRefs, ref, onBeforeMount, nextTick } from "vue";
import axios from '../../../../../request/http.js' import axios from "../../../../../request/http.js";
import { ElMessage } from 'element-plus' import { ElMessage } from "element-plus";
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
const router = useRouter() const router = useRouter();
const route = useRoute() const route = useRoute();
const form = ref(null) const form = ref(null);
const props = defineProps({ const props = defineProps({
businessList: { businessList: {
type: Array, type: Array,
default: [] default: [],
} },
}) });
const state = reactive({ const state = reactive({
formData: { formData: {
business_type_id: "", business_type_id: "",
logo: [], logo: [],
}, },
formRules: { formRules: {
business_type_id: [ business_type_id: [{ required: true, message: "请选择业务类型", trigger: "change" }],
{ required: true, message: '请选择业务类型', trigger: 'change' }, logo: [{ required: true, message: "请上传图标", trigger: "change" }],
],
logo: [
{ required: true, message: '请上传图标', trigger: 'change' },
],
}, },
}) });
const emit = defineEmits(['action','changeType']) const emit = defineEmits(["action", "changeType"]);
const submitForm = async () => { const submitForm = async () => {
if (!form) return if (!form) return;
await form.value.validate((valid, fields) => { await form.value.validate((valid, fields) => {
if (valid) { if (valid) {
emit('action', state.formData) emit("action", state.formData);
} else { } else {
emit('action',null) emit("action", null);
} }
}) });
} };
const changeType = (val) => { const changeType = (val) => {
emit("changeType",val) emit("changeType", val);
} };
const clearForm = () => { const clearForm = () => {
if (!form) return if (!form) return;
form.value.resetFields() form.value.resetFields();
};
}
const setForm = (data) => { const setForm = (data) => {
Object.assign(state.formData, data); Object.assign(state.formData, data);
} };
onBeforeMount(() => {
}) onBeforeMount(() => {});
const { const { formData, formRules } = toRefs(state);
formData,
formRules,
} = toRefs(state)
defineExpose({ submitForm, clearForm, setForm }) defineExpose({ submitForm, clearForm, setForm });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment