Files

382 lines
11 KiB
Vue
Raw Normal View History

2022-09-20 17:31:39 +08:00
<template>
<div class="app-container">
<el-card shadow="always" style="width: 55%; margin: 0 auto">
<el-form
ref="formRef"
:model="form"
:rules="rules"
:label-width="labelWidth + 'px'"
>
2023-07-11 17:21:34 +08:00
<p>
<b> {{ t("admin.form.basicInfo") }}</b>
</p>
2022-09-20 17:31:39 +08:00
<el-row>
<el-col :span="24">
2022-11-17 17:29:47 +08:00
<el-form-item label="技术需求名称:" prop="title">
2022-09-20 17:31:39 +08:00
<el-input v-model="form.title"></el-input>
</el-form-item>
</el-col>
</el-row>
2022-11-17 17:29:47 +08:00
<!-- <el-row>
2022-09-20 17:31:39 +08:00
<el-col :span="24">
2022-11-17 17:29:47 +08:00
// <el-checkbox label="0" @change="handleCheck">其他</el-checkbox>
2023-07-11 17:21:34 +08:00
<el-form-item :label="t('admin.form.category', {type:t('admin.common.demand')})" prop="kinds">
2022-09-20 17:31:39 +08:00
<el-checkbox-group v-model="form.kinds">
<el-checkbox
v-for="item in checkList"
:key="item.id"
:label="item.name"
>{{ item.name }}</el-checkbox
>
</el-checkbox-group>
<el-row :gutter="20">
<el-col :span="20">
<el-input
v-model="checkInput"
placeholder="请输入需求类别"
></el-input>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="addCheck">添加</el-button>
</el-col>
</el-row>
</el-form-item>
</el-col>
2022-11-17 17:29:47 +08:00
</el-row> -->
2022-09-20 17:31:39 +08:00
<el-row>
<el-col :span="24">
2023-07-17 15:47:45 +08:00
<el-form-item
:label="t('webSearch.demandDescription')"
prop="introduce"
>
2022-09-20 17:31:39 +08:00
<wangEditor
v-model="form.introduce"
2022-11-17 17:29:47 +08:00
placeholder="请输入技术需求内容和详细的技术指标"
2022-09-20 17:31:39 +08:00
width="100%"
min-height="150px"
2022-11-17 17:29:47 +08:00
@blur="formRef.validateField(`introduce`)"
2022-09-20 17:31:39 +08:00
></wangEditor>
</el-form-item>
</el-col>
</el-row>
2022-11-22 17:31:02 +08:00
<field-options
2022-09-20 17:31:39 +08:00
v-model="form"
:labelWidth="labelWidth"
ref="fieldFormRef"
/>
2022-11-22 17:31:02 +08:00
<city-options
2022-11-17 17:29:47 +08:00
v-model="form"
:labelWidth="labelWidth"
ref="cityFormRef"
2022-11-22 17:31:02 +08:00
></city-options>
2022-09-20 17:31:39 +08:00
<el-row>
<el-col :span="12">
<el-form-item
label="成果需求预算:"
:prop="form.budgetMode == 1 ? 'budget' : ''"
>
<el-input
v-model="form.budget"
oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')"
placeholder="请输入技术需求预算"
>
<template #append>万元</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="50px">
<el-checkbox
false-label="1"
true-label="2"
v-model="form.budgetMode"
>面议</el-checkbox
>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="截止时间:" prop="deadline">
<el-date-picker
style="width: 100%"
v-model="form.deadline"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择截止时间"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
2023-07-17 15:47:45 +08:00
<el-form-item :label="t('admin.form.demandContact')" prop="name">
2022-09-20 17:31:39 +08:00
<el-input
v-model="form.name"
placeholder="请输入需求联系人"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
2023-07-17 15:47:45 +08:00
<el-form-item :label="t('admin.form.contactPhone')" prop="mobile">
2022-09-20 17:31:39 +08:00
<el-input
v-model="form.mobile"
2022-11-22 17:31:02 +08:00
maxlength="11"
2022-09-20 17:31:39 +08:00
placeholder="请输入联系人手机号"
></el-input>
</el-form-item>
</el-col>
</el-row>
2022-10-19 00:22:39 +08:00
<!-- <el-row>
2022-09-20 17:31:39 +08:00
<el-col :span="12">
<el-form-item label="需求提交人:" prop="commitUserName">
<el-input
v-model="form.commitUserName"
placeholder="请输入需求提交人"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="需求提交人手机号:" prop="commitUserPhone">
<el-input
v-model="form.commitUserPhone"
placeholder="请输入需求提交人手机号"
></el-input>
</el-form-item>
</el-col>
2022-10-19 00:22:39 +08:00
</el-row> -->
2022-09-20 17:31:39 +08:00
<el-row>
<el-col :span="24">
2022-11-22 17:31:02 +08:00
<input-box-add
2022-11-17 17:29:47 +08:00
class="cooperation-mode"
2022-09-20 17:31:39 +08:00
:labelWidth="labelWidth"
v-model="form"
2022-11-17 17:29:47 +08:00
title="合作模式"
placeholder="合作开发、委托研发、技术转让、技术入股、技术许可"
2022-09-20 17:31:39 +08:00
fieldKey="wants"
ref="directionsFormRef"
/>
</el-col>
</el-row>
</el-form>
2022-10-31 17:46:09 +08:00
<!-- <div :style="{ marginLeft: labelWidth + 'px' }">
2023-07-11 17:21:34 +08:00
<el-button @click="router.go(-1)">{{ t("admin.common.cancel") }}</el-button>
<el-button type="primary" @click="submitForm">{{ t('admin.common.submit') }}</el-button>
2022-10-31 17:46:09 +08:00
</div> -->
<div :style="{ marginLeft: labelWidth + 'px' }">
<el-button type="primary" @click="submitForm(3)">保存草稿</el-button>
2023-07-11 17:21:34 +08:00
<el-button type="primary" @click="submitForm(1)"
>{{ t("admin.common.submit") }}审核</el-button
>
2022-09-20 17:31:39 +08:00
</div>
</el-card>
</div>
</template>
<script setup>
// import { expert } from "@/api/identity/index";
2023-07-17 15:47:45 +08:00
import { insertTechnologyDemand } from "@/api/admin/enterprise";
import { useI18n } from "vue-i18n";
2022-09-20 17:31:39 +08:00
import CityOptions from "@/views/components/CityOptions";
2023-07-17 15:47:45 +08:00
import { useRoute, useRouter } from "vue-router";
2022-09-20 17:31:39 +08:00
import FieldOptions from "@/views/components/FieldOptions";
import InputBoxAdd from "@/views/components/InputBoxAdd";
2023-07-17 15:47:45 +08:00
import { onMounted, reactive, toRefs } from "vue";
2022-09-20 17:31:39 +08:00
import { ElMessage } from "element-plus";
2023-07-17 15:47:45 +08:00
import { updateCount } from "@/api/admin/count";
2022-10-19 00:22:39 +08:00
import {
getTechnologyDemand,
updateTechnologyDemand,
} from "@/api/admin/enterprise/demand";
2023-07-17 15:47:45 +08:00
import tab from "@/plugins/tab";
const { t } = useI18n();
2022-09-20 17:31:39 +08:00
const router = useRouter();
2022-10-19 00:22:39 +08:00
const route = useRoute();
2022-09-20 17:31:39 +08:00
const data = reactive({
form: {
check: [],
},
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
},
rules: {
title: [{ required: true, message: "需求名称不能为空", trigger: "blur" }],
introduce: [
2022-11-17 17:29:47 +08:00
{ required: true, message: "需求描述不能为空", trigger: "change" },
2022-09-20 17:31:39 +08:00
],
name: [{ required: true, message: "需求联系人不能为空", trigger: "blur" }],
mobile: [
{ required: true, message: "联系人手机号不能为空", trigger: "blur" },
2022-11-22 17:31:02 +08:00
{
pattern: /^1[3456789]\d{9}$/,
message: "手机号格式不正确",
trigger: "blur",
},
2022-09-20 17:31:39 +08:00
],
commitUserName: [
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
],
2022-10-31 17:46:09 +08:00
kinds: [
{ required: true, message: "至少选择一个需求类别", trigger: "change" },
],
2022-09-20 17:31:39 +08:00
budget: [{ required: true, message: "需求预算不能为空", trigger: "blur" }],
deadline: [
{
required: true,
message: "请选择截止时间",
trigger: ["change", "blur"],
},
],
commitUserPhone: [
{ required: true, message: "需求提交人手机号不能为空", trigger: "blur" },
],
},
});
const { queryParams, form, rules } = toRefs(data);
const { proxy } = getCurrentInstance();
const labelWidth = 160;
// const isContainOther = ref(false);
const checkList = reactive([
{
id: 1,
name: "成果推广",
},
{
id: 2,
name: "关键成果解决",
},
{
id: 3,
name: "对接专家院士",
},
{
id: 4,
name: "上市辅导",
},
]);
const formRef = ref(null);
const fieldFormRef = ref(null);
const directionsFormRef = ref(null);
2022-11-17 17:29:47 +08:00
const cityFormRef = ref(null);
2022-09-20 17:31:39 +08:00
const checkInput = ref("");
2022-10-31 17:46:09 +08:00
const submitForm = async (status) => {
2022-09-20 17:31:39 +08:00
let formValid;
try {
formValid = await formRef.value.validate();
} catch (error) {
formValid = false;
}
2022-10-31 17:46:09 +08:00
form.value.status = status;
2022-09-20 17:31:39 +08:00
const fieldFormValid = await fieldFormRef.value.validateForm();
const directionsFormValid = await directionsFormRef.value.validateForm();
2022-11-17 17:29:47 +08:00
const cityFormValid = await cityFormRef.value.validateForm();
if (formValid && fieldFormValid && directionsFormValid && cityFormValid) {
2022-10-19 00:22:39 +08:00
if (route.query.id) {
await updateTechnologyDemand(form.value);
ElMessage.success("修改企业需求成功");
} else {
await insertTechnologyDemand(form.value);
ElMessage.success("新增企业需求成功");
}
updateCount("technology");
2022-11-22 17:31:02 +08:00
backToList();
2022-09-20 17:31:39 +08:00
} else {
console.log("校验未通过");
}
// formRef.value.validate(async (valid) => {
// // console.log(valid);
// if (valid) {
// form.value.amount = form.value.amount - 0;
// }
// form.value.amount = form.value.amount - 0;
// const cityForm = proxy.$refs.cityForm.submitForm(); // 城市
// if (valid && cityForm) {
// console.log(form.value);
// if (form.value.id != undefined) {
// // updatePost(form.value).then((response) => {
// // proxy.$modal.msgSuccess("修改成功");
// // proxy.$router.go(-1);
// // });
// } else {
// // addPost(form.value).then((response) => {
// // proxy.$modal.msgSuccess("新增成功");
// // proxy.$router.go(-1);
// // });
// }
// }
// });
};
2022-11-25 17:30:39 +08:00
// function addCheck() {
// if (!checkInput.value.trim().length) return proxy.$modal.msgError("请输入");
// const flag = checkList.some((item) => {
// return item.name.trim() == checkInput.value.trim();
// });
// if (!flag) {
// checkList.push({
// id: checkList.length + 1,
// name: checkInput.value,
// });
// checkInput.value = "";
// }
// }
2022-11-22 17:31:02 +08:00
// 返回技术需求列表
const backToList = () => {
tab.closeOpenPage({ path: "/demand/technology" });
};
2022-10-31 17:46:09 +08:00
onMounted(() => {
formRef.value.resetFields();
2022-10-19 00:22:39 +08:00
2022-10-31 17:46:09 +08:00
if (route.query.id) {
2022-11-25 17:30:39 +08:00
const obj = Object.assign({}, route, { title: "修改技术需求" });
tab.updatePage(obj);
2022-10-31 17:46:09 +08:00
getTechnologyDemand({ id: route.query.id }).then((resp) => {
form.value = resp.data;
if (!form.value.kinds) {
form.value.kinds = resp.data.kind?.split(",") ?? [];
form.value.kinds.forEach((el, index) => {
if (!checkList.find((item) => item.name == el)) {
checkList.push({
id: index,
name: el,
});
}
});
}
if (!form.value.wants) {
form.value.wants = resp.data.want?.split(",") ?? [];
}
});
2022-11-17 17:29:47 +08:00
} else {
form.value = {
check: [],
};
if (formRef.value) {
formRef.value.resetFields();
}
2022-10-31 17:46:09 +08:00
}
});
2022-09-20 17:31:39 +08:00
</script>
2022-11-17 17:29:47 +08:00
<style lang="scss" scoped>
:deep(.cooperation-mode) {
.input-add-bar {
width: 100%;
}
}
</style>