<template>
    <!-- style="margin-bottom: 16px" -->

    <div class="table-box">
        <div style="padding-bottom: 16px">
            <el-button @click="handleReset"> 重置 </el-button>
            <el-button type="primary" @click="handleConfirmClick"> 提交 </el-button>
        </div>
        <div class="card table-main">
            <el-tabs v-model="activeName" class="demo-tabs">
                <el-tab-pane label="基本信息" name="basicInfo">
                    <rulesForm
                        :ruleForm="dataStore.editRuleForm"
                        :formData="dataStore.editFormData"
                        :rules="dataStore.rules"
                        ref="formRef"
                        @handleSelectChangeEmits="handleSelectChangeEmits"
                    />
                </el-tab-pane>

                <el-tab-pane label="详细内容" name="third">
                    <div style="width: 1280px; margin: 0 auto">
                        <Editor v-model:content="dataStore.editRuleForm.content" ref="editorRef"></Editor>
                    </div>
                </el-tab-pane>
            </el-tabs>
        </div>
    </div>
</template>

<script setup lang="ts" name="articleEditIndex">
import rulesForm from "@/components/rulesForm/index.vue";
import Editor from "@/components/Editor/index.vue";
import {
    getArticleClassDataApi,
    getArticleListAddSaveApi,
    getArticleListDetailsApi,
    getArticleListUpApi
} from "@/api/modules/articleList";
import { recursiveCompare } from "@/utils/recursiveCompare";
import { EDIT_FORM_DATA, EDIT_RULE_FORM, RULES } from "./constant/index";

import { ref, reactive } from "vue";
import { addLabelValue } from "@/utils/addLabelValue";
import { cloneDeep } from "lodash-es";
import { useMsg } from "@/hooks/useMsg";
const formRef = ref<any>(null);
const activeName = ref("basicInfo");
const $route = useRoute();
const editorRef = ref<any>(null);
//数据集合
const dataStore = reactive<any>({
    rules: cloneDeep(RULES), //抽屉表单验证
    editRuleForm: cloneDeep(EDIT_RULE_FORM),
    editFormData: cloneDeep(EDIT_FORM_DATA) //抽屉表单配置项
});

//文章分类
const getArticleClassData = async () => {
    const result = await getArticleClassDataApi({ is_show: 1 });
    if (result?.code === 0) {
        const { data } = result;
        dataStore.editFormData[1].options = addLabelValue(data);
        //如果有category_id就代表是从文章分类跳转过来的
        if ($route.query.category_id) {
            dataStore.editRuleForm.category_id = Number($route.query.category_id);
        }
    }
};
getArticleClassData();

//文章详情
const getArticleListDetails = async () => {
    let id = $route.query.id;
    if (!id) {
        return;
    }
    const result = await getArticleListDetailsApi(id);
    if (result?.code === 0) {
        const { data } = result;
        dataStore.editRuleForm = data;
        if (!data.content) {
            editorRef?.value?.clearEditor(); // 调用子组件的清空方法
        }
        // dataStore.editRuleForm.content = convertSpanToDiv(dataStore.editRuleForm.content);
        let is = dataStore.editFormData[1].options.some((item: any) =>
            recursiveCompare(item, dataStore.editRuleForm.category_id)
        );
        dataStore.editRuleForm.category_id1 = is ? dataStore.editRuleForm.category_id : dataStore.editRuleForm.category_name;
    }
};
const handleSelectChangeEmits = (value: any) => {
    if (value?.prop === "category_id1") {
        dataStore.editRuleForm.category_id = value.id;
    }
};
const convertDateFormat = (dateString: any) => {
    const date = new Date(dateString);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, "0");
    const day = String(date.getDate()).padStart(2, "0");
    const hours = String(date.getHours()).padStart(2, "0");
    const minutes = String(date.getMinutes()).padStart(2, "0");
    const seconds = String(date.getSeconds()).padStart(2, "0");

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
//新增
const getArticleListAddSave = async () => {
    if (dataStore.editRuleForm.release_time) {
        dataStore.editRuleForm.release_time = convertDateFormat(dataStore.editRuleForm.release_time);
    } else {
        dataStore.editRuleForm.release_time = null;
    }
    const result = await getArticleListAddSaveApi(dataStore.editRuleForm);
    if (result.code === 0) {
        const { msg } = result;
        useMsg("success", msg);
    }
};
//更新
const getArticleListUp = async () => {
    if (dataStore.editRuleForm.release_time) {
        dataStore.editRuleForm.release_time = convertDateFormat(dataStore.editRuleForm.release_time);
    } else {
        dataStore.editRuleForm.release_time = null;
    }
    const result = await getArticleListUpApi({ id: $route.query.id, ...dataStore.editRuleForm });

    if (result?.code === 0) {
        useMsg("success", result?.msg);
    }
};

getArticleListDetails();

//提交
const handleConfirmClick = () => {
    if (!formRef.value!.ruleFormRef) return;
    formRef!.value!.ruleFormRef!.validate((valid: any) => {
        if (valid) {
            console.log("submit!");
            $route.query.type === "add" ? getArticleListAddSave() : getArticleListUp();
        } else {
            console.log("error submit!");
            return false;
        }
    });
};
//重置
const handleReset = () => {
    if ($route.query.type === "add") {
        dataStore.editRuleForm = cloneDeep(EDIT_RULE_FORM);
        editorRef?.value?.clearEditor(); // 调用子组件的清空方法
        //     if (!data.detail) {
        //     dataStore.detail = "";
        //     editorRef.value.clearEditor(); // 调用子组件的清空方法
        // } else {
        //     dataStore.detail = cloneDeep(data.detail);
        // }
    } else {
        getArticleListDetails();
    }
};
</script>

<style scoped></style>
