Browse Source

Merge branch 'qin_22'

lwx_v26
herenshan112 6 months ago
parent
commit
9902fba2bc
  1. 1
      src/components/workflow/drwer/approverDrawer.vue
  2. 118
      src/components/workflow/drwer/copyerDrawer.vue
  3. 371
      src/components/workflow/drwer/copyerSend.vue
  4. 182
      src/views/hr/archives/archivescont.vue
  5. 249
      src/views/hr/archives/basicinformation/editorg.vue
  6. 14
      src/views/hr/archives/index.vue
  7. 7
      src/views/sysworkflow/flow/flowDrawingBoard.vue
  8. 97
      src/views/sysworkflow/flow/index.vue
  9. 2
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue
  10. 278
      src/views/sysworkflow/lowcodepage/lowCodeFormPage.vue
  11. 2
      src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue
  12. 9
      src/views/sysworkflow/lowcodepage/workFlow.vue

1
src/components/workflow/drwer/approverDrawer.vue

@ -601,6 +601,7 @@ const libraryList = ref([
<div class="demo-drawer__content"> <div class="demo-drawer__content">
<!--审批人设置主体--> <!--审批人设置主体-->
<div class="drawer_content"> <div class="drawer_content">
{{ approverConfig }}
<el-tabs v-model="nodeSetUp" class="demo-tabs"> <el-tabs v-model="nodeSetUp" class="demo-tabs">
<el-tab-pane name="first"> <el-tab-pane name="first">
<template #label> <template #label>

118
src/components/workflow/drwer/copyerDrawer.vue

@ -3,56 +3,66 @@
@ 时间: 2023-10-11 11:02:24 @ 时间: 2023-10-11 11:02:24
@ 备注: 抄送配置 @ 备注: 抄送配置
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import employeesDialog from '@/components/workflow/dialog/employeesDialog.vue' import employeesDialog from "@/components/workflow/dialog/employeesDialog.vue";
import $func from '@/utils/workflow/index' import $func from "@/utils/workflow/index";
import { useStore } from '@/store/workflow/index' import { useStore, setTypes, selectModes, selectRanges } from "@/store/workflow/index";
let copyerConfig = ref({})
let ccSelfSelectFlag = ref([]) let copyerConfig = ref({});
let copyerVisible = ref(false) let ccSelfSelectFlag = ref([]);
let checkedList = ref([]) let copyerVisible = ref(false);
let store = useStore() let checkedList = ref([]);
let { setCopyerConfig, setCopyer } = store let store = useStore();
let copyerDrawer = computed(()=> store.copyerDrawer) let { setCopyerConfig, setCopyer } = store;
let copyerConfig1 = computed(()=> store.copyerConfig1) let copyerDrawer = computed(() => store.copyerDrawer);
let copyerConfig1 = computed(() => store.copyerConfig1);
let visible = computed({ let visible = computed({
get() { get() {
return copyerDrawer.value return copyerDrawer.value;
}, },
set() { set() {
closeDrawer() closeDrawer();
} },
}) });
watch(copyerConfig1, (val) => { watch(copyerConfig1, (val) => {
copyerConfig.value = val.value; copyerConfig.value = val.value;
ccSelfSelectFlag.value = copyerConfig.value.ccSelfSelectFlag == 0 ? [] : [copyerConfig.value.ccSelfSelectFlag] ccSelfSelectFlag.value =
}) copyerConfig.value.ccSelfSelectFlag == 0 ? [] : [copyerConfig.value.ccSelfSelectFlag];
});
const addCopyer = () => { const addCopyer = () => {
copyerVisible.value = true; copyerVisible.value = true;
checkedList.value = copyerConfig.value.nodeUserList checkedList.value = copyerConfig.value.nodeUserList;
} };
const sureCopyer = (data:any) => { const sureCopyer = (data: any) => {
// console.log("",data) // console.log("",data)
copyerConfig.value.nodeUserList = data; copyerConfig.value.nodeUserList = data;
copyerVisible.value = false; copyerVisible.value = false;
} };
const saveCopyer = () => { const saveCopyer = () => {
copyerConfig.value.ccSelfSelectFlag = ccSelfSelectFlag.value.length == 0 ? 0 : 1; copyerConfig.value.ccSelfSelectFlag = ccSelfSelectFlag.value.length == 0 ? 0 : 1;
copyerConfig.value.error = !$func.copyerStr(copyerConfig.value); copyerConfig.value.error = !$func.copyerStr(copyerConfig.value);
setCopyerConfig({ setCopyerConfig({
value: copyerConfig.value, value: copyerConfig.value,
flag: true, flag: true,
id: copyerConfig1.value.id id: copyerConfig1.value.id,
}) });
closeDrawer(); closeDrawer();
} };
const closeDrawer = () => { const closeDrawer = () => {
setCopyer(false) setCopyer(false);
} };
</script> </script>
<template> <template>
<el-drawer v-model="visible" :append-to-body="true" title="抄送人设置" class="set_copyer" :show-close="false" :size="550" :before-close="saveCopyer"> <el-drawer
v-model="visible"
:append-to-body="true"
title="抄送人设置"
class="set_copyer"
:show-close="false"
:size="550"
:before-close="saveCopyer"
>
<div class="demo-drawer__content"> <div class="demo-drawer__content">
<div class="copyer_content drawer_content"> <div class="copyer_content drawer_content">
<el-button type="primary" @click="addCopyer">添加成员</el-button> <el-button type="primary" @click="addCopyer">添加成员</el-button>
@ -64,8 +74,23 @@ const closeDrawer = () => {
</p> --> </p> -->
<p class="selected_list"> <p class="selected_list">
<el-tag v-for="(item,index) in copyerConfig.nodeUserList" :key="index" closable type="info" effect="plain" class="tag_us" @close="$func.removeEle(copyerConfig.nodeUserList,item,'targetId')">{{item.name}}</el-tag> <el-tag
<el-tag v-if="copyerConfig.nodeUserList&&copyerConfig.nodeUserList.length!=0" type="danger" effect="dark" @click="copyerConfig.nodeUserList=[]">清除</el-tag> v-for="(item, index) in copyerConfig.nodeUserList"
:key="index"
closable
type="info"
effect="plain"
class="tag_us"
@close="$func.removeEle(copyerConfig.nodeUserList, item, 'targetId')"
>{{ item.name }}</el-tag
>
<el-tag
v-if="copyerConfig.nodeUserList && copyerConfig.nodeUserList.length != 0"
type="danger"
effect="dark"
@click="copyerConfig.nodeUserList = []"
>清除</el-tag
>
</p> </p>
<el-checkbox-group v-model="ccSelfSelectFlag" class="clear"> <el-checkbox-group v-model="ccSelfSelectFlag" class="clear">
@ -74,7 +99,6 @@ const closeDrawer = () => {
<div class="info_box"> <div class="info_box">
<QuillEditor v-model="copyerConfig.helpTips" height="400px" /> <QuillEditor v-model="copyerConfig.helpTips" height="400px" />
</div> </div>
</div> </div>
<div class="demo-drawer__footer clear"> <div class="demo-drawer__footer clear">
<el-button type="primary" @click="saveCopyer"> </el-button> <el-button type="primary" @click="saveCopyer"> </el-button>
@ -88,7 +112,7 @@ const closeDrawer = () => {
</div> </div>
</el-drawer> </el-drawer>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.set_copyer { .set_copyer {
.copyer_content { .copyer_content {
padding: 20px 20px 0; padding: 20px 20px 0;
@ -110,30 +134,33 @@ const closeDrawer = () => {
.approver_some .el-radio { .approver_some .el-radio {
display: block; display: block;
} }
.set_promoter{ .set_promoter {
.approver_content { .approver_content {
padding-bottom: 10px; padding-bottom: 10px;
border-bottom: 0px solid #f2f2f2; border-bottom: 0px solid #f2f2f2;
.el-radio{ .el-radio {
width:auto; width: auto;
} }
} }
.approver_manager,.approver_self_select,.approver_some,.approver_self{ .approver_manager,
.approver_self_select,
.approver_some,
.approver_self {
border-top: 1px solid #f2f2f2; border-top: 1px solid #f2f2f2;
} }
.approver_self_select, .approver_self_select,
.approver_content{ .approver_content {
.el-button{ .el-button {
margin-bottom: 20px; margin-bottom: 20px;
} }
} }
.approver_content, .approver_content,
.approver_some, .approver_some,
.approver_self_select{ .approver_self_select {
.el-radio-group{ .el-radio-group {
display: unset; display: unset;
} }
.el-radio{ .el-radio {
width: 27%; width: 27%;
margin-bottom: 20px; margin-bottom: 20px;
height: 16px; height: 16px;
@ -177,18 +204,17 @@ const closeDrawer = () => {
line-height: 19px; line-height: 19px;
} }
} }
.selected_list{ .selected_list {
margin: 0; margin: 0;
line-height: 0; line-height: 0;
.tag_us{ .tag_us {
margin-right: 10px; margin-right: 10px;
} }
span{ span {
margin-top: 10px; margin-top: 10px;
} }
a{ a {
margin-top: 15px; margin-top: 15px;
} }
} }
</style> </style>

371
src/components/workflow/drwer/copyerSend.vue

@ -0,0 +1,371 @@
<!--
@ 作者: 秦东
@ 时间: 2025-05-26 14:59:22
@ 备注: 新版抄送节点
-->
<script lang="ts" setup>
import $func from "@/utils/workflow/index";
import { setTypes, selectModes, selectRanges } from "@/utils/workflow/const";
import { useStore } from "@/store/workflow/index";
import { matrixInfo } from "@/api/matrixapi/type";
let props = defineProps({
isFormFlow: {
type: Boolean,
default: true,
},
directormaxlevel: {
type: Number,
default: 4,
},
});
const isExecutor = ref(false);
let ccSelfSelectFlag = ref([]);
let copyerConfig = ref({});
let store = useStore();
let { setCopyerConfig, setCopyer } = store;
let copyerDrawer = computed(() => store.copyerDrawer);
let copyerConfig1 = computed(() => store.copyerConfig1);
let checkedList = ref<any[]>([]); //
let visible = computed({
get() {
return copyerDrawer.value;
},
set() {
closeDrawer();
},
});
const matrixFieldList = ref<matrixInfo>();
const nodeSendSetUp = ref("first");
watch(copyerConfig1, (val) => {
if (val.settype == 0) {
copyerConfig.value.settype = 1;
}
copyerConfig.value = val.value;
ccSelfSelectFlag.value =
copyerConfig.value.ccSelfSelectFlag == 0 ? [] : [copyerConfig.value.ccSelfSelectFlag];
});
onMounted(() => {
console.log("预加载数据建军节--------》", copyerConfig1.value);
if (copyerConfig1.settype == 0) {
copyerConfig.value.settype = 1;
}
});
//
watch(
() => copyerConfig.value.settype,
(val: any) => {
console.log("监听审批人设置选项", copyerConfig.value);
switch (val) {
case 10:
let sendOrg = {
id: 313,
idstr: "313",
level: 4,
all: 1,
};
govthree(sendOrg).then(({ data }) => {
// console.log("",data)
orgList.value = data;
nextTick(() => {
setOrgTree(copyerConfig.value.orgList);
});
});
break;
case 0:
copyerConfig.value.settype = 1;
break;
default:
break;
}
},
{
deep: true,
}
);
/**
@ 作者: 秦东
@ 时间: 2025-05-26 15:23:01
@ 功能: 写入数据
*/
const saveCopyer = () => {};
//
const closeDrawer = () => {
setCopyer(false);
};
/**
@ 作者: 秦东
@ 时间: 2025-05-26 16:23:35
@ 功能: 属性选择
*/
const changeType = (val: any) => {
copyerConfig.value.nodeUserList = [];
copyerConfig.value.examineMode = 1;
copyerConfig.value.noHanderAction = 2;
console.log("属性选择--->", val);
switch (val) {
case 2:
copyerConfig.value.directorLevel = 1; //
break;
case 7:
copyerConfig.value.examineEndDirectorLevel = 1; // n
break;
case 9:
matrixFieldList.value = copyerConfig.value.matrix; //
break;
default:
}
};
//
const isShowRatify = (id: number) => {
if (id == 8) {
return props.isFormFlow;
} else if (id == 4) {
return false;
} else {
return true;
}
};
/**
@ 作者: 秦东
@ 时间: 2025-05-27 14:19:31
@ 功能: 添加指定成员
*/
let approverVisible = ref(false);
const addApprover = () => {
approverVisible.value = true;
checkedList.value = copyerConfig.value.nodeUserList;
};
/**
@ 作者: 秦东
@ 时间: 2025-05-27 15:25:07
@ 功能: 更新指定成员数据
*/
const sureApprover = (data: any) => {
copyerConfig.value.nodeUserList = data;
approverVisible.value = false;
};
</script>
<template>
<el-drawer
v-model="visible"
:append-to-body="true"
title="抄送人设置"
class="set_promoter"
:show-close="false"
:size="550"
:before-close="saveCopyer"
>{{ props }}
<div class="demo-drawer__content">
<div class="drawer_content drawer_content">
{{ copyerConfig }}
<el-tabs v-model="nodeSendSetUp" class="demo-tabs">
<el-tab-pane name="first">
<template #label>
<span class="wordKeyCss">属性设置</span>
</template>
<div class="info_box">
<div class="approver_content">
<el-radio-group
v-model="copyerConfig.settype"
class="clear"
@change="changeType"
>
<template v-for="{ value, label } in setTypes" :key="value">
<el-radio
v-if="isShowRatify(value)"
:label="value"
style="width: auto"
>{{ label }}</el-radio
>
</template>
</el-radio-group>
</div>
<!--指定成员-->
<el-divider v-if="copyerConfig.settype == 1" content-position="left"
>指定成员</el-divider
>
<div v-if="copyerConfig.settype == 1" class="approver_manager">
<el-button type="primary" @click="addApprover">添加/修改成员</el-button>
<p class="selected_list">
<el-tag
v-for="(item, index) in copyerConfig.nodeUserList"
:key="index"
closable
type="info"
effect="plain"
class="tag_us"
@close="$func.removeEle(copyerConfig.nodeUserList, item, 'targetId')"
>{{ item.name }}</el-tag
>
<el-tag
v-if="copyerConfig.nodeUserList.length != 0"
type="danger"
effect="dark"
@click="copyerConfig.nodeUserList = []"
>清除</el-tag
>
</p>
</div>
<!--主管-->
<el-divider v-if="copyerConfig.settype == 2" content-position="left"
>主管</el-divider
>
<div v-if="copyerConfig.settype == 2" class="approver_manager">
<p>
<el-row :gutter="10">
<el-col v-if="isExecutor" :span="6">
<select v-model="copyerConfig.attribute" style="width: 100%">
<option value="1">发起人</option>
<option value="2">执行人</option>
</select>
</el-col>
<el-col :span="18">
<select v-model="copyerConfig.directorLevel">
<option
v-for="item in props.directormaxlevel"
:key="item"
:value="item"
>
{{ item == 1 ? "直接" : "第" + item + "级" }}主管
</option>
</select>
</el-col>
</el-row>
</p>
<p class="tip">找不到主管时由上级主管代审批</p>
</div>
<el-checkbox-group v-model="ccSelfSelectFlag" class="clear">
<el-checkbox :label="1">允许发起人自选抄送人</el-checkbox>
</el-checkbox-group>
</div>
</el-tab-pane>
<el-tab-pane name="helpInstructions">
<template #label>
<span class="wordKeyCss">帮助说明</span>
</template>
<div class="info_box">
<QuillEditor v-model="copyerConfig.helpTips" height="400px" />
</div>
</el-tab-pane>
</el-tabs>
</div>
<div class="demo-drawer__footer clear">
<el-button type="primary" @click="saveCopyer"> </el-button>
<el-button @click="closeDrawer"> </el-button>
</div>
</div>
<!--选择成员-->
<employees-dialog
v-model:visible="approverVisible"
:data="checkedList"
@change="sureApprover"
/>
</el-drawer>
</template>
<style lang="scss" scoped>
.approver_some .el-radio-group {
display: block;
}
.approver_manager .el-radio-group {
display: block;
}
.approver_some .el-radio {
display: block;
}
.set_promoter {
.approver_content {
padding-bottom: 10px;
border-bottom: 0px solid #f2f2f2;
.el-radio {
width: auto;
}
}
.approver_manager,
.approver_self_select,
.approver_some,
.approver_self {
border-top: 0px solid #f2f2f2;
}
.approver_self_select,
.approver_content {
.el-button {
margin-bottom: 20px;
}
}
.approver_content,
.approver_some,
.approver_self_select {
.el-radio-group {
display: unset;
}
.el-radio {
width: 27%;
margin-bottom: 20px;
height: 16px;
}
}
.approver_manager p {
line-height: 32px;
}
.approver_manager select {
width: 420px;
height: 32px;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
border: 1px solid rgba(217, 217, 217, 1);
}
.approver_manager p.tip {
margin: 10px 0 22px 0;
font-size: 12px;
line-height: 16px;
color: #f8642d;
}
.approver_self {
padding: 28px 20px;
}
.approver_self_select,
.approver_manager,
.approver_content,
.approver_some {
padding: 20px 20px 20px 20px;
}
.approver_manager p:first-of-type,
.approver_some p {
line-height: 19px;
font-size: 14px;
margin-bottom: 14px;
}
.approver_self_select h3 {
margin: 5px 0 20px;
font-size: 14px;
font-weight: bold;
line-height: 19px;
}
}
.selected_list {
margin: 0;
line-height: 0;
.tag_us {
margin-right: 10px;
}
span {
margin-top: 10px;
}
a {
margin-top: 15px;
}
}
.info_box {
padding: 0 20px;
}
.wordKeyCss {
padding: 0 20px;
}
</style>

182
src/views/hr/archives/archivescont.vue

@ -3,7 +3,7 @@
@ 时间: 2024-08-31 14:15:47 @ 时间: 2024-08-31 14:15:47
@ 备注: 员工档案 @ 备注: 员工档案
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { getMyInfoing, editMyInfoIcon } from "@/api/hr/people/index"; import { getMyInfoing, editMyInfoIcon } from "@/api/hr/people/index";
import UserRole from "@/assets/icons/user.svg"; // import UserRole from "@/assets/icons/user.svg"; //
@ -28,7 +28,6 @@ import Jobtitle from "@/views/hr/archives/basicinformation/jobtitle.vue"; //
import Certificates from "@/views/hr/archives/basicinformation/certificates.vue"; // import Certificates from "@/views/hr/archives/basicinformation/certificates.vue"; //
import PersonalityTest from "@/views/hr/archives/basicinformation/personalityTest.vue"; // import PersonalityTest from "@/views/hr/archives/basicinformation/personalityTest.vue"; //
const props = defineProps({ const props = defineProps({
isShow: { isShow: {
type: Boolean, type: Boolean,
@ -41,11 +40,7 @@ const props = defineProps({
}, },
}, },
}); });
const emits = defineEmits([ const emits = defineEmits(["update:isShow", "updatemyconting", "getarchivespageclick"]); //
"update:isShow",
"updatemyconting",
"getarchivespageclick",
]); //
/** /**
* 弹窗显示控制 * 弹窗显示控制
@ -57,7 +52,7 @@ const boxShow = computed({
}, },
}); });
const activeName = ref("1"); // const activeName = ref("1"); //
const fileUploadIng = ref(false) const fileUploadIng = ref(false);
const userIcon = ref<string>(); // const userIcon = ref<string>(); //
const boxTitle = ref<string>(); // const boxTitle = ref<string>(); //
const userConting = ref<any>(""); // const userConting = ref<any>(""); //
@ -68,17 +63,17 @@ const editMyCont = ref(false); //编辑个人信息
/** /**
* 获取人员数据 * 获取人员数据
*/ */
const getjtcyList = () => { const getjtcyList = () => {
rowLoading.value = true; rowLoading.value = true;
getMyInfoing({ id: props.archivesdata.id, idstr: props.archivesdata.idstr }) getMyInfoing({ id: props.archivesdata.id, idstr: props.archivesdata.idstr })
.then((data) => { .then((data) => {
console.log("获取人员信息",data.data); console.log("获取人员信息", data.data);
userConting.value = data.data userConting.value = data.data;
}) })
.finally(() => { .finally(() => {
rowLoading.value = false; rowLoading.value = false;
}); });
} };
/** /**
* 关闭弹窗 * 关闭弹窗
*/ */
@ -92,26 +87,36 @@ function closeArchivesBox() {
@ 时间: 2024-08-31 14:23:41 @ 时间: 2024-08-31 14:23:41
@ 功能: 监听弹窗打开 @ 功能: 监听弹窗打开
*/ */
watch(() => props.isShow,(val:Boolean) => { watch(
if(val){ () => props.isShow,
(val: Boolean) => {
if (val) {
getjtcyList(); getjtcyList();
boxTitle.value = "查看 " + props.archivesdata.name + "(工号:" + props.archivesdata.number + ")" + " 详情"; boxTitle.value =
"查看 " +
props.archivesdata.name +
"(工号:" +
props.archivesdata.number +
")" +
" 详情";
if (props.archivesdata.icon != "") { if (props.archivesdata.icon != "") {
userIcon.value = props.archivesdata.icon; userIcon.value = props.archivesdata.icon;
}else if (props.archivesdata.iconphoto != "") { } else if (props.archivesdata.iconphoto != "") {
userIcon.value = props.archivesdata.iconphoto; userIcon.value = props.archivesdata.iconphoto;
}else{ } else {
userIcon.value = UserRole; userIcon.value = UserRole;
} }
} }
},{deep:true}) },
{ deep: true }
);
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-08-31 14:35:18 @ 时间: 2024-08-31 14:35:18
@ 功能: 上传前判断类型 @ 功能: 上传前判断类型
*/ */
const beforeAvatarUpload: UploadProps["beforeUpload"] = (rawFile) => { const beforeAvatarUpload: UploadProps["beforeUpload"] = (rawFile) => {
fileUploadIng.value = true fileUploadIng.value = true;
if (!/\.(png|jpg|gif|jpeg|svg|bmp)$/.test(rawFile.name)) { if (!/\.(png|jpg|gif|jpeg|svg|bmp)$/.test(rawFile.name)) {
ElMessage.warning("您上传的图片不符合要求!"); ElMessage.warning("您上传的图片不符合要求!");
fileUploadIng.value = false; fileUploadIng.value = false;
@ -137,7 +142,7 @@ const handleAvatarSuccess: UploadProps["onSuccess"] = (
ElMessage.success("编辑成功"); ElMessage.success("编辑成功");
emits("getarchivespageclick"); emits("getarchivespageclick");
}); });
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-08-31 14:46:59 @ 时间: 2024-08-31 14:46:59
@ -145,7 +150,7 @@ const handleAvatarSuccess: UploadProps["onSuccess"] = (
*/ */
const editmvorg = () => { const editmvorg = () => {
editMyOrgCont.value = true; editMyOrgCont.value = true;
} };
/** /**
* 选项卡翻页 * 选项卡翻页
*/ */
@ -213,10 +218,7 @@ const handleClickUser = (tab: any, event: Event) => {
</el-col> </el-col>
<el-col :span="24" class="col_box"> <el-col :span="24" class="col_box">
<el-text class="cont_size"> <el-text class="cont_size">
<svg-icon <svg-icon icon-class="healthcondition" class="svg_box"></svg-icon>
icon-class="healthcondition"
class="svg_box"
></svg-icon>
<span v-if="userConting.health == 2">良好</span> <span v-if="userConting.health == 2">良好</span>
<span v-else-if="userConting.health == 3">较弱</span> <span v-else-if="userConting.health == 3">较弱</span>
<span v-else-if="userConting.health == 4">有生理缺陷</span> <span v-else-if="userConting.health == 4">有生理缺陷</span>
@ -245,21 +247,14 @@ const handleClickUser = (tab: any, event: Event) => {
</el-col> </el-col>
<el-col :span="24" class="col_box"> <el-col :span="24" class="col_box">
<el-text class="cont_size"> <el-text class="cont_size">
<svg-icon <svg-icon icon-class="iconfont-mingpian" class="svg_box"></svg-icon>
icon-class="iconfont-mingpian"
class="svg_box"
></svg-icon>
{{ userConting.positionname }} {{ userConting.positionname }}
</el-text> </el-text>
</el-col> </el-col>
</el-row> </el-row>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-button <el-button type="primary" style="margin-top: 15px" @click="editmvorg">
type="primary"
style="margin-top: 15px"
@click="editmvorg"
>
编辑主行政组织 编辑主行政组织
</el-button> </el-button>
</el-col> </el-col>
@ -269,12 +264,8 @@ const handleClickUser = (tab: any, event: Event) => {
<!--右侧区域--> <!--右侧区域-->
<el-col :xs="24" :sm="24" :md="12" :lg="16" :xl="16"> <el-col :xs="24" :sm="24" :md="12" :lg="16" :xl="16">
<el-card shadow="always" class="box-card"> <el-card shadow="always" class="box-card">
<el-tabs <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClickUser">
v-model="activeName" <el-tab-pane label="基本信息" name="1">
class="demo-tabs"
@tab-click="handleClickUser"
>
<el-tab-pane label="基本信息" name="1" >
<UserContent <UserContent
v-if="!editMyCont && activeName == '1'" v-if="!editMyCont && activeName == '1'"
v-model:editShow="editMyCont" v-model:editShow="editMyCont"
@ -289,67 +280,112 @@ const handleClickUser = (tab: any, event: Event) => {
@refreshcontdata="refreshContPage" @refreshcontdata="refreshContPage"
/> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="性格特性" name="2" > <el-tab-pane label="性格特性" name="2">
<PersonalityTest v-if="activeName == '2'" :usercont="userConting" :tabsid="activeName" /> <PersonalityTest
v-if="activeName == '2'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="行政组织关系" name="3" > <el-tab-pane label="行政组织关系" name="3">
<OrgNexus v-if="activeName == '3'" :usercont="userConting" :tabsid="activeName" /> <OrgNexus
v-if="activeName == '3'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="紧急联系人" name="4" > <el-tab-pane label="紧急联系人" name="4">
<EmergencyContactPage <EmergencyContactPage
v-if="activeName == '4'" v-if="activeName == '4'"
:usercont="userConting" :usercont="userConting"
:tabsid="activeName" :tabsid="activeName"
/> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="双职工" name="5" > <el-tab-pane label="双职工" name="5">
<WorkingCouplePage v-if="activeName == '5'" :usercont="userConting" :tabsid="activeName" /> <WorkingCouplePage
v-if="activeName == '5'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="家庭成员" name="6" > <el-tab-pane label="家庭成员" name="6">
<FamilyMembers v-if="activeName == '6'" :usercont="userConting" :tabsid="activeName" /> <FamilyMembers
v-if="activeName == '6'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="教育经历" name="7" > <el-tab-pane label="教育经历" name="7">
<EducationalExperience <EducationalExperience
v-if="activeName == '7'" v-if="activeName == '7'"
:usercont="userConting" :usercont="userConting"
:tabsid="activeName" :tabsid="activeName"
/> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="集团内部工作履历" name="8" > <el-tab-pane label="集团内部工作履历" name="8">
<InnerWork v-if="activeName == '8'" :usercont="userConting" :tabsid="activeName" /> <InnerWork
v-if="activeName == '8'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="集团外部工作履历" name="9" > <el-tab-pane label="集团外部工作履历" name="9">
<OutsideWork v-if="activeName == '9'" :usercont="userConting" :tabsid="activeName" /> <OutsideWork
v-if="activeName == '9'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="奖惩记录" name="10" > <el-tab-pane label="奖惩记录" name="10">
<Rewardsandpunishments <Rewardsandpunishments
v-if="activeName == '10'" v-if="activeName == '10'"
:usercont="userConting" :usercont="userConting"
:tabsid="activeName" :tabsid="activeName"
/> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考评记录" name="11" > <el-tab-pane label="考评记录" name="11">
<Appraisalrecord v-if="activeName == '11'" :usercont="userConting" :tabsid="activeName" /> <Appraisalrecord
v-if="activeName == '11'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="人才盘点" name="12" > <el-tab-pane label="人才盘点" name="12">
<Talentinventory v-if="activeName == '12'" :usercont="userConting" :tabsid="activeName" /> <Talentinventory
v-if="activeName == '12'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="员工用工关系" name="13" > <el-tab-pane label="员工用工关系" name="13">
<Employmentrelations v-if="activeName == '13'" :usercont="userConting" :tabsid="activeName" /> <Employmentrelations
v-if="activeName == '13'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="职称信息" name="14" > <el-tab-pane label="职称信息" name="14">
<Jobtitle v-if="activeName == '14'" :usercont="userConting" :tabsid="activeName" /> <Jobtitle
v-if="activeName == '14'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="证书信息" name="15" > <el-tab-pane label="证书信息" name="15">
<Certificates v-if="activeName == '15'" :usercont="userConting" :tabsid="activeName" /> <Certificates
v-if="activeName == '15'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="修改登陆密码" name="16" > <el-tab-pane label="修改登陆密码" name="16">
<Editpwd v-if="activeName == '16'" :usercont="userConting" :tabsid="activeName" /> <Editpwd
v-if="activeName == '16'"
:usercont="userConting"
:tabsid="activeName"
/>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
@ -358,10 +394,10 @@ const handleClickUser = (tab: any, event: Event) => {
v-model:editShow="editMyOrgCont" v-model:editShow="editMyOrgCont"
:usercont="userConting" :usercont="userConting"
:tabsid="activeName" :tabsid="activeName"
@refreshcontdata="refreshContPage" @refreshcontdata="getjtcyList"
/> />
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.bjg { .bjg {
background-color: aqua; background-color: aqua;
height: 50px; height: 50px;
@ -391,7 +427,7 @@ const handleClickUser = (tab: any, event: Event) => {
} }
} }
} }
.bianKuang{ .bianKuang {
border: 1px solid #ccc; border: 1px solid #ccc;
} }
</style> </style>

249
src/views/hr/archives/basicinformation/editorg.vue

@ -3,66 +3,66 @@
@ 时间: 2023-06-20 08:15:45 @ 时间: 2023-06-20 08:15:45
@ 备注: 编辑行政组织 @ 备注: 编辑行政组织
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { editUserAboutOrg,teamClassCont } from '@/api/hr/people/type' import { editUserAboutOrg, teamClassCont } from "@/api/hr/people/type";
import { editMyOrgUndertake,haveTeamTimeList } from '@/api/hr/people/index' import { editMyOrgUndertake, haveTeamTimeList } from "@/api/hr/people/index";
import { positiongrade } from '@/api/hr/people/datacont' import { positiongrade } from "@/api/hr/people/datacont";
/** /**
* 行政组织 * 行政组织
*/ */
import { orgInfo,teamInfo } from '@/api/hr/org/type' import { orgInfo, teamInfo } from "@/api/hr/org/type";
import { getOrgTreeList,getTeamListCont } from '@/api/hr/org/index' import { getOrgTreeList, getTeamListCont } from "@/api/hr/org/index";
import { postinfo } from '@/api/hr/post/type' import { postinfo } from "@/api/hr/post/type";
import { getPostContNotSunPage } from '@/api/hr/post/index' import { getPostContNotSunPage } from "@/api/hr/post/index";
import { dutiesCont } from '@/api/hr/duties/type' import { dutiesCont } from "@/api/hr/duties/type";
import { getDuitesList } from '@/api/hr/duties/index' import { getDuitesList } from "@/api/hr/duties/index";
const props = defineProps({ const props = defineProps({
editShow:{ editShow: {
type:Boolean, type: Boolean,
default:false default: false,
},
tabsid: {
type: String,
default: "1",
},
usercont: {
type: Object,
default() {
return {};
}, },
tabsid:{
type:String,
default:"1"
}, },
usercont:{
type:Object,
default(){
return {}
}
}
}); });
const emits = defineEmits(["update:editShow","refreshcontdata"]); const emits = defineEmits(["update:editShow", "refreshcontdata"]);
const editUsAboutOrg = reactive<editUserAboutOrg>({id:"",personInCharge:"2"}); const editUsAboutOrg = reactive<editUserAboutOrg>({ id: "", personInCharge: "2" });
const editUsOrgFormRef = ref(ElForm); // const editUsOrgFormRef = ref(ElForm); //
const addLoading = ref(false) const addLoading = ref(false);
const fuZefanWei = ref(false) const fuZefanWei = ref(false);
/** /**
* 行政组织 * 行政组织
*/ */
const orgTreePostRef = ref(ElTree); const orgTreePostRef = ref(ElTree);
const orgOptionsList = ref<any>(); // const orgOptionsList = ref<any>(); //
const fatherPost = ref<postinfo[]>([]) // const fatherPost = ref<postinfo[]>([]); //
const teamContAry = ref<teamInfo[]>([]) // const teamContAry = ref<teamInfo[]>([]); //
const dutiesInfo = ref<dutiesCont[]>([]) // const dutiesInfo = ref<dutiesCont[]>([]); //
const teamList = ref<teamClassCont[]>([]) const teamList = ref<teamClassCont[]>([]);
/** /**
* 表单验证规则 * 表单验证规则
*/ */
const editPwdRules = reactive({ const editPwdRules = reactive({
orgid: [{ required: true, message: "请选择归属行政组织", trigger: "blur" }], orgid: [{ required: true, message: "请选择归属行政组织", trigger: "blur" }],
position: [{ required: true, message: "请选择岗位", trigger: "blur" }], position: [{ required: true, message: "请选择岗位", trigger: "blur" }],
jobid:[{ required: true, message: "请选择职务", trigger: "blur" }], jobid: [{ required: true, message: "请选择职务", trigger: "blur" }],
jobleve:[{ required: true, message: "请选择职务等级", trigger: "blur" }], jobleve: [{ required: true, message: "请选择职务等级", trigger: "blur" }],
teamid:[{ required: true, message: "请选择班组", trigger: "blur" }], teamid: [{ required: true, message: "请选择班组", trigger: "blur" }],
ruleid:[{ required: true, message: "请选择排班类型", trigger: "blur" }], ruleid: [{ required: true, message: "请选择排班类型", trigger: "blur" }],
personInCharge:[{ required: true, message: "请选择是否为负责人", trigger: "blur" }] personInCharge: [{ required: true, message: "请选择是否为负责人", trigger: "blur" }],
}); });
/** /**
* 弹窗显示控制 * 弹窗显示控制
*/ */
const addshow = computed({ const addshow = computed({
get: () => props.editShow, get: () => props.editShow,
set: (val) => { set: (val) => {
emits("update:editShow", val); emits("update:editShow", val);
@ -71,143 +71,146 @@ const teamList = ref<teamClassCont[]>([])
const systemMenuTreeProps = { const systemMenuTreeProps = {
children: "child", children: "child",
label: "name", label: "name",
value:"id" value: "id",
} };
const propsdepartfuze ={ const propsdepartfuze = {
value: "id", value: "id",
label: "name", label: "name",
children: "child", children: "child",
multiple: true, multiple: true,
checkStrictly: true checkStrictly: true,
} };
/** /**
* 选中节点 * 选中节点
*/ */
const addOrgTreeNodeClick = (postData: orgInfo) => { const addOrgTreeNodeClick = (postData: orgInfo) => {
// console.log("",postData) // console.log("",postData)
getPostContNotSunPage({page:1,pagesize:10000,organization:postData.id?.toString()}) getPostContNotSunPage({
.then(({ data }) =>{ page: 1,
fatherPost.value = data.list pagesize: 10000,
}) organization: postData.id?.toString(),
} }).then(({ data }) => {
fatherPost.value = data.list;
});
};
/** /**
* 关闭弹窗 * 关闭弹窗
*/ */
function clostAddBoxJtnbgzjl(){ function clostAddBoxJtnbgzjl() {
emits("update:editShow", false); emits("update:editShow", false);
initJtwbgzjlData() initJtwbgzjlData();
} }
/** /**
* 初始化数据 * 初始化数据
*/ */
function initJtwbgzjlData(){ function initJtwbgzjlData() {
editUsOrgFormRef.value.resetFields(); editUsOrgFormRef.value.resetFields();
addLoading.value = false; addLoading.value = false;
editUsAboutOrg.id = "" editUsAboutOrg.id = "";
orgOptionsList.value?.splice(orgOptionsList.value.length); orgOptionsList.value?.splice(orgOptionsList.value.length);
} }
/** /**
* 获取行政组织数据 * 获取行政组织数据
*/ */
function haveOrgTreeInfo(){ function haveOrgTreeInfo() {
getOrgTreeList({}) getOrgTreeList({}).then(({ data }) => {
.then(({ data })=>{ orgOptionsList.value = data;
orgOptionsList.value = data });
})
} }
/** /**
* 获取班组数据 * 获取班组数据
*/ */
function haveTeamInfo(){ function haveTeamInfo() {
getTeamListCont({page:1,pagesize:10000}) getTeamListCont({ page: 1, pagesize: 10000 }).then(({ data }) => {
.then(({ data })=>{ teamContAry.value = data.list;
teamContAry.value = data.list });
})
} }
/** /**
* 获取职务列表 * 获取职务列表
*/ */
function getDutiesList(){ function getDutiesList() {
getDuitesList({page:1,pagesize:100000}) getDuitesList({ page: 1, pagesize: 100000 }).then(({ data }) => {
.then(( {data} )=>{
dutiesInfo.value = data.list; dutiesInfo.value = data.list;
}) });
} }
/** /**
* 获取排班类型 * 获取排班类型
*/ */
function getTeamClassList(){ function getTeamClassList() {
haveTeamTimeList({}) haveTeamTimeList({}).then((data) => {
.then(( data )=>{
teamList.value = data.data; teamList.value = data.data;
}) });
} }
/** /**
* 初始化岗位 * 初始化岗位
*/ */
function chushihuaPost(id: number){ function chushihuaPost(id: number) {
// editUsAboutOrg.position= 0 // editUsAboutOrg.position= 0
getPostContNotSunPage({page:1,pagesize:10000,organization:id?.toString()}) getPostContNotSunPage({ page: 1, pagesize: 10000, organization: id?.toString() }).then(
.then(({ data }) =>{ ({ data }) => {
fatherPost.value = data.list fatherPost.value = data.list;
}) }
);
} }
/** /**
* 监听数据 * 监听数据
*/ */
watch(() => props.editShow,() => { watch(
() => props.editShow,
if(props.editShow){ () => {
editUsAboutOrg.id = props.usercont.id.toString() if (props.editShow) {
editUsAboutOrg.id = props.usercont.id.toString();
// editUsAboutOrg.personInCharge = props.usercont.personincharge.toString() // editUsAboutOrg.personInCharge = props.usercont.personincharge.toString()
haveOrgTreeInfo(); haveOrgTreeInfo();
haveTeamInfo(); haveTeamInfo();
getDutiesList(); getDutiesList();
getTeamClassList(); getTeamClassList();
chushihuaPost(props.usercont.adminorg); chushihuaPost(props.usercont.adminorg);
// console.log("--2323232323->",editUsAboutOrg,props.usercont) console.log("监听数据--2323232323->", editUsAboutOrg, props.usercont);
editUsAboutOrg.orgid = props.usercont.adminorg //number;
editUsAboutOrg.position = props.usercont.position //number;
editUsAboutOrg.teamid = props.usercont.teamid //number;
editUsAboutOrg.jobid = props.usercont.jobid //number;
editUsAboutOrg.jobleve = props.usercont.jobleve //number;
editUsAboutOrg.ruleid = props.usercont.ruleid //string;
editUsAboutOrg.personInCharge = props.usercont.personincharge.toString() //number|string;
editUsAboutOrg.orgreslist = props.usercont.orgreslist //any;
editUsAboutOrg.resallorg = props.usercont.resallorg //any;
setPersonInCharge()
editUsAboutOrg.orgid = props.usercont.adminorg; //number;
editUsAboutOrg.position = props.usercont.position; //number;
editUsAboutOrg.teamid = props.usercont.teamid; //number;
editUsAboutOrg.jobid = props.usercont.jobid; //number;
editUsAboutOrg.jobleve = props.usercont.jobleve; //number;
editUsAboutOrg.ruleid = props.usercont.ruleid; //string;
editUsAboutOrg.personInCharge = props.usercont.personincharge.toString(); //number|string;
editUsAboutOrg.orgreslist = props.usercont.orgreslist; //any;
editUsAboutOrg.resallorg = props.usercont.resallorg; //any;
setPersonInCharge();
} }
})
function setPersonInCharge(){
if(editUsAboutOrg.personInCharge == 1 || editUsAboutOrg.personInCharge == "1"){
fuZefanWei.value = true
}else{
fuZefanWei.value = false
} }
);
function setPersonInCharge() {
if (editUsAboutOrg.personInCharge == 1 || editUsAboutOrg.personInCharge == "1") {
fuZefanWei.value = true;
} else {
fuZefanWei.value = false;
} }
/** }
/**
* 添加数据 * 添加数据
*/ */
function submitAddJtnbgzjl(){ function submitAddJtnbgzjl() {
addLoading.value = true; addLoading.value = true;
editUsOrgFormRef.value.validate((isValid: boolean) => { editUsOrgFormRef.value.validate((isValid: boolean) => {
if (isValid) { if (isValid) {
editUsAboutOrg.personInCharge = parseInt(editUsAboutOrg.personInCharge) editUsAboutOrg.personInCharge = parseInt(editUsAboutOrg.personInCharge);
editMyOrgUndertake(editUsAboutOrg) editMyOrgUndertake(editUsAboutOrg)
.then(() =>{ .then(() => {
ElMessage.success("编辑成功"); ElMessage.success("编辑成功");
clostAddBoxJtnbgzjl(); clostAddBoxJtnbgzjl();
emits('refreshcontdata',props.usercont); emits("refreshcontdata", props.usercont);
}) })
.finally(() =>{addLoading.value = false;}) .finally(() => {
}else{
addLoading.value = false; addLoading.value = false;
}
}); });
} else {
addLoading.value = false;
} }
});
}
</script> </script>
<template> <template>
<el-dialog <el-dialog
@ -216,7 +219,8 @@ function getTeamClassList(){
title="编辑行政组织" title="编辑行政组织"
append-to-body append-to-body
:before-close="clostAddBoxJtnbgzjl" :before-close="clostAddBoxJtnbgzjl"
> <el-form >
<el-form
ref="editUsOrgFormRef" ref="editUsOrgFormRef"
:model="editUsAboutOrg" :model="editUsAboutOrg"
:rules="editPwdRules" :rules="editPwdRules"
@ -237,7 +241,7 @@ function getTeamClassList(){
/> />
</el-form-item> </el-form-item>
<el-form-item label="岗位" prop="position"> <el-form-item label="岗位" prop="position">
<el-select v-model="editUsAboutOrg.position" clearable placeholder="请选择岗位" > <el-select v-model="editUsAboutOrg.position" clearable placeholder="请选择岗位">
<el-option <el-option
v-for="item in fatherPost" v-for="item in fatherPost"
:key="item.id" :key="item.id"
@ -248,7 +252,12 @@ function getTeamClassList(){
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="职务" prop="jobid"> <el-form-item label="职务" prop="jobid">
<el-select v-model="editUsAboutOrg.jobid" clearable filterable placeholder="请选择职务" > <el-select
v-model="editUsAboutOrg.jobid"
clearable
filterable
placeholder="请选择职务"
>
<el-option <el-option
v-for="item in dutiesInfo" v-for="item in dutiesInfo"
:key="item.id" :key="item.id"
@ -259,7 +268,7 @@ function getTeamClassList(){
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="职务等级" prop="jobleve"> <el-form-item label="职务等级" prop="jobleve">
<el-select v-model="editUsAboutOrg.jobleve" placeholder="请选择职务等级" > <el-select v-model="editUsAboutOrg.jobleve" placeholder="请选择职务等级">
<el-option <el-option
v-for="item in positiongrade" v-for="item in positiongrade"
:key="item.id" :key="item.id"
@ -269,7 +278,7 @@ function getTeamClassList(){
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="班组" prop="teamid"> <el-form-item label="班组" prop="teamid">
<el-select v-model="editUsAboutOrg.teamid" placeholder="请选择班组" > <el-select v-model="editUsAboutOrg.teamid" placeholder="请选择班组">
<el-option <el-option
v-for="item in teamContAry" v-for="item in teamContAry"
:key="item.id" :key="item.id"
@ -279,7 +288,7 @@ function getTeamClassList(){
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="排班类型" prop="ruleid"> <el-form-item label="排班类型" prop="ruleid">
<el-select v-model="editUsAboutOrg.ruleid" placeholder="请选择排班类型" > <el-select v-model="editUsAboutOrg.ruleid" placeholder="请选择排班类型">
<el-option <el-option
v-for="item in teamList" v-for="item in teamList"
:key="item.id" :key="item.id"
@ -300,18 +309,24 @@ function getTeamClassList(){
@change="setPersonInCharge" @change="setPersonInCharge"
/> />
</el-form-item> </el-form-item>
<el-form-item v-if="fuZefanWei" label="负责行政组织" prop="orgOptionsList" > <el-form-item v-if="fuZefanWei" label="负责行政组织" prop="orgOptionsList">
<el-cascader v-model="editUsAboutOrg.orgreslist" :options="orgOptionsList" :props="propsdepartfuze" clearable style="width:100%"></el-cascader> <el-cascader
v-model="editUsAboutOrg.orgreslist"
:options="orgOptionsList"
:props="propsdepartfuze"
clearable
style="width: 100%"
></el-cascader>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" :loading="addLoading" @click="submitAddJtnbgzjl" > </el-button> <el-button type="primary" :loading="addLoading" @click="submitAddJtnbgzjl"
> </el-button
>
<el-button @click="clostAddBoxJtnbgzjl"> </el-button> <el-button @click="clostAddBoxJtnbgzjl"> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped></style>
</style>

14
src/views/hr/archives/index.vue

@ -31,7 +31,7 @@ import { uploadUrl } from "@/api/DesignForm";
/** /**
* 引入页面 * 引入页面
*/ */
import ArchivesCont from "@/views/hr/archives/archivescont.vue"; import ArchivesContPage from "@/views/hr/archives/archivescont.vue";
import XingGeFengXi from "@/views/hr/archives/downpage/xingGeFengXi.vue"; import XingGeFengXi from "@/views/hr/archives/downpage/xingGeFengXi.vue";
import { ElScrollbar as ElScrollbarType } from "element-plus"; import { ElScrollbar as ElScrollbarType } from "element-plus";
@ -907,7 +907,7 @@ const gainTimeList = () => {
<el-table-column fixed="right" align="center" label="操作" width="100"> <el-table-column fixed="right" align="center" label="操作" width="100">
<template #default="scope"> <template #default="scope">
<el-button <el-button
v-hasPerm="['127710903461228544']" v-hasPerm="['275256219474604032']"
type="primary" type="primary"
link link
size="small" size="small"
@ -927,7 +927,7 @@ const gainTimeList = () => {
@pagination="getArchivesPage" @pagination="getArchivesPage"
/> />
</el-card> </el-card>
<ArchivesCont <ArchivesContPage
v-model:isShow="archivesBox" v-model:isShow="archivesBox"
:archivesdata="peoplecont" :archivesdata="peoplecont"
@updatemyconting="updateMyCont" @updatemyconting="updateMyCont"
@ -1229,7 +1229,11 @@ const gainTimeList = () => {
<span>考评人员成绩统计表</span> <span>考评人员成绩统计表</span>
</template> </template>
<el-row v-loading="excelLoading" element-loading-text="文档上传中,请稍候..."> <el-row
v-hasPerm="['288626950073757696']"
v-loading="excelLoading"
element-loading-text="文档上传中,请稍候..."
>
<el-col :span="24"> <el-col :span="24">
<el-form <el-form
:model="stafftempForm" :model="stafftempForm"
@ -1269,7 +1273,7 @@ const gainTimeList = () => {
</el-upload> </el-upload>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row v-hasPerm="['288626950073757696']">
<el-col :span="24"> <el-col :span="24">
<el-progress <el-progress
:text-inside="true" :text-inside="true"

7
src/views/sysworkflow/flow/flowDrawingBoard.vue

@ -493,7 +493,12 @@ const clickOpenOrClose = () => {
:is-form-flow="props.isFormFlow" :is-form-flow="props.isFormFlow"
:customer-form-key="props.customerFormKey" :customer-form-key="props.customerFormKey"
/> />
<copyerDrawer /> <copyerDrawer
:directormaxlevel="directorMaxLeveling"
:node-config="nodeConfig"
:is-form-flow="props.isFormFlow"
:customer-form-key="props.customerFormKey"
/>
<conditionDrawer <conditionDrawer
:is-form-flow="props.isFormFlow" :is-form-flow="props.isFormFlow"
:customer-form-key="props.customerFormKey" :customer-form-key="props.customerFormKey"

97
src/views/sysworkflow/flow/index.vue

@ -3,72 +3,75 @@
@ 时间: 2023-05-26 09:19:46 @ 时间: 2023-05-26 09:19:46
@ 备注: @ 备注:
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import FlowDrawingBoard from '@/views/sysworkflow/flow/flowDrawingBoard.vue' import FlowDrawingBoard from "@/views/sysworkflow/flow/flowDrawingBoard.vue";
// //
const flowcont = ref() const flowcont = ref();
const drawer = ref(false) const drawer = ref(false);
const drawerWidht = ref() const drawerWidht = ref();
const openfloaw = ()=>{ const openfloaw = () => {
drawerWidht.value = flowcont.value?.clientWidth drawerWidht.value = flowcont.value?.clientWidth;
// console.log("clientHeight--->",drawerWidht.value) // console.log("clientHeight--->",drawerWidht.value)
drawer.value = true drawer.value = true;
} };
const isFormFlow = ref(false) const isFormFlow = ref(false);
const customerFormKey = ref<string>() const customerFormKey = ref<string>();
const scrollContainer = ref<any>(null) const scrollContainer = ref<any>(null);
const fixedElement = ref<any>(null) const fixedElement = ref<any>(null);
const scrollToFixed = () =>{ const scrollToFixed = () => {
// console.log("scrollToFixed",scrollContainer.value?.offsetTop) // console.log("scrollToFixed",scrollContainer.value?.offsetTop)
// console.log("scrollToFixed",fixedElement.value?.offsetTop) // console.log("scrollToFixed",fixedElement.value?.offsetTop)
scrollContainer.value.scrollIntoView({ scrollContainer.value.scrollIntoView({
behavior: "smooth" behavior: "smooth",
}) });
scrollContainer.value.scrollTop = fixedElement.value?.offsetTop - scrollContainer.value?.offsetTop scrollContainer.value.scrollTop =
} fixedElement.value?.offsetTop - scrollContainer.value?.offsetTop;
};
</script> </script>
<template> <template>
<div ref="flowcont"> <div ref="flowcont">
<el-button type="primary" @click="openfloaw">添加</el-button> <el-button type="primary" @click="openfloaw">添加</el-button>
<FlowDrawingBoard v-model:open-drawer="drawer" :drawer-widht = "drawerWidht" :is-form-flow="isFormFlow" :customer-form-key="customerFormKey" /> <FlowDrawingBoard
v-model:open-drawer="drawer"
:drawer-widht="drawerWidht"
:is-form-flow="isFormFlow"
:customer-form-key="customerFormKey"
/>
<div ref="scrollContainer" style="height: 200px; overflow: auto;"> <div ref="scrollContainer" style="height: 200px; overflow: auto">
<!-- 这里是滚动内容 --> <!-- 这里是滚动内容 -->
<div ref="fixedElement">指定位置元素</div> <div ref="fixedElement">指定位置元素</div>
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
<br> <br />
</div> </div>
<button @click="scrollToFixed">滚动到指定位置</button> <button @click="scrollToFixed">滚动到指定位置</button>
</div> </div>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.canvas_body{ .canvas_body {
height: 100%; height: 100%;
width: inherit; width: inherit;
} }
</style> </style>

2
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue

@ -649,7 +649,7 @@ const simulateFlow = () => {
v-model:form-data="state.formData" v-model:form-data="state.formData"
:form-version="formVersion" :form-version="formVersion"
/> />
<copyerDrawer /> <copyerSend :is-form-flow="isFormFlow" />
<conditionDrawer :is-form-flow="isFormFlow" :customer-form-key="appPageKey" /> <conditionDrawer :is-form-flow="isFormFlow" :customer-form-key="appPageKey" />
</div> </div>
</div> </div>

278
src/views/sysworkflow/lowcodepage/lowCodeFormPage.vue

@ -3,37 +3,36 @@
@ 时间: 2024-03-09 08:58:23 @ 时间: 2024-03-09 08:58:23
@ 备注: 编辑表单页面 @ 备注: 编辑表单页面
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from "vue-router";
import { formStruct } from '@/api/DesignForm/types' import { formStruct } from "@/api/DesignForm/types";
import { customerFormConfig } from "@/api/DesignForm/type"; import { customerFormConfig } from "@/api/DesignForm/type";
import { getProductionMarkForm } from '@/api/DesignForm/requestapi' import { getProductionMarkForm } from "@/api/DesignForm/requestapi";
// import PageDesign from "@/views/sysworkflow/lowcodepage/pageDesign.vue" // import PageDesign from "@/views/sysworkflow/lowcodepage/pageDesign.vue"
import PageDesignEs from "@/views/sysworkflow/lowcodepage/pageDesignes.vue" import PageDesignEs from "@/views/sysworkflow/lowcodepage/pageDesignes.vue";
import WorkFlow from "@/views/sysworkflow/lowcodepage/workFlow.vue" import WorkFlow from "@/views/sysworkflow/lowcodepage/workFlow.vue";
import PageList from "@/views/sysworkflow/lowcodepage/pageList.vue" import PageList from "@/views/sysworkflow/lowcodepage/pageList.vue";
import SetUpPage from "@/views/sysworkflow/lowcodepage/setUpPage.vue" import SetUpPage from "@/views/sysworkflow/lowcodepage/setUpPage.vue";
const props = defineProps({ const props = defineProps({
drawerWith:{ drawerWith: {
type:Number, type: Number,
default:true default: true,
}, },
formKey:{ formKey: {
type:String, type: String,
default:"" default: "",
},
formGroupKey: {
type: String,
default: "",
}, },
formGroupKey:{
type:String,
default:""
}
}); });
const formConfigCont = reactive<customerFormConfig>({ const formConfigCont = reactive<customerFormConfig>({
formName:"", formName: "",
formlogo:"" formlogo: "",
}) });
const loading = ref(false) const loading = ref(false);
const pageDesignIsWrite = ref(true); const pageDesignIsWrite = ref(true);
const flowIsWrite = ref(true); const flowIsWrite = ref(true);
const emits = defineEmits(["refreshPage"]); const emits = defineEmits(["refreshPage"]);
@ -41,24 +40,24 @@ const drawerOpenOrClose = ref(true);
const tabsActive = ref(1); const tabsActive = ref(1);
const creetTabsActive = ref(1); const creetTabsActive = ref(1);
const route: any = useRoute().query || {} const route: any = useRoute().query || {};
const state = reactive<formStruct>({ const state = reactive<formStruct>({
formData: { formData: {
list: [], list: [],
form: { form: {
size: 'default', size: "default",
name:'', name: "",
formName: formConfigCont.formName formName: formConfigCont.formName,
}, },
config: { config: {
groupKey:props.formGroupKey groupKey: props.formGroupKey,
}, },
styles:{ styles: {
divStyle:{}, divStyle: {},
labelStyle:{}, labelStyle: {},
inputStyle:{} inputStyle: {},
}, },
purview:[] purview: [],
}, },
editor: {}, editor: {},
loading: false, loading: false,
@ -67,76 +66,76 @@ const state = reactive<formStruct>({
designType: route.type, // search designType: route.type, // search
formDict: {}, formDict: {},
formOtherData: { formOtherData: {
source: route.source || '', source: route.source || "",
formName: formConfigCont.formName formName: formConfigCont.formName,
} },
}) });
//ID //ID
const formKeyStr = computed({ const formKeyStr = computed({
get() { get() {
return props.formKey return props.formKey;
}, },
set(val: formStruct) { set(val: formStruct) {
emits('update:formKey', val) emits("update:formKey", val);
} },
}); });
//ID //ID
const formVersion = ref<string>("") const formVersion = ref<string>("");
const judgeFormIsEdit = (val:boolean,wval:boolean) => { const judgeFormIsEdit = (val: boolean, wval: boolean) => {
pageDesignIsWrite.value = val; pageDesignIsWrite.value = val;
flowIsWrite.value = wval flowIsWrite.value = wval;
} };
const handleClick = (tab: TabsPaneContext, event: Event) =>{ const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log("--->",creetTabsActive.value,tab.paneName, event) // console.log("--->",creetTabsActive.value,tab.paneName, event)
switch (tab.paneName) { switch (tab.paneName) {
case 2: case 2:
if (creetTabsActive.value != 2){ if (creetTabsActive.value != 2) {
if(PreOperation()){ if (PreOperation()) {
creetTabsActive.value = tab.paneName creetTabsActive.value = tab.paneName;
} }
} }
break; break;
case 3: case 3:
if (creetTabsActive.value != 3){ if (creetTabsActive.value != 3) {
if(PreOperation()){ if (PreOperation()) {
creetTabsActive.value = tab.paneName creetTabsActive.value = tab.paneName;
} }
} }
break; break;
case 4: case 4:
if (creetTabsActive.value != 4){ if (creetTabsActive.value != 4) {
if(PreOperation()){ if (PreOperation()) {
creetTabsActive.value = tab.paneName creetTabsActive.value = tab.paneName;
} }
} }
break; break;
default: default:
tabsActive.value = 1 tabsActive.value = 1;
creetTabsActive.value = 1 creetTabsActive.value = 1;
break; break;
} }
} };
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-03-09 13:42:24 @ 时间: 2024-03-09 13:42:24
@ 功能: 判断tabs要执行得前置操作 @ 功能: 判断tabs要执行得前置操作
*/ */
const PreOperation = () =>{ const PreOperation = () => {
switch (creetTabsActive.value) { switch (creetTabsActive.value) {
case 2: case 2:
if(flowIsWrite.value){ if (flowIsWrite.value) {
ElMessageBox.alert('你设置的流程还未保存!', '温馨提示!', { ElMessageBox.alert("你设置的流程还未保存!", "温馨提示!", {
confirmButtonText: 'OK', confirmButtonText: "OK",
callback: (action: Action) => { callback: (action: Action) => {
tabsActive.value = 2 tabsActive.value = 2;
creetTabsActive.value = 2 creetTabsActive.value = 2;
} },
}); });
flowIsWrite.value = true flowIsWrite.value = true;
}else{ } else {
creetTabsActive.value = tabsActive.value creetTabsActive.value = tabsActive.value;
// console.log("-1-->",tabsActive.value,creetTabsActive.value) // console.log("-1-->",tabsActive.value,creetTabsActive.value)
} }
return true; return true;
@ -148,93 +147,126 @@ const PreOperation = () =>{
return true; return true;
break; break;
default: default:
if(pageDesignIsWrite.value){ if (pageDesignIsWrite.value) {
ElMessageBox.alert('你设置的表单还未保存!', '温馨提示!', { ElMessageBox.alert("你设置的表单还未保存!", "温馨提示!", {
confirmButtonText: 'OK', confirmButtonText: "OK",
callback: (action: Action) => { callback: (action: Action) => {
tabsActive.value = 1 tabsActive.value = 1;
creetTabsActive.value = 1 creetTabsActive.value = 1;
} },
}); });
pageDesignIsWrite.value = true pageDesignIsWrite.value = true;
}else{ } else {
creetTabsActive.value = tabsActive.value creetTabsActive.value = tabsActive.value;
tabsActive.value = 1 tabsActive.value = 1;
} }
return true; return true;
break; break;
} }
} };
const judgeFlowIsEdit = (val:boolean) => { const judgeFlowIsEdit = (val: boolean) => {
flowIsWrite.value = val; flowIsWrite.value = val;
// creetTabsActive.value = 2 // creetTabsActive.value = 2
} };
const closeFormPage = () => { const closeFormPage = () => {
emits("refreshPage","formPage"); emits("refreshPage", "formPage");
};
}
onBeforeMount(() => { onBeforeMount(() => {
getProductionMarkForm() getProductionMarkForm()
.then(({data})=>{ .then(({ data }) => {
formConfigCont.formlogo = data.formlogo formConfigCont.formlogo = data.formlogo;
formConfigCont.formName = data.formname formConfigCont.formName = data.formname;
state.formData.form.name = data.formlogo state.formData.form.name = data.formlogo;
state.formData.form.formName = data.formname state.formData.form.formName = data.formname;
state.formOtherData.formName = data.formname state.formOtherData.formName = data.formname;
}) })
.finally(()=>{ .finally(() => {});
});
})
})
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ 时间: 2024-03-11 08:44:43 @ 时间: 2024-03-11 08:44:43
@ 功能: 执行下一个窗口 @ 功能: 执行下一个窗口
*/ */
const runNextWindows = (val:number) => { const runNextWindows = (val: number) => {
creetTabsActive.value = val creetTabsActive.value = val;
tabsActive.value = val tabsActive.value = val;
} };
onMounted(()=>{ onMounted(() => {
// formKeyStr.value = "13" // formKeyStr.value = "13"
}) });
</script> </script>
<template> <template>
<div class="drawerClass"> <div class="drawerClass">
<el-drawer
<el-drawer v-model="drawerOpenOrClose" title="设置/编辑自定义表单" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith"> v-model="drawerOpenOrClose"
<el-tabs v-model="tabsActive" @tab-click="handleClick" :stretch="true" class="tabsMain"> title="设置/编辑自定义表单"
<el-tab-pane label="① 页面设计" :name="1"> :with-header="false"
</el-tab-pane> :close-on-click-modal="false"
<el-tab-pane label="② 流程设计" :name="2"> :close-on-press-escape="false"
</el-tab-pane> :destroy-on-close="true"
<el-tab-pane label="③ 列表设计" :name="3"> :size="props.drawerWith"
</el-tab-pane> >
<el-tab-pane label="④ 页面设置" :name="4"> <el-tabs
</el-tab-pane> v-model="tabsActive"
@tab-click="handleClick"
:stretch="true"
class="tabsMain"
>
<el-tab-pane label="① 页面设计" :name="1"> </el-tab-pane>
<el-tab-pane label="② 流程设计" :name="2"> </el-tab-pane>
<el-tab-pane label="③ 列表设计" :name="3"> </el-tab-pane>
<el-tab-pane label="④ 页面设置" :name="4"> </el-tab-pane>
</el-tabs> </el-tabs>
<PageDesignEs v-if="tabsActive==1" v-model:state="state" v-model:form-key="formKeyStr" v-model:form-version="formVersion" :formconfigcont="formConfigCont" @judgeFormIsEdit="judgeFormIsEdit" @runNextWindows="runNextWindows" @closeFormPage="closeFormPage" /> <PageDesignEs
<WorkFlow v-if="tabsActive==2" v-model:state="state" v-model:form-key="formKeyStr" v-model:form-version="formVersion" @judgeFlowIsEdit="judgeFlowIsEdit" @runNextWindows="runNextWindows" @closeFormPage="closeFormPage" /> v-if="tabsActive == 1"
<PageList v-if="tabsActive==3" v-model:state="state" v-model:form-key="formKeyStr" v-model:form-version="formVersion" :tabs-active="tabsActive" @closeFormPage="closeFormPage" /> v-model:state="state"
<SetUpPage v-if="tabsActive==4" v-model:state="state" v-model:form-key="formKeyStr" v-model:form-version="formVersion" @closeFormPage="closeFormPage" /> v-model:form-key="formKeyStr"
v-model:form-version="formVersion"
:formconfigcont="formConfigCont"
@judgeFormIsEdit="judgeFormIsEdit"
@runNextWindows="runNextWindows"
@closeFormPage="closeFormPage"
/>
<WorkFlow
v-if="tabsActive == 2"
v-model:state="state"
v-model:form-key="formKeyStr"
v-model:form-version="formVersion"
@judgeFlowIsEdit="judgeFlowIsEdit"
@runNextWindows="runNextWindows"
@closeFormPage="closeFormPage"
/>
<PageList
v-if="tabsActive == 3"
v-model:state="state"
v-model:form-key="formKeyStr"
v-model:form-version="formVersion"
:tabs-active="tabsActive"
@closeFormPage="closeFormPage"
/>
<SetUpPage
v-if="tabsActive == 4"
v-model:state="state"
v-model:form-key="formKeyStr"
v-model:form-version="formVersion"
@closeFormPage="closeFormPage"
/>
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.tabsMain{ .tabsMain {
::v-deep .el-tabs__header{ ::v-deep .el-tabs__header {
margin: 0px; margin: 0px;
} }
::v-deep .el-tabs__nav-scroll{ ::v-deep .el-tabs__nav-scroll {
width: 50%!important; width: 50% !important;
margin: 0 auto!important; margin: 0 auto !important;
} }
::v-deep .el-drawer__body{ ::v-deep .el-drawer__body {
padding: 0; padding: 0;
} }
} }
</style> </style>

2
src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

@ -183,7 +183,7 @@ const initLoadData = () => {
if (props.pickAppMenu.type != 1) { if (props.pickAppMenu.type != 1) {
appFormTitle.value = props.pickAppMenu.label; appFormTitle.value = props.pickAppMenu.label;
gainAppPageInfo({ id: props.pickAppMenu.id }).then((data) => { gainAppPageInfo({ id: props.pickAppMenu.id }).then((data) => {
// console.log("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",data) // console.log("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", data);
appInitData.value = data.data; appInitData.value = data.data;
// console.log("---!",appInitData.value) // console.log("---!",appInitData.value)
mastesformjson.value = data.data.appForm.mastesformjson; mastesformjson.value = data.data.appForm.mastesformjson;

9
src/views/sysworkflow/lowcodepage/workFlow.vue

@ -569,7 +569,14 @@ onMounted(() => {
v-model:form-data="state.formData" v-model:form-data="state.formData"
:form-version="formVersion" :form-version="formVersion"
/> />
<copyerDrawer /> <copyerDrawer
:directormaxlevel="directorMaxLeveling"
:node-config="nodeConfig"
:is-form-flow="isFormFlow"
:customer-form-key="formKeyVal"
v-model:form-data="state.formData"
:form-version="formVersion"
/>
<conditionDrawer :is-form-flow="isFormFlow" :customer-form-key="formKeyVal" /> <conditionDrawer :is-form-flow="isFormFlow" :customer-form-key="formKeyVal" />
</el-col> </el-col>
</el-row> </el-row>

Loading…
Cancel
Save