<template>
    <view>
        <cu-custom :backUrl="'/pages/index/index?id=apps'" :isBack="true" bgColor="bg-gradual-blue">
            <block slot="content">建筑垃圾巡视</block>
        </cu-custom>

        <!-- First Section: 巡视工单 to 联系方式 -->
        <view class="form-section">
            <u--form :model="inputForm" labelWidth="100px" class="u-form" labelPosition="left" :rules="rules" ref="inputForm" v-if="!nodeFlag">

                <u-form-item label="巡视工单" prop="no">
                    <u--input v-model="inputForm.no" :disabled="true" placeholder="工单编号" clearable></u--input>
                </u-form-item>

                <u-form-item label="处理单位" borderBottom prop="processingUnit" :required="true" v-if="!disFlag">
                    <jp-picker v-model="inputForm.processingUnit" rangeKey="label" rangeValue="value" :range="processingUnits" @input="getUserInfoByOffId"></jp-picker>
                </u-form-item>

                <u-form-item label="处理单位" borderBottom prop="processingUnitName" :required="true" v-else-if="disFlag">
                    <u--input v-model="inputForm.processingUnitName" :disabled="true" placeholder="处理单位" clearable></u--input>
                </u-form-item>

                <u-form-item label="清运专员" prop="clearUserName">
                    <u--input v-model="inputForm.clearUserName" :disabled="true" placeholder="清运专员" clearable></u--input>
                </u-form-item>

                <u-form-item label="联系方式" prop="clearUserMobile">
                    <u--input v-model="inputForm.clearUserMobile" :disabled="true" placeholder="联系方式" clearable></u--input>
                </u-form-item>
            </u--form>
        </view>

        <!-- Second Section: 上传图片 -->
        <view class="form-section">
            <text class="u-demo-block__title">现场照片</text>
            <view class="u-page__upload-item">
                <u-upload
                        :fileList="fileList1"
                        @afterRead="afterRead"
                        @delete="deletePic"
                        name="1"
                        multiple
                        :maxCount="10"
                ></u-upload>
            </view>
        </view>

        <!-- Third Section: 备注 -->
        <view class="form-section">
            <u--form :model="inputForm" labelWidth="100px" class="u-form" labelPosition="left" :rules="rules" ref="inputForm" v-if="!nodeFlag">
                <u-form-item label="备注" borderBottom prop="remarks">
                    <u--textarea placeholder='请填写备注' :maxlength="500" v-model="inputForm.remarks"></u--textarea>
                </u-form-item>

                <view class="button-container">
                    <u-button
                            text="提交"
                            size="large"
                            type="primary"
                            @click="saveForm"
                    ></u-button>
                </view>
            </u--form>
        </view>
    </view>
</template>

<script>
    import overService from '@/api/garbageClearance/overService'
    import {mapState, mapMutations, mapActions} from 'vuex'
    import * as $auth from "../../common/auth";
    export default {
        components: {
        },
        computed: mapState({
            userInfo: (state) => state.user.userInfo,
            avatar: (state) => state.user.avatar
        }),
        data () {
            return {
                disFlag: true,  // 启用动态获取处理单位则设置为false
                processingUnits: [],
                fileList1: [],
                nodeFlag: false,
                inputForm: {
                    no: '',
                    processingUnit: '',
                    processingUnitName: '',
                    clearUserId: '',
                    clearUserName: '',
                    clearUserMobile: '',
                    remarks: '',
                },
                rules: {
                    'processingUnit': [
                        {
                            required: true,
                            message: '处理单位不能为空',
                            trigger: ['blur', 'change']
                        }
                    ],
                }
            }
        },
        // 页面加载时执行
        async created() {

            let data = await overService.getMaxNo();
            if (data) {
                let newNo = parseInt(data, 10) + 1;
                this.inputForm.no = 'XS-J' + newNo;
            } else {
                // 获取当前年份
                let nowY = new Date().getFullYear();
                this.inputForm.no = 'XS-J' + nowY + '0001';
            }

            // 如果要使用动态获取处理单位则设置为true
            if (false) {
                let units = await overService.getProcessingUnit();
                let childs = units[0].children;

                if (childs) {
                    this.processingUnits = [];  // 初始化数组

                    for (let i = 0; i < childs.length; i++) {
                        this.processingUnits.push({
                            label: childs[i].name,
                            value: childs[i].id
                        });
                    }
                }
            }

            this.inputForm.processingUnit = this.userInfo.officeDTO.id
            this.inputForm.processingUnitName = this.userInfo.officeDTO.name
            // 不动态获取  根据当前登录人去查
            await overService.getUserInfoByOffId(this.userInfo.officeDTO.id)
                .then(data => {
                    this.inputForm.clearUserId = data.id
                    this.inputForm.clearUserName = data.name
                    this.inputForm.clearUserMobile = data.mobile
                })
                .catch(e => {
                    throw e;
                });


        },
        props: {
            status: {
                type: String,
                default: ''
            }
        },
        watch: {
        },
        methods: {
           init (id) {
               this.nodeFlag = true
                this.inputForm.id = id
                /*if (id) {
                   financeInvoiceService.queryById(id).then((data) => {

                       if (this.status === 'testSee') {
                           this.nodeFlag = true
                           this.testFlag = true
                       } else {
                           this.commonApi.getTaskNameByProcInsId(data.procInsId).then((data) => {
                               if (this.isNotEmpty(data)) {
                                   if (data === '发起人重新申请' || this.isEmpty(data)) {
                                       this.nodeFlag = false
                                   } else if (data === '发票管理员审核'){
                                       this.nodeFlag = true
                                       this.addFlag = true
                                   }
                               }else {
                                   this.testFlag = true
                                   this.addFlag = true
                                   console.log('没有')
                               }
                           })
                       }


                        this.inputForm = this.recover(this.inputForm, data)

                        if (this.inputForm.workAttachmentDtoList) {
                            this.inputForm.workAttachmentDtoList.forEach( (item,index) => {
                                this.$set(this.showFileList, index, true);
                            })
                        }

                       let i = this.inputForm.financeInvoiceBaseDTOList.length
                       let sun = 0
                       for (let j = 0; j < i; j++) {
                           sun = (100*sun + 100* this.inputForm.financeInvoiceBaseDTOList[j].account)/100
                       }

                       this.inputForm.accountTotal = sun
                       this.inputForm.billingDate = this.formatDate(new Date())
                       if ( !this.nodeFlag && this.status !== 'testSee') {
                           this.inputForm.financeInvoiceDetailDTOList.push({
                               code: '',
                               number: '',
                               account: sun,
                               rate: '',
                               amount: '',
                               tax: '',
                               allAmount: ''
                           })
                       }

                       if (!this.isEmpty(this.inputForm.billingWorkplaceRealId)) {
                           this.bankList = []
                           workClientService.queryById(this.inputForm.billingWorkplaceRealId).then((data) => {
                               if (this.isNotEmpty(data.cwWorkClientBillingDTOList)) {
                                   data.cwWorkClientBillingDTOList.forEach(i => {
                                       i.ourBank = i.accountHolder
                                       let test = {label: i.ourBank, value: i.id, account: i.account}
                                       this.bankList.push(test)
                                       this.$set(this.inputForm, 'openBank', i.id);
                                   })
                               } else {
                                   this.bankList = []
                               }
                           })
                       }
                    })
                }*/
            },
            formatDate(date) {
                const dateNew = new Date(date); // 将日期字符串转换为 Date 对象
                const year = dateNew.getFullYear();
                const month = (dateNew.getMonth() + 1).toString().padStart(2, '0');
                const day = dateNew.getDate().toString().padStart(2, '0');
                return `${year}-${month}-${day}`;
            },
            isEmpty(value) {
                let result = false;
                if (value == null || value == undefined) {
                    result = true;
                }
                if (typeof value == 'string' && (value.replace(/\s+/g, "") == "" || value == "")) {
                    result = true;
                }
                if (typeof value == "object" && value instanceof Array && value.length === 0) {
                    result = true;
                }
                return result;
            },
            isNotEmpty (value) {
                return !this.isEmpty(value)
            },
            /**
             * 判断是否为空
             */
            isNull(val) {
                if (val instanceof Array) {
                    if (val.length === 0) return true;
                } else if (val instanceof Object) {
                    if (JSON.stringify(val) === "{}") return true;
                } else {
                    if (
                        val === "null" ||
                        val == null ||
                        val === "undefined" ||
                        val === undefined ||
                        val === ""
                    )
                        return true;
                    return false;
                }
                return false;
            },

            formatDateNew(date) {
                const year = date.getFullYear();
                const month = (date.getMonth() + 1).toString().padStart(2, '0');
                const day = date.getDate().toString().padStart(2, '0');
                const hours = date.getHours().toString().padStart(2, '0');
                const minutes = date.getMinutes().toString().padStart(2, '0');
                const seconds = date.getSeconds().toString().padStart(2, '0');

                return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
            },
            saveForm(callback) {

                return new Promise((resolve, reject) => {
                    // 表单规则验证
                    // ...

                    let errors = [];

                    if (this.fileList1 && this.fileList1.length > 0) {
                        // 将 fileList1 中的每个文件对象的属性名调整为新的属性名
                        this.inputForm.fileList1 = this.fileList1.map(file => {
                            return {
                                attachmentName: file.name,
                                fileSize: file.size,
                                url: file.url,
                                type: file.type,      // 如果不需要，可以不写
                                attachmentFlag: 'before',      // 如果不需要，可以不写
                            };
                        });
                    }

                    if (errors.length > 0) {
                        // 存在错误，显示提示信息
                        errors.forEach(error => {
                            uni.showToast({
                                title: error,
                                icon: 'none',
                                duration: 2000
                            });
                        });
                        reject('Form validation failed');
                    } else {
                        // 所有验证通过，执行保存操作
                        this.$refs.inputForm.validate().then(() => {
                            uni.showLoading();

                            overService.save(this.inputForm).then(data => {

                                uni.showToast({title:"提交成功", icon:"success"});
                                // 返回上一页
                                uni.navigateBack({
                                    delta: 1
                                });
                                resolve('Form saved successfully');
                            }).catch(error => {
                                reject('Save operation failed');
                            });
                        }).catch(() => {
                            reject('Form validation failed');
                        });
                    }
                });
            },

            // 删除图片
            deletePic(event) {
                this[`fileList${event.name}`].splice(event.index, 1)
            },
            // 新增图片
            async afterRead(event) {
                // 当设置 mutiple 为 true 时, file 为数组格式，否则为对象格式
                let lists = [].concat(event.file)
                let fileListLen = this[`fileList${event.name}`].length
                lists.map((item) => {
                    this[`fileList${event.name}`].push({
                        ...item,
                        status: 'uploading',
                        message: '上传中'
                    })
                })
                for (let i = 0; i < lists.length; i++) {
                    const result = await this.uploadFilePromise(lists[i].url, fileListLen)
                    let item = this[`fileList${event.name}`][fileListLen]
                    this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
                        status: 'success',
                        message: '',
                        url: result
                    }))
                    fileListLen++
                }
            },
            uploadFilePromise(url, index) {
                console.log($auth.getUserToken())
                return new Promise((resolve, reject) => {
                    let a = uni.uploadFile({
                        url: 'http://localhost:8000/app/file/webUpload/fileUpload', // 仅为示例，非真实的接口地址
                        filePath: url,
                        name: 'file',
                        formData: {
                            user: this.$store.state.user.userInfo
                        },
                        header: {
                            'token': $auth.getUserToken(),
                        },
                        success: (res) => {

                            // this.fileList1[index].url = url

                            setTimeout(() => {
                                const dataObj = JSON.parse(res.data);
                                const url = dataObj.url;
                                resolve(url);
                            }, 1000);
                        },
                        fail: (err) => {
                            console.error('Upload failed:', err);
                        }
                    });
                })
            },
            getUserInfoByOffId(){
                // 根据组织ID 获取 该村的 村支书
                overService.getUserInfoByOffId(this.inputForm.processingUnit)
                    .then(data => {
                        this.inputForm.clearUserId = data.id
                        this.inputForm.clearUserName = data.name
                        this.inputForm.clearUserMobile = data.mobile
                    })
                    .catch(e => {
                        throw e;
                    });
            }
        }
    }
</script>

<style>
    .form-section {
        padding: 10px 15px;
        margin-bottom: 10px;
        background-color: #ffffff;
        border-radius: 5px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    }

    .u-page__upload-item {
        margin-top: 10px;
    }

    .button-container {
        margin-top: 20px;
        text-align: center;
    }

    .cu-form-group .title {
        min-width: 100px;
    }
</style>
