数通智联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

305 lines
9.5 KiB

<!--
@ 作者: 秦东
@ 时间: 2023-10-11 11:05:45
@ 备注: 条件设置
-->
<script lang='ts' setup>
import $func from '@/utils/workflow/index'
import { useStore } from '@/store/workflow/index'
import { optTypes, opt1s } from '@/utils/workflow/const'
import { getConditions } from '@/api/workflowapi/index'
let conditionVisible = ref(false)
let conditionsConfig = ref({
conditionNodes: [],
})
let conditionConfig = ref({})
let PriorityLevel = ref('')
let conditions = ref([])
let conditionList = ref([])
let checkedList = ref([])
let conditionRoleVisible = ref(false)
let store = useStore()
let { setCondition, setConditionsConfig } = store
let tableId = computed(()=> store.tableId)
let conditionsConfig1 = computed(()=> store.conditionsConfig1)
let conditionDrawer = computed(()=> store.conditionDrawer)
let visible = computed({
get() {
return conditionDrawer.value
},
set() {
closeDrawer()
}
})
2 years ago
watch(conditionsConfig1, (val:any) => {
// console.log("val.priorityLevel",val.priorityLevel)
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 toStrChecked = (item, key) => {
let a = item.zdy1 ? item.zdy1.split(",") : []
var isIncludes = $func.toggleStrClass(item, key);
if (!isIncludes) {
a.push(key)
item.zdy1 = a.toString()
} else {
removeStrEle(item, key);
}
}
const removeStrEle = (item, key) => {
let a = item.zdy1 ? item.zdy1.split(",") : []
var includesIndex;
a.map((item, index) => {
if (item == key) {
includesIndex = index
}
});
a.splice(includesIndex, 1);
item.zdy1 = a.toString()
}
const addCondition = async () => {
conditionList.value = [];
conditionVisible.value = true;
let { data } = await getConditions({ tableId: tableId.value })
conditions.value = data;
if (conditionConfig.value.conditionList) {
for (var 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 = () => {
//1.弹窗有,外面无+
//2.弹窗有,外面有不变
for (var i = 0; i < conditionList.value.length; i++) {
var { 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": columnId,
"showName": '发起人'
});
} else {
if (columnType == "Double") {
conditionConfig.value.conditionList.push({
"showType": showType,
"columnId": columnId,
"type": 2,
"showName": showName,
"optType": "1",
"zdy1": "2",
"opt1": "<",
"zdy2": "",
"opt2": "<",
"columnDbname": columnName,
"columnType": columnType,
})
} else if (columnType == "String" && showType == "3") {
conditionConfig.value.conditionList.push({
"showType": showType,
"columnId": columnId,
"type": 2,
"showName": showName,
"zdy1": "",
"columnDbname": columnName,
"columnType": columnType,
"fixedDownBoxValue": 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(function (a, b) { return a.columnId - b.columnId; });
conditionVisible.value = false;
}
const saveCondition = () => {
closeDrawer()
var 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
});
for (var 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: conditionsConfig1.value.id
})
}
const addConditionRole = () => {
conditionRoleVisible.value = true;
checkedList.value = conditionConfig.value.nodeUserList
}
const sureConditionRole = (data) => {
conditionConfig.value.nodeUserList = data;
conditionRoleVisible.value = false;
}
2 years ago
const closeDrawer = (val?:any) => {
setCondition(false)
}
</script>
<template>
<el-drawer v-model="visible" :append-to-body="true" title="条件设置" class="condition_copyer" :show-close="false" :size="550" :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>
</div>
<el-button type="primary" @click="addCondition">添加条件</el-button>
<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="less">
.condition_copyer {
.priority_level {
position: absolute;
top: 11px;
right: 30px;
width: 100px;
height: 32px;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
border: 1px solid rgba(217, 217, 217, 1);
font-size: 12px;
}
.condition_content {
padding: 20px 20px 0;
p.tip {
margin: 20px 0;
width: 510px;
text-indent: 17px;
line-height: 45px;
background: rgba(241, 249, 255, 1);
border: 1px solid rgba(64, 163, 247, 1);
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: 100%;
height: 32px;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
border: 1px solid rgba(217, 217, 217, 1);
}
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 rgba(217, 217, 217, 1);
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: #666666;
margin-bottom: 10px;
&>.check_box {
margin-bottom: 0;
line-height: 36px;
}
}
}
</style>