<!-- 条件设置 -->
<script setup>
import { computed, nextTick, onMounted, ref, watch } from 'vue'
import $func from '@/plugins/preload'
import useWorkFlowStore from '@/store/modules/workFlow'

const workFlowStore = useWorkFlowStore()
const conditionVisible = ref(false)
const conditionsConfig = ref({
  conditionNodes: [],
})
const conditionConfig = ref({})
const PriorityLevel = ref('')
const conditions = ref([])
const conditionList = ref([])
const checkedList = ref([])
const conditionRoleVisible = ref(false)
const checkedfqr = ref(true) // 条件-发起人是否选择

// const { tableId, conditionsConfig1, conditionDrawer } = workFlowStore
const { setCondition, setConditionsConfig } = workFlowStore

const closeDrawer = (val) => {
  setCondition(false)
}
const visible = computed({
  get() {
    return workFlowStore.conditionDrawer
  },
  set() {
    closeDrawer()
  },
})
watch(() => workFlowStore.conditionsConfig1, (val, oldVal) => {
  conditionsConfig.value = val.value
  PriorityLevel.value = val.priorityLevel
  conditionConfig.value = val.priorityLevel
    ? conditionsConfig.value.conditionNodes[val.priorityLevel - 1]
    : { nodeUserList: [], conditionList: [] }
})
const changeOptType = (item) => {
  if (item.optType === 1) {
    item.zdy1 = 2
  }
  else {
    item.zdy1 = 1
    item.zdy2 = 2
  }
}
const removeStrEle = (item, key) => {
  const a = item.zdy1 ? item.zdy1.split(',') : []
  let includesIndex
  a.map((item, index) => {
    if (item === key) {
      includesIndex = index
    }
  })
  a.splice(includesIndex, 1)
  item.zdy1 = a.toString()
}
const toStrChecked = (item, key) => {
  const a = item.zdy1 ? item.zdy1.split(',') : []
  const isIncludes = $func.toggleStrClass(item, key)
  if (!isIncludes) {
    a.push(key)
    item.zdy1 = a.toString()
  }
  else {
    removeStrEle(item, key)
  }
}

const addCondition = async () => {
  conditionList.value = []
  conditionVisible.value = true
  const data = [
  //   // {
  //   //   "columnId": "1090",
  //   //   "showType": "1",
  //   //   "showName": "预计采购总费用",
  //   //   "columnName": "planProcurementTotalMoney",
  //   //   "columnType": "Double",
  //   //   "fixedDownBoxValue": ""
  //   // },
  //   // {
  //   //   "columnId": "1092",
  //   //   "showType": "3",
  //   //   "showName": "采购类型",
  //   //   "columnName": "procurementType",
  //   //   "columnType": "String",
  //   //   "fixedDownBoxValue": "{\"1\":{\"key\":\"1\",\"value\":\"新开园区集中采购\",\"column\":\"\",\"type\":\"1\"}}"
  //   // },
  //   // {
  //   //   "columnId": "1093",
  //   //   "showType": "1",
  //   //   "showName": "园区面积",
  //   //   "columnName": "parkArea",
  //   //   "columnType": "Double",
  //   //   "fixedDownBoxValue": ""
  //   // }
  ]
  conditions.value = data
  if (conditionConfig.value.conditionList) {
    for (let i = 0; i < conditionConfig.value.conditionList.length; i++) {
      var { columnId } = conditionConfig.value.conditionList[i]
      if (columnId === 0) {
        conditionList.value.push({ columnId: 0 })
      }
      else {
        conditionList.value.push(conditions.value.filter((item) => { return item.columnId === columnId })[0])
      }
    }
  }
}
const sureCondition = () => {
  console.log('*****')
  console.log(conditionConfig.value)
  // 1.弹窗有，外面无+
  // 2.弹窗有，外面有不变
  for (let i = 0; i < conditionList.value.length; i++) {
    const { columnId, showName, columnName, showType, columnType, fixedDownBoxValue } = conditionList.value[i]
    if ($func.toggleClass(conditionConfig.value.conditionList, conditionList.value[i], 'columnId')) {
      continue
    }
    if (columnId === 0) {
      conditionConfig.value.nodeUserList === []
      conditionConfig.value.conditionList.push({
        type: 1,
        columnId,
        showName: '发起人',
      })
    }
    else {
      if (columnType === 'Double') {
        conditionConfig.value.conditionList.push({
          showType,
          columnId,
          type: 2,
          showName,
          optType: '1',
          zdy1: '2',
          opt1: '<',
          zdy2: '',
          opt2: '<',
          columnDbname: columnName,
          columnType,
        })
      }
      else if (columnType === 'String' && showType === '3') {
        conditionConfig.value.conditionList.push({
          showType,
          columnId,
          type: 2,
          showName,
          zdy1: '',
          columnDbname: columnName,
          columnType,
          fixedDownBoxValue,
        })
      }
    }
  }
  // 3.弹窗无，外面有-
  for (let i = conditionConfig.value.conditionList.length - 1; i >= 0; i--) {
    if (!$func.toggleClass(conditionList.value, conditionConfig.value.conditionList[i], 'columnId')) {
      conditionConfig.value.conditionList.splice(i, 1)
    }
  }
  conditionConfig.value.conditionList.sort((a, b) => { return a.columnId - b.columnId })
  conditionVisible.value = false
}
// 抽屉点击确定
const saveCondition = () => {
  closeDrawer()
  const a = conditionsConfig.value.conditionNodes.splice(PriorityLevel.value - 1, 1)// 截取旧下标
  conditionsConfig.value.conditionNodes.splice(conditionConfig.value.priorityLevel - 1, 0, a[0])// 填充新下标
  conditionsConfig.value.conditionNodes.map((item, index) => {
    item.priorityLevel = index + 1
  })
  console.log('conditionsConfig.value', conditionsConfig.value)
  for (let i = 0; i < conditionsConfig.value.conditionNodes.length; i++) {
    conditionsConfig.value.conditionNodes[i].error = $func.conditionStr(conditionsConfig.value, i) === '请设置条件' && i !== conditionsConfig.value.conditionNodes.length - 1
  }
  setConditionsConfig({
    value: conditionsConfig.value,
    flag: true,
    id: workFlowStore.conditionsConfig1.id,
  })
}
// 添加
const addConditionRole = () => {
  conditionRoleVisible.value = true
  checkedList.value = conditionConfig.value.nodeUserList
}
// 选好角色了
const sureConditionRole = (data) => {
  conditionConfig.value.nodeUserList = data
  conditionRoleVisible.value = false
}

// 点击发起人
const clickfq = (conditionList, param, columnId) => {
  $func.toChecked(conditionList, param, columnId)
}
</script>

<template>
  <el-drawer v-model="visible" :append-to-body="true" title="条件设置" direction="rtl" custom-class="condition_copyer" size="550px" :before-close="saveCondition">
    <template #header="{ titleId, titleClass }">
      <h3 :id="titleId" :class="titleClass">
        条件设置
      </h3>
      <select v-model="conditionConfig.priorityLevel" class="priority_level">
        <option v-for="item in conditionsConfig.conditionNodes.length" :key="item" :value="item">
          优先级{{ item }}
        </option>
      </select>
    </template>
    <div class="demo-drawer__content">
      <div class="condition_content drawer_content">
        <p class="tip">
          当审批单同时满足以下条件时进入此流程
        </p>
        <el-button
          type="primary"
          @click="addCondition"
        >
          添加条件
        </el-button>

        <ul>
          <li v-for="(item, index) in conditionConfig.conditionList" :key="index">
            <!-- <el-button type="primary" @click="addConditionRole">
              选择成员
            </el-button> -->
            <span class="ellipsis">{{ item.type === 1 ? '发起人' : item.showName }}：</span>
            <div v-if="item.type === 1">
              <!-- <p :class="conditionConfig.nodeUserList.length > 0 ? 'selected_list' : ''" style="cursor: text;" @click.self="addConditionRole">
                <span v-for="(item1, index1) in conditionConfig.nodeUserList" :key="index1">
                  {{ item1.name }}<img src="@/assets/images/add-close1.png" @click="$func.removeEle(conditionConfig.nodeUserList, item1, 'targetId')">
                </span>
                <input v-if="conditionConfig.nodeUserList.length === 0" type="text" placeholder="请选择具体人员/角色/部门" @click="addConditionRole">
              </p> -->
              <el-input v-if="conditionConfig.nodeUserList.length === 0" type="text" placeholder="请选择具体人员/角色/部门" @click="addConditionRole" />
              <p v-if="conditionConfig && conditionConfig.nodeUserList && conditionConfig.nodeUserList.length" class="selected_list">
                <span v-for="(item, index) in conditionConfig.nodeUserList" :key="index" class="people-box">
                  {{ item.name }}
                  <!-- <img src="../../assets/images/add-close1.png" @click="$func.removeEle(conditionConfig.nodeUserList, item, 'targetId')"> -->
                  <el-icon style="vertical-align: middle;cursor: pointer;" @click="$func.removeEle(conditionConfig.nodeUserList, item, 'targetId')">
                    <close />
                  </el-icon>
                </span>
                <a v-if="conditionConfig.nodeUserList && conditionConfig.nodeUserList.length !== 0" @click="conditionConfig.nodeUserList = []">清除</a>
              </p>
            </div>
            <div v-else-if="item.columnType === 'String' && item.showType === 3">
              <p class="check_box">
                <a
                  v-for="(item1, index1) in JSON.parse(item.fixedDownBoxValue)" :key="index1"
                  :class="$func.toggleStrClass(item, item1.key) && 'active'" @click="toStrChecked(item, item1.key)"
                >{{ item1.value }}</a>
              </p>
            </div>
            <div v-else>
              <p>
                <select v-model="item.optType" :style="`width:${item.optType === 6 ? 370 : 100}px`" @change="changeOptType(item)">
                  <option value="1">
                    小于
                  </option>
                  <option value="2">
                    大于
                  </option>
                  <option value="3">
                    小于等于
                  </option>
                  <option value="4">
                    等于
                  </option>
                  <option value="5">
                    大于等于
                  </option>
                  <option value="6">
                    介于两个数之间
                  </option>
                </select>
                <input v-if="item.optType !== 6" v-model="item.zdy1" v-enter-number="2" type="text" :placeholder="`请输入${item.showName}`">
              </p>
              <p v-if="item.optType === 6">
                <input v-model="item.zdy1" v-enter-number="2" type="text" style="width: 75px;" class="mr_10">
                <select v-model="item.opt1" style="width: 60px;">
                  <option value="<">
                    &lt;
                  </option>
                  <option value="≤">
                    ≤
                  </option>
                </select>
                <span class="ellipsis" style="display: inline-block;width: 60px;vertical-align: text-bottom;">{{ item.showName }}</span>
                <select v-model="item.opt2" style="width: 60px;" class="ml_10">
                  <option value="<">
                    &lt;
                  </option>
                  <option value="≤">
                    ≤
                  </option>
                </select>
                <input v-model="item.zdy2" v-enter-number="2" type="text" style="width: 75px;">
              </p>
            </div>
            <a v-if="item.type === 1" @click="conditionConfig.nodeUserList = [];$func.removeEle(conditionConfig.conditionList, item, 'columnId')">删除</a>
            <a v-if="item.type === 2" @click="$func.removeEle(conditionConfig.conditionList, item, 'columnId')">删除</a>
          </li>
        </ul>

        <el-dialog v-model="conditionVisible" title="选择条件" width="480px" append-to-body custom-class="condition_list">
          <p>请选择用来区分审批流程的条件字段</p>
          <p class="check_box">
            <a
              :class="$func.toggleClass(conditionList, { columnId: 0 }, 'columnId') && 'active'"
              @click="clickfq(conditionList, { columnId: 0 }, 'columnId')"
            >发起人</a>
            <a
              v-for="(item, index) in conditions" :key="index" :class="$func.toggleClass(conditionList, item, 'columnId') && 'active'"
              @click="$func.toChecked(conditionList, item, 'columnId')"
            >{{ item.showName }}</a>
          </p>
          <template #footer>
            <el-button @click="conditionVisible = false">
              取 消
            </el-button>
            <el-button type="primary" @click="sureCondition">
              确 定
            </el-button>
          </template>
        </el-dialog>
      </div>
      <!-- <employees-role-dialog
        v-model:visible="conditionRoleVisible"
        v-model:data="checkedList"
        :is-department="true"
        @change="sureConditionRole"
      /> -->
      <!-- 角色弹框 -->
      <!-- <select-role-dialog
        v-model:visible="approverRoleVisible"
        v-model:data="checkedRoleList"
        @change="sureRoleApprover"
      /> -->
      <!-- 成员弹框 -->
      <select-employees-dialog
        v-model:visible="conditionRoleVisible"
        v-model:data="checkedList"
        @change="sureConditionRole"
      />
      <div class="demo-drawer__footer clear">
        <el-button type="primary" @click="saveCondition">
          确 定
        </el-button>
        <el-button @click="closeDrawer">
          取 消
        </el-button>
      </div>
    </div>
  </el-drawer>
</template>

<style lang="scss">
.condition_copyer {
  .people-box {
    font-size: 12px;
    margin-right: 10px;
    padding: 3px 6px 3px 9px;
    white-space: nowrap;
    border-radius: 6px;
    border: 1px solid rgb(220 220 220 / 100%);
  }

  .priority_level {
    position: absolute;
    top: 16px;
    right: 70px;
    width: 100px;
    height: 32px;
    background: rgb(255 255 255 / 100%);
    border-radius: 4px;
    border: 1px solid rgb(217 217 217 / 100%);
    font-size: 12px;
  }

  .condition_content {
    padding: 20px 20px 0;

    p.tip {
      margin: 20px 0;
      width: 510px;
      text-indent: 17px;
      line-height: 45px;
      background: rgb(241 249 255 / 100%);
      border: 1px solid rgb(64 163 247 / 100%);
      color: #46a6fe;
      font-size: 14px;
    }

    ul {
      max-height: 500px;
      overflow-y: scroll;
      margin-bottom: 20px;

      li {
        & > span {
          float: left;
          margin-right: 8px;
          width: 70px;
          line-height: 32px;
          text-align: right;
        }

        & > div {
          display: inline-block;
          width: 370px;

          & > p:not(:last-child) {
            margin-bottom: 10px;
          }
        }

        &:not(:last-child) > div > p {
          margin-bottom: 20px;
        }

        & > a {
          float: right;
          margin-right: 10px;
          margin-top: 7px;
        }

        select + input {
          width: 260px;
        }

        select {
          margin-right: 10px;
          width: 100px;
        }

        p.selected_list {
          padding-left: 10px;
          border-radius: 4px;
          min-height: 32px;
          border: 1px solid rgb(217 217 217 / 100%);
          word-break: break-word;
        }

        p.check_box {
          line-height: 32px;
        }
      }
    }

    .el-button {
      margin-bottom: 20px;
    }
  }
}

.condition_list {
  .el-dialog__body {
    padding: 16px 26px;
  }

  p {
    color: #666;
    margin-bottom: 10px;

    & > .check_box {
      margin-bottom: 0;
      line-height: 36px;
    }
  }
}

.radio_box a,
.check_box a {
  font-size: 12px;
  position: relative;
  padding-left: 20px;
  margin-right: 30px;
  cursor: pointer;
  color: #333;
  white-space: pre;
}

.check_box.not a:hover {
  color: #333;
}

.check_box.not a::before,
.check_box.not a:hover::before {
  border: none;
}

.check_box.not.active {
  background: #f3f3f3;
}

.radio_box a:hover::before,
.check_box a:hover::before {
  border: 1px solid #46a6fe;
}

.radio_box a::before,
.check_box a::before {
  position: absolute;
  width: 14px;
  height: 14px;
  border: 1px solid #dcdfe6;
  border-radius: 2px;
  left: 0;
  top: 1px;
  content: "";
}

.radio_box a::before {
  border-radius: 50%;
}

.check-dot.active::after,
.radio_box a.active::after,
.check_box a.active::after {
  position: absolute;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  top: 3px;
  left: 3px;
  content: "";
}

.radio_box a.active::after {
  background: #46a6fe;
}

.check_box a.active::after {
  background: url("@/assets/images/check_box.png") no-repeat center;
}
</style>
