<template>
  <cs-page isCustom>
    <template #header>
      <view
        class="wd-flex wd-flex-row wd-items-center"
        style="gap: 8px"
        @click="goBack"
      >
        <view class="icon-box" v-if="form.audit">
          <u-icon name="arrow-left" size="12"></u-icon>
        </view>
        <text class="wd-font-800 wd-text-16">编辑个人信息</text>
      </view>
    </template>
    <view class="container">
      <!-- 我的头像 -->
      <view
        class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
      >
        <text style="color: #99a1b7">我的头像</text>
        <button
          class="wd-flex wd-flex-row wd-items-center avatarBtn"
          style="gap: 8px"
          type="balanced"
          open-type="chooseAvatar"
          @chooseavatar="chooseAvatar"
        >
          <u-avatar :src="form.avatar"></u-avatar>
          <u-icon name="arrow-right"></u-icon>
        </button>
      </view>
      <!-- 真实姓名 -->
      <view
        class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
      >
        <text style="color: #99a1b7">姓名</text>
        <view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
          <input
            class="wd-text-right"
            type="text"
            placeholder-class="txt"
            placeholder="请输入姓名"
            v-model="form.realName"
            placeholder-style="color:#99a1b7"
          />
          <u-icon name="arrow-right" color="#99a1b7" size="16"></u-icon>
        </view>
      </view>
      <!-- 用户性别 -->
      <view
        class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
        @click="showPicker('system_user_sex', 'sex')"
      >
        <text style="color: #99a1b7">性别</text>
        <view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
          <text v-if="form.sex">
            {{
              $dict.echoDicValue(
                dictMap.system_user_sex,
                form.sex.toString()
              )
            }}
          </text>
          <text class="placeholder" v-else>请选择性别</text>
          <u-icon name="arrow-right" color="#99a1b7" size="16"></u-icon>
        </view>
      </view>
      <!-- 手机号码 -->
      <view
        class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
      >
        <text style="color: #99a1b7">手机号码</text>
        <view
          class="wd-flex wd-flex-row wd-items-center"
          style="gap: 16rpx"
        >
          <input
            class="wd-text-right"
            type="number"
            placeholder-class="txt"
            placeholder="请输入手机号码"
            v-model="form.mobile"
            placeholder-style="color:#99a1b7"
          />
          <u-icon name="arrow-right" color="#99a1b7" size="16"></u-icon>
        </view>
      </view>
      <!-- 所属部门 -->
      <view
        class="section wd-flex wd-flex-row wd-justify-between wd-items-center"
        @click="showPicker('dept', 'deptId')"
      >
        <text style="color: #99a1b7">部门</text>
        <view class="wd-flex wd-flex-row wd-items-center" style="gap: 8px">
          <text v-if="form.deptId">
            {{ $dict.echoDicValue(dictMap.dept, form.deptId) }}
          </text>
          <text class="placeholder" v-else>请选择部门</text>
          <u-icon name="arrow-right" color="#99A1B7" size="16"></u-icon>
        </view>
      </view>
      <view class="button-box">
        <button class="button audit" v-if="form.audit == 1">
          {{ $dict.echoDicValue(dictMap.user_audit_type, form.audit) }}
        </button>
        <button class="button submit" @click="submit" v-else>提交</button>
      </view>
    </view>
    <u-picker
      :show="picker.show"
      :columns="picker.data"
      @cancel="closePicker"
      closeOnClickOverlay
      keyName="label"
      ref="uPicker"
      @close="closePicker"
      @confirm="confirmPicker"
    ></u-picker>
  </cs-page>
</template>

<script>
import { getUserProfile, updateUserProfile } from '@/api/system/user.js'
import { uploadFile } from '@/api/system/file.js'
import { getDictBatchByType, getDeptTree } from '@/api/system/dict.js'
export default {
  data() {
    return {
      dictMap: {},
      deptTree: [],
      form: {
        avatar: undefined,
        realName: undefined,
        mobile: undefined,
        deptId: undefined,
        sex: undefined
      },
      picker: {
        show: false,
        key: '',
        data: []
      }
    }
  },
  async onLoad(options) {
    if (options.audit) {
      this.form.audit = options.audit
    }
    await this.getDict()
  },
  onShow() {
    this.init()
  },
  methods: {
    showPicker(type, key) {
      this.picker.data.push(this.dictMap[type])
      this.picker.key = key
      this.picker.show = true
    },
    closePicker() {
      this.picker = {
        show: false,
        key: '',
        data: []
      }
    },
    init() {
      if (this.$store.getters.userId) {
        getUserProfile().then(res => {
          this.form = res.data
        })
      }
    },
    async getDict() {
      const dict = await getDictBatchByType({
        type: ['system_user_sex', 'user_audit_type'].join(',')
      })

      const dept = await getDeptTree()
      this.dictMap = {
        ...dict.data,
        dept: dept.data.map(i => {
          return {
            ...i,
            label: i.name,
            value: i.id
          }
        })
      }
    },
    chooseAvatar(e) {
      const data = {
        name: 'file',
        filePath: e.detail.avatarUrl
      }
      uploadFile(data).then(res => {
        this.form.avatar = res.data.url
      })
    },
    validateForm() {
      const requiredFields = [
        {
          key: 'avatar',
          message: '请上传头像'
        },
        {
          key: 'realName',
          message: '真实姓名不能为空'
        },
        {
          key: 'sex',
          message: '请选择性别'
        },
        {
          key: 'mobile',
          message: '手机号码不能为空'
        }
        // {
        //   key: 'deptId',
        //   message: '请选择所属部门'
        // }
      ]

      for (const field of requiredFields) {
        if (!this.form[field.key]) {
          uni.showToast({
            title: field.message,
            icon: 'none'
          })
          return false
        }
      }

      const mobilePattern = /^1[3-9]\d{9}$/ // 中国手机号正则表达式
      if (!mobilePattern.test(this.form.mobile)) {
        uni.showToast({
          title: '请输入有效的手机号',
          icon: 'none'
        })
        return false
      }

      return true
    },
    submit() {
      uni.showLoading({
        mask: true,
        title: '提交中...'
      })
      if (!this.validateForm()) {
        uni.hideLoading()

        return
      }
      updateUserProfile(this.form).then(res => {
        setTimeout(function () {
          uni.hideLoading()
        }, 300)
        uni.showToast({
          title: '操作成功',
          icon: 'success',
          duration: 500
        })
        this.init()
      })
    },
    confirmPicker(e) {
      const { value } = e
      this.form[this.picker.key] = value[0].value
      this.closePicker()
    },
    goBack() {
      if (this.form.audit) {
        uni.switchTab({
          url: '/pages/owner'
        })
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.container {
  height: 100%;
  padding: 32rpx;
  position: relative;
  .section {
    border-radius: 16rpx;
    background: #fff;
    margin-bottom: 32rpx;
    padding: 24px;
    height: 140rpx;
    font-size: 30rpx;
  }
  .button-box {
    position: fixed;
    bottom: 116rpx;
    right: 10px;
    left: 10px;
    .button {
      width: 60vw;
      border-radius: 30px;
      font-size: 32rpx;
      font-weight: bold;
      height: 40px;
      line-height: 40px;
      box-sizing: border-box;
    }
    .submit {
      color: #fff;
      background: #17c653;
    }
    .audit {
      color: #17c653;
      background: #eafff1;
    }
  }
  .placeholder {
    color: #99a1b7;
  }
  button {
    padding-left: 0;
    padding-right: 0;
  }
  .avatarBtn {
    background-color: #fff;
    flex: 1;
    justify-content: flex-end;
    &::after {
      content: '';
      display: none;
    }
  }
}
</style>