Files
2023-07-17 17:31:42 +08:00

365 lines
10 KiB
Vue

<template>
<el-form
ref="formRef"
:model="modelValue"
:rules="rules"
:label-width="labelWidth + 'px'"
>
<div class="form_title">
<p>
<b> {{ t("admin.form.basicInfo") }}</b>
</p>
</div>
<el-row>
<el-col :span="24">
<el-form-item label="产品名称:" prop="title">
<el-input
v-model="modelValue.title"
placeholder="请输入产品名称"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="联系人:" prop="username">
<el-input
v-model="modelValue.username"
placeholder="请输入联系人"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="联系方式:" prop="phone">
<el-input
v-model="modelValue.phone"
maxlength="11"
placeholder="请输入联系方式"
></el-input>
</el-form-item>
</el-col>
</el-row>
<field-options
v-model="modelValue"
:labelWidth="labelWidth"
ref="fieldFormRef"
/>
<city-options
v-model="modelValue"
:labelWidth="labelWidth"
ref="cityFormRef"
></city-options>
<input-box-add
:labelWidth="labelWidth"
v-model="modelValue"
title="应用客户"
placeholder="请输入应用客户"
fieldKey="customers"
ref="customerFormRef"
/>
<el-row>
<el-col :span="24">
<el-form-item label="产品成熟度:" prop="maturity">
<el-select
v-model="modelValue.maturity"
clearable
placeholder="请选择"
>
<el-option
v-for="item in maturityOptions"
:key="item.key"
:label="item.value"
:value="item.key"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品领先性:" prop="leadStandard">
<el-select
v-model="modelValue.leadStandard"
clearable
placeholder="请选择"
>
<el-option
v-for="item in leadOptions"
:key="item.key"
:label="item.value"
:value="item.key"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="合作模式:">
<el-select
v-model="modelValue.cooperationModeArr"
clearable
multiple
placeholder="请选择"
>
<el-option
v-for="item in cooperationOptions"
:key="item.key"
:label="item.value"
:value="item.key"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<input-box-add
:labelWidth="labelWidth"
v-model="modelValue"
title="关键词"
placeholder="请输入关键词"
fieldKey="keywords"
ref="keywordsForm"
/>
<el-row>
<el-col :span="24">
<el-form-item label="产品简介:" prop="introduce">
<wangEditor
v-model="modelValue.introduce"
min-height="150px"
width="100%"
ref="introduceRef"
@blur="formRef.validateField(`introduce`)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="产品图片:" prop="image">
<ImageUpload v-model="modelValue.image" :limit="1" />
</el-form-item>
</el-col>
</el-row>
<p>
<b>图片材料上传</b>
</p>
<el-row>
<el-col :span="24">
<el-form-item label="证明材料:" prop="material">
<FileUpload
v-model="modelValue.material"
:limit="1"
:fileType="['doc', 'xls', 'pdf', 'jpg', 'png', 'zip']"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script setup>
import CityOptions from "@/views/components/CityOptions";
import FieldOptions from "@/views/components/FieldOptions";
import InputBoxAdd from "@/views/components/InputBoxAdd";
import {
maturityOptions,
leadOptions,
cooperationOptions,
} from "@/utils/parameter";
import { reactive, toRefs } from "vue";
// import VideoUpload from "@/components/VideoUpload";
// import { researchSelect, laboratorySelect } from "@/api/identity/index";
import { useI18n } from "vue-i18n";
const { t } = useI18n();
const props = defineProps({
modelValue: Object,
isAdd: {
type: Boolean,
default: true,
},
showTitle: {
type: Boolean,
default: false,
},
labelWidth: {
type: Number,
default: 120,
},
});
const { modelValue, isAdd, showTitle, labelWidth } = toRefs(props);
const data = reactive({
rules: {
// product: [{ required: true, message: computed(()=>t("admin.form.placeholder")), trigger: "blur" }],
title: [
{
required: true,
message: computed(() => t("admin.form.placeholder")),
trigger: "blur",
},
],
kind: [
{
required: true,
message: computed(() => t("admin.form.pleaseSelect")),
trigger: "change",
},
],
username: [{ required: true, message: "请输入联系人", trigger: "blur" }],
phone: [
{ required: true, message: "请输入联系方式", trigger: "blur" },
{
pattern: /^1[3456789]\d{9}$/,
message: "手机号格式不正确",
trigger: "blur",
},
],
email: [
{ required: true, message: "请输入邮箱", trigger: "blur" },
{
pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
message: "邮箱格式不正确",
trigger: "blur",
},
],
// code: [{ required: true, message: computed(()=>t("admin.form.placeholder")), trigger: "blur" }],
// mobile: [
// { required: true, message: computed(()=>t("admin.form.placeholder")), trigger: "blur" },
// {
// pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
// message: computed(()=>t("admin.validation.pleaseEnterTheCorrectFormatOfThePhoneNumber")),
// trigger: "blur",
// },
// ],
// research_id: [{ required: true, message: computed(()=>t("admin.form.pleaseSelect")), trigger: "change" }],
maturity: [
{
required: true,
message: computed(() => t("admin.form.pleaseSelect")),
trigger: "change",
},
],
// tenant_id: [
// {
// required: true,
// message: computed(()=>t("admin.form.pleaseSelect")),
// trigger: ["blur", "change"],
// },
// ],
// school: [{ required: true, message: computed(()=>t("admin.form.placeholder")), trigger: "blur" }],
// education: [{ required: true, message: computed(()=>t("admin.form.pleaseSelect")), trigger: "change" }],
// major: [{ required: true, message: computed(()=>t("admin.form.placeholder")), trigger: "blur" }],
// job: [{ required: true, message: computed(()=>t("admin.form.placeholder")), trigger: "blur" }],
work_at: [
{
required: true,
message: "从业时间不能为空",
trigger: ["change", "blur"],
},
],
leadStandard: [
{
required: true,
message: computed(() => t("admin.validation.pleaseUpload")),
trigger: ["blur", "change"],
},
],
introduce: [
{
required: true,
message: computed(() => t("admin.form.placeholder")),
trigger: ["change", "blur"],
},
],
image: [
{
required: true,
message: computed(() => t("admin.validation.pleaseUpload")),
trigger: ["change", "blur"],
},
],
video: [
{
required: true,
message: computed(() => t("admin.validation.pleaseUpload")),
trigger: ["change", "blur"],
},
],
},
});
const { rules } = toRefs(data);
const formRef = ref(null);
const fieldFormRef = ref(null);
const customerFormRef = ref(null);
const cityFormRef = ref(null);
const validateForm = async () => {
// await formRef.value.validate();
let formValid;
try {
formValid = await formRef.value.validate();
} catch (error) {
formValid = false;
}
const fieldFormValid = await fieldFormRef.value.validateForm(); // 城市选择表单验证
const customerValid = await customerFormRef.value.validateForm(); // 领域选择表单验证
const cityFormValid = await cityFormRef.value.validateForm(); // 领域选择表单验证
console.log(formValid, fieldFormValid, customerValid);
return formValid && fieldFormValid && customerValid && cityFormValid;
// const keywordsFormValid = await keywordsFormRef.value.validateForm(); // 关键词表单验证
// console.log(cityFormValid);
// if (isAdd.value) {
// const directionsFormValid = await directionsFormRef.value.validateForm();
// return (
// formValid &&
// cityFormValid &&
// fieldFormValid &&
// keywordsFormValid &&
// directionsFormValid
// );
// } else {
// return formValid && cityFormValid && fieldFormValid && keywordsFormValid;
// }
};
defineExpose({
validateForm,
});
// const submitForm = () => {
// let flag = false;
// this.$refs["formRef"].validate((valid) => {
// const fieldForm = this.$refs.fieldForm.submitForm();
// const customerForm = this.$refs.customerForm.submitForm();
// const keywordsForm = this.$refs.keywordsForm.submitForm();
// if (valid && fieldForm && customerForm && keywordsForm) {
// flag = !flag;
// }
// });
// return flag;
// };
</script>
<style lang="scss" scoped>
.form_title {
font-weight: 700;
margin-bottom: 30px;
}
// 上传图片框限制
// ::v-deep .el-upload--picture-card {
// width: 120px;
// height: 120px;
// line-height: 120px;
// }
.el-select,
.el-date-editor {
display: block;
width: 100%;
}
</style>