|
|
@@ -159,6 +159,19 @@
|
|
|
</template>
|
|
|
</el-input>
|
|
|
</el-form-item>
|
|
|
+ <!-- 店铺评价 -->
|
|
|
+ <el-form-item label="店铺评价" prop="storeEvaluate">
|
|
|
+ <el-input v-model="storeEvaluate1" type="text" :rows="1" placeholder="请输入评价1" show-word-limit />
|
|
|
+ <el-input
|
|
|
+ style="margin: 10px 0"
|
|
|
+ v-model="storeEvaluate2"
|
|
|
+ type="text"
|
|
|
+ :rows="1"
|
|
|
+ placeholder="请输入评价2"
|
|
|
+ show-word-limit
|
|
|
+ />
|
|
|
+ <el-input v-model="storeEvaluate3" type="text" :rows="1" placeholder="请输入评价3" show-word-limit />
|
|
|
+ </el-form-item>
|
|
|
<!-- 经营板块 -->
|
|
|
<el-form-item label="经营板块" prop="businessSection">
|
|
|
<el-radio-group v-model="formData.businessSection" class="business-section-radio-group">
|
|
|
@@ -170,6 +183,14 @@
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
|
|
|
+ <!-- 标签选择(仅当经营板块为生活服务时显示) -->
|
|
|
+ <el-form-item v-if="formData.businessSection === 3" label="标签选择" prop="storeTickets" required>
|
|
|
+ <el-radio-group v-model="formData.storeTickets">
|
|
|
+ <el-radio :value="1"> 装修公司 </el-radio>
|
|
|
+ <el-radio :value="0"> 其他 </el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
<!-- 经营种类 -->
|
|
|
<el-form-item label="经营种类" prop="businessTypeName">
|
|
|
<el-input v-model="formData.businessTypeName" placeholder="请输入经营种类" clearable maxlength="50" />
|
|
|
@@ -242,6 +263,11 @@ const loading = ref(false);
|
|
|
// 标记是否正在加载详情数据,用于防止触发 watch
|
|
|
const isLoadingDetail = ref(false);
|
|
|
|
|
|
+// 店铺评价三个输入框的独立变量
|
|
|
+const storeEvaluate1 = ref("");
|
|
|
+const storeEvaluate2 = ref("");
|
|
|
+const storeEvaluate3 = ref("");
|
|
|
+
|
|
|
// 表单数据
|
|
|
const formData = reactive({
|
|
|
id: "",
|
|
|
@@ -255,6 +281,7 @@ const formData = reactive({
|
|
|
administrativeRegionDistrictAdcode: "",
|
|
|
storeAddress: "",
|
|
|
storeBlurb: "",
|
|
|
+ storeEvaluate: "",
|
|
|
queryAddress: "",
|
|
|
businessSection: "" as number | "",
|
|
|
businessSectionName: "",
|
|
|
@@ -265,7 +292,8 @@ const formData = reactive({
|
|
|
storePosition: "",
|
|
|
storePositionLongitude: "",
|
|
|
storePositionLatitude: "",
|
|
|
- isChain: 0
|
|
|
+ isChain: 0,
|
|
|
+ storeTickets: "" as number | ""
|
|
|
});
|
|
|
|
|
|
// 经纬度查询
|
|
|
@@ -339,8 +367,38 @@ const rules = reactive<FormRules>({
|
|
|
administrativeRegionDistrictAdcode: [{ required: true, message: "请选择区", trigger: "change" }],
|
|
|
storeAddress: [{ required: true, message: "请输入详细地址", trigger: "blur" }],
|
|
|
storeBlurb: [{ required: true, message: "请输入门店简介", trigger: "blur" }],
|
|
|
+ storeEvaluate: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ validator: (rule: any, value: any, callback: any) => {
|
|
|
+ if (!storeEvaluate1.value || !storeEvaluate2.value || !storeEvaluate3.value) {
|
|
|
+ callback(new Error("请填写完整的店铺评价(三个评价都需要填写)"));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: "blur"
|
|
|
+ }
|
|
|
+ ],
|
|
|
queryAddress: [{ required: true, message: "请输入地址进行经纬度查询", trigger: "blur" }],
|
|
|
businessSection: [{ required: true, message: "请选择经营板块", trigger: "change" }],
|
|
|
+ storeTickets: [
|
|
|
+ {
|
|
|
+ validator: (rule: any, value: any, callback: any) => {
|
|
|
+ // 仅当经营板块为生活服务(值为3)时,storeTickets为必填
|
|
|
+ if (formData.businessSection === 3) {
|
|
|
+ if (value === "" || value === null || value === undefined) {
|
|
|
+ callback(new Error("请选择标签"));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: "change"
|
|
|
+ }
|
|
|
+ ],
|
|
|
businessTypeName: [{ required: true, message: "请输入经营种类", trigger: "blur" }],
|
|
|
businessCategoryName: [{ required: true, message: "请输入经营类目", trigger: "blur" }]
|
|
|
});
|
|
|
@@ -480,6 +538,23 @@ const businessStatusReverseMap: Record<number, string> = {
|
|
|
const handleSubmit = async () => {
|
|
|
if (!formRef.value) return;
|
|
|
|
|
|
+ // 先验证三个店铺评价字段是否都填写
|
|
|
+ if (!storeEvaluate1.value || !storeEvaluate2.value || !storeEvaluate3.value) {
|
|
|
+ ElMessage.warning("请填写完整的店铺评价(三个评价都需要填写)");
|
|
|
+ // 手动触发验证,显示错误提示
|
|
|
+ formRef.value.validateField("storeEvaluate", () => {});
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证标签选择(当经营板块为生活服务时)
|
|
|
+ if (formData.businessSection === 3) {
|
|
|
+ if (formData.storeTickets === "" || formData.storeTickets === null || formData.storeTickets === undefined) {
|
|
|
+ ElMessage.warning("请选择标签");
|
|
|
+ formRef.value.validateField("storeTickets", () => {});
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
await formRef.value.validate(async valid => {
|
|
|
if (!valid) {
|
|
|
ElMessage.warning("请完善表单信息");
|
|
|
@@ -504,6 +579,11 @@ const handleSubmit = async () => {
|
|
|
// 获取经营板块名称
|
|
|
const selectedSection = businessSectionList.value.find(item => item.dictId === formData.businessSection);
|
|
|
|
|
|
+ // 将三个店铺评价用逗号拼接
|
|
|
+ formData.storeEvaluate = [storeEvaluate1.value, storeEvaluate2.value, storeEvaluate3.value]
|
|
|
+ .filter(item => item && item.trim())
|
|
|
+ .join(",");
|
|
|
+
|
|
|
const submitData = {
|
|
|
id: formData.id ? Number(formData.id) : undefined,
|
|
|
isChain: formData.isChain,
|
|
|
@@ -513,6 +593,7 @@ const handleSubmit = async () => {
|
|
|
storeAddress: formData.storeAddress,
|
|
|
storeArea: formData.storeArea,
|
|
|
storeBlurb: formData.storeBlurb,
|
|
|
+ storeEvaluate: formData.storeEvaluate,
|
|
|
queryAddress: formData.queryAddress,
|
|
|
administrativeRegionProvinceAdcode: formData.administrativeRegionProvinceAdcode ?? "",
|
|
|
administrativeRegionCityAdcode: formData.administrativeRegionCityAdcode ?? "",
|
|
|
@@ -525,7 +606,10 @@ const handleSubmit = async () => {
|
|
|
businessSection: formData.businessSection,
|
|
|
businessSectionName: selectedSection ? selectedSection.dictDetail : "",
|
|
|
businessTypeName: formData.businessTypeName,
|
|
|
- businessCategoryName: formData.businessCategoryName
|
|
|
+ businessCategoryName: formData.businessCategoryName,
|
|
|
+ // 标签选择(仅当经营板块为生活服务时)
|
|
|
+ storeTickets:
|
|
|
+ formData.businessSection === 3 ? (formData.storeTickets !== "" ? formData.storeTickets : undefined) : undefined
|
|
|
};
|
|
|
|
|
|
let result;
|
|
|
@@ -578,6 +662,19 @@ const getStoreDetailData = async () => {
|
|
|
formData.businessStatus = storeData.businessStatus ?? "";
|
|
|
formData.storeAddress = storeData.storeAddress ?? "";
|
|
|
formData.storeBlurb = storeData.storeBlurb ?? "";
|
|
|
+ // 处理店铺评价:用逗号切割并分别赋值给三个输入框
|
|
|
+ if (storeData.storeEvaluate) {
|
|
|
+ const evaluateArray = storeData.storeEvaluate.split(",");
|
|
|
+ storeEvaluate1.value = evaluateArray[0]?.trim() || "";
|
|
|
+ storeEvaluate2.value = evaluateArray[1]?.trim() || "";
|
|
|
+ storeEvaluate3.value = evaluateArray[2]?.trim() || "";
|
|
|
+ formData.storeEvaluate = storeData.storeEvaluate;
|
|
|
+ } else {
|
|
|
+ storeEvaluate1.value = "";
|
|
|
+ storeEvaluate2.value = "";
|
|
|
+ storeEvaluate3.value = "";
|
|
|
+ formData.storeEvaluate = "";
|
|
|
+ }
|
|
|
formData.expirationTime = storeData.expirationTime ?? "";
|
|
|
formData.foodLicenceExpirationTime = storeData.foodLicenceExpirationTime ?? "";
|
|
|
formData.storePosition = storeData.storePosition ?? "";
|
|
|
@@ -608,6 +705,13 @@ const getStoreDetailData = async () => {
|
|
|
formData.businessSection = storeData.businessSection;
|
|
|
formData.businessSectionName = storeData.businessSectionName ?? "";
|
|
|
}
|
|
|
+ // 设置标签选择(仅当经营板块为生活服务时)
|
|
|
+ if (storeData.businessSection === 3) {
|
|
|
+ formData.storeTickets =
|
|
|
+ storeData.storeTickets !== undefined && storeData.storeTickets !== null ? Number(storeData.storeTickets) : "";
|
|
|
+ } else {
|
|
|
+ formData.storeTickets = "";
|
|
|
+ }
|
|
|
formData.businessTypeName = storeData.businessTypeName ?? "";
|
|
|
// 如果 businessCategoryName 是 0,转换为空字符串
|
|
|
const categoryName = storeData.businessCategoryName;
|
|
|
@@ -635,6 +739,13 @@ watch(
|
|
|
if (newValue === 3 && formData.businessCategoryName === "0") {
|
|
|
formData.businessCategoryName = "";
|
|
|
}
|
|
|
+ // 当切换到非生活服务时,清空标签选择
|
|
|
+ if (newValue !== 3) {
|
|
|
+ formData.storeTickets = "";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果经营板块为空,也清空标签选择
|
|
|
+ formData.storeTickets = "";
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
@@ -708,7 +819,7 @@ onMounted(async () => {
|
|
|
}
|
|
|
|
|
|
// 响应式布局
|
|
|
-@media (width <= 1200px) {
|
|
|
+@media (width <=1200px) {
|
|
|
.store-info-container {
|
|
|
.store-form {
|
|
|
.form-content {
|