This commit is contained in:
2025-09-26 16:08:38 +08:00
parent 5208ce4fde
commit 39177fbd7d
10 changed files with 220 additions and 373 deletions

View File

@ -1,17 +1,24 @@
<template> <template>
<div style="width: 100%"> <div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''">
<!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据--> <!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据-->
<el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" <el-table
@current-change="handleCurrentChange" @row-click="singleElection" :row-key="getConfiger.rowKey" ref="multipleTableRef"
:border="getConfiger.border" :default-expand-all="getConfiger.defaultExpandAll" :stripe="getConfiger.stripe" :data="tableData"
:height="tableHeight" v-loading="tableConfiger.loading" :lazy="getConfiger.lazy" :load="load" @selection-change="handleSelectionChange"
:tree-props="treePros" style="width: 100%" :header-cell-class-name="() => 'HeadBgColor'" :row-key="getConfiger.rowKey"
:border="getConfiger.border"
:default-expand-all="getConfiger.defaultExpandAll"
:stripe="getConfiger.stripe"
:height="tableHeight"
v-loading="tableConfiger.loading"
:lazy="getConfiger.lazy"
:load="load"
:tree-props="treePros"
style="width: 100%"
:header-cell-class-name="() => 'HeadBgColor'"
:highlight-current-row="getConfiger.showSelectType === 'radio'" :highlight-current-row="getConfiger.showSelectType === 'radio'"
:row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }"> :row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }">
<el-table-column type="selection" width="55" v-if="getConfiger.showSelectType === 'checkBox'" /> <el-table-column style="width: 55px" type="selection" width="55" v-if="getConfiger.showSelectType" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''" />
<el-table-column width="55" v-else-if="getConfiger.showSelectType === 'radio'" #default="{ row }">
<el-radio class="radio" v-model="getConfiger.radioChoose" :label="row[getConfiger.rowKey]">&nbsp;</el-radio>
</el-table-column>
<el-table-column type="index" label="序号" v-if="getConfiger.showIndex" width="60" :align="getConfiger?.align" /> <el-table-column type="index" label="序号" v-if="getConfiger.showIndex" width="60" :align="getConfiger?.align" />
<el-table-column v-for="(item, index) in tableColumn" :align="getConfiger?.align" :prop="item.prop" :key="index" <el-table-column v-for="(item, index) in tableColumn" :align="getConfiger?.align" :prop="item.prop" :key="index"
:label="item.label" :width="item.width" style="width: 100%; font-size: 14px" :label="item.label" :width="item.width" style="width: 100%; font-size: 14px"
@ -25,11 +32,12 @@
{{ row[item.prop] }} {{ row[item.prop] }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 操作 --> <!-- 操作 -->
<el-table-column v-if="getConfiger.haveControls" :fixed="fixed" :label="getConfiger.controls" <el-table-column v-if="getConfiger.haveControls" :fixed="fixed" :label="getConfiger.controls"
:width="controlsWidth" :align="getConfiger?.align"> :width="controlsWidth" :align="getConfiger?.align">
<template #default="scope"> <template #default="scope">
<slot name="controls" v-bind="scope" :index="scope.$index"></slot> <slot name="controls" v-bind="scope"></slot>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -58,7 +66,7 @@ const props = defineProps({
default: 180 default: 180
}, },
tableHeight: { tableHeight: {
type: Number type: Number || String
}, },
treePros: { treePros: {
type: Object, type: Object,
@ -95,8 +103,6 @@ let getConfiger = reactive({
}); });
watchEffect(() => { watchEffect(() => {
getConfiger = { ...getConfiger, ...props.tableConfiger }; getConfiger = { ...getConfiger, ...props.tableConfiger };
console.log(getConfiger,'getConfiger');
setDefaultChoose(); setDefaultChoose();
}); });
onMounted(() => { onMounted(() => {
@ -104,19 +110,16 @@ onMounted(() => {
}); });
// 可选的时候选择的数据 // 可选的时候选择的数据
const handleSelectionChange = (val) => { const handleSelectionChange = (val) => {
emit("chooseData", val); if (getConfiger.showSelectType === 'radio' && val.length > 1) {
}; let del_row = val.shift();
// 单选的时候选择的数据 multipleTableRef.value.toggleRowSelection(del_row, false);
const handleCurrentChange = (val) => {
currentRow.value = val; currentRow.value = val;
emit("chooseData", val); emit("chooseData", val);
}; } else {
const singleElection = (val) => {
if (getConfiger.showSelectType === "radio") {
getConfiger.radioChoose = val[getConfiger.rowKey];
emit("chooseData", val); emit("chooseData", val);
} }
}; };
// 懒加载数据的方法 // 懒加载数据的方法
const load = (date, treeNode, resolve) => { const load = (date, treeNode, resolve) => {
setTimeout(() => { setTimeout(() => {
@ -140,29 +143,27 @@ const load = (date, treeNode, resolve) => {
function setDefaultChoose() { function setDefaultChoose() {
nextTick(() => { nextTick(() => {
// 多选的默认选中 // 多选的默认选中
if ( if (props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "checkBox") {
props.tableConfiger.defaultSelectKeys?.length > 0 &&
props.tableConfiger.showSelectType === "checkBox"
) {
props.tableData.forEach((item) => { props.tableData.forEach((item) => {
if ( if (props.tableConfiger.defaultSelectKeys.findIndex((v) => v === item[props.tableConfiger.rowKey]) > -1) {
props.tableConfiger.defaultSelectKeys.findIndex(
(v) => v === item[props.tableConfiger.rowKey]
) > -1
) {
multipleTableRef.value.toggleRowSelection(item, true); multipleTableRef.value.toggleRowSelection(item, true);
} }
}); });
// 单选的默认选中 // 单选的默认选中
} else if ( } else if (props.tableConfiger.defaultSelectKeys && props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "radio") {
props.tableConfiger.defaultSelectKeys &&
props.tableConfiger.defaultSelectKeys?.length > 0 &&
props.tableConfiger.showSelectType === "radio"
) {
getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0]; getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0];
} }
}); });
} }
</script> </script>
<style lang="scss">
<style lang="scss"></style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style> </style>

View File

@ -37,7 +37,6 @@ const router = useRouter();
onMounted(() => { onMounted(() => {
deptName.value = localStorage.getItem("deptId") ? JSON.parse(localStorage.getItem("deptId"))[0].deptName : '' deptName.value = localStorage.getItem("deptId") ? JSON.parse(localStorage.getItem("deptId"))[0].deptName : ''
}) })
const active = ref(""); const active = ref("");
onMounted(() => { onMounted(() => {
//登陆用户信息 //登陆用户信息

View File

@ -9,12 +9,6 @@ import display from './modules/display';
import getters from './getters'; import getters from './getters';
export default createStore({ export default createStore({
// state: {
// },
// mutations: {
// },
// actions: {
// },
getters, getters,
modules: { modules: {
user, user,

View File

@ -1,32 +1,10 @@
import { import {login,getUserInfo,getKaptcha,refreshToken,loginOut,Fzlogin } from "@/api/sys";
login, import { unifiedLogin } from "@/api/user-manage";
getUserInfo,
getKaptcha,
refreshToken,
loginOut,
Fzlogin
} from "@/api/sys";
import {
unifiedLogin
} from "@/api/user-manage";
import Base64 from "base-64"; import Base64 from "base-64";
import { import { setItem, getItem, removeAllItem } from "@/utils/storage";
setItem, import { TOKEN } from "@/constant";
getItem, import router, { resetRouter } from "@/router";
removeAllItem import { setTimeStamp } from "@/utils/auth";
} from "@/utils/storage";
import {
TOKEN
} from "@/constant";
import router, {
resetRouter
} from "@/router";
import {
setTimeStamp
} from "@/utils/auth";
import {
TAGS_VIEW
} from "@/constant/index.js";
export default { export default {
namespaced: true, namespaced: true,
state: () => ({ state: () => ({
@ -84,18 +62,9 @@ export default {
*登录请求动作 *登录请求动作
*/ */
login(ctx, userInfo) { login(ctx, userInfo) {
const { const { userName, password, kaptcha } = userInfo;
userName,
password,
kaptcha
} = userInfo;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login({ login({ userName, password: Base64.encode(password), kaptcha }).then((data) => {
userName,
password: Base64.encode(password),
kaptcha
})
.then((data) => {
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);
@ -110,10 +79,7 @@ export default {
setItem("idEntityCard", data.idEntityCard); setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", { this.commit("user/setUserInfo", {
token: data.jwtToken, token: data.jwtToken,
permission: { permission: { buttonPermission: ["removeTest", "viewTest"],menus: data.menuCodeSet },
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList, menuList: data.menuList,
deptList: data.deptList deptList: data.deptList
}); });

View File

@ -15,9 +15,6 @@
</el-form-item> </el-form-item>
<el-form-item prop="password1"> <el-form-item prop="password1">
<!-- <span class="svg-container">
<svg-icon icon="password" />
</span> -->
<el-input placeholder="请输入密码" name="password" :type="passwordType" v-model="loginForm.password"> <el-input placeholder="请输入密码" name="password" :type="passwordType" v-model="loginForm.password">
<template #prepend> <template #prepend>
<span class="svg-container"> <span class="svg-container">
@ -48,8 +45,7 @@
<!---登录按钮--> <!---登录按钮-->
<el-form-item style="height: 49px" v-if="!loginDialog"> <el-form-item style="height: 49px" v-if="!loginDialog">
<el-button @click="handleLogin" type="primary" style="width: 520px; height: 49px" :loading="loading" <el-button @click="handleLogin" type="primary" style="width: 520px; height: 49px" :loading="loading" native-type="submit">登录</el-button>
native-type="submit">登录</el-button>
</el-form-item> </el-form-item>
<el-form-item class="choosedept-wrap" v-if="loginDialog"> <el-form-item class="choosedept-wrap" v-if="loginDialog">
@ -68,6 +64,7 @@ export default {
}; };
</script> </script>
<script setup> <script setup>
import { qcckPost } from "@/api/qcckApi.js";
import { setItem } from "@/utils/storage"; import { setItem } from "@/utils/storage";
import { ElNotification } from "element-plus"; import { ElNotification } from "element-plus";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
@ -100,17 +97,12 @@ const loginRules = ref({
kaptcha: [{ required: true, trigger: "blur", message: "验证码为必填项" }] kaptcha: [{ required: true, trigger: "blur", message: "验证码为必填项" }]
}); });
const handleClose = () => { };
const refreshToken = (e) => { const refreshToken = (e) => {
store store.dispatch("user/refreshToken", { deptId: e, jwtToken: authorization.value }).then((res) => {
.dispatch("user/refreshToken", { deptId: e, jwtToken: authorization.value })
.then((res) => {
loading.value = false; loading.value = false;
store.commit("user/setDeptId", e); store.commit("user/setDeptId", e);
// window.location.href = '/'// 登录后操作
router.push("/"); router.push("/");
}) }).catch(() => {
.catch(() => {
loading.value = false; loading.value = false;
}); });
}; };
@ -131,41 +123,38 @@ const router = useRouter();
const handleLogin = () => { const handleLogin = () => {
loginFromRef.value.validate((valid) => { loginFromRef.value.validate((valid) => {
if (!valid) return false; if (!valid) return false;
// setItem("token", "1255555888");
// setItem("isOatuh", 0);
// router.push("/");
loading.value = true; loading.value = true;
store store.dispatch("user/login", loginForm.value).then((res) => {
.dispatch("user/login", loginForm.value)
.then((res) => {
loading.value = false; loading.value = false;
// 登录后操作;
if (res.deptList.length === 1) { if (res.deptList.length === 1) {
window.location.href = "/"; getSfzhByGsid(res.idEntityCard)
} else { } else {
deptList.value = [...res.deptList]; deptList.value = [...res.deptList];
loginDialog.value = true; loginDialog.value = true;
authorization.value = res.jwtToken; authorization.value = res.jwtToken;
ElNotification({ ElNotification({ title: "提示", message: "请选择部门", duration: 3000});
title: "提示",
message: "请选择部门",
duration: 3000
});
} }
}) }).catch(() => {
.catch(() => {
loading.value = false; loading.value = false;
}); });
}); });
}; };
const logout = () => { const getSfzhByGsid = (sfzh) => {
qcckPost({ sfzh }, "/mosty-base/baxx/cyry/queryBySfzh").then(res=>{
if(!res) {
ElNotification({ title: "提示", message: "无访问权限", duration: 3000});
store.dispatch("user/logout"); store.dispatch("user/logout");
}; }else{
let obj = { sfzh:res.sfzh , xm:res.xm , pxgs:res.pxgs , pxgsid:res.pxgsid }
setItem("userInfo", JSON.stringify(obj));
window.location.href = "/";
}
})
}
onMounted(() => { }); onMounted(() => { });
const getKaptchaImg = () => { const getKaptchaImg = () => {
const res = const res = `${process.env.VUE_APP_GATEWAY_BASE_URL}/mosty-base/kaptcha?date=` + new Date();
`${process.env.VUE_APP_GATEWAY_BASE_URL}/mosty-base/kaptcha?date=` +
new Date();
kaptchaUrl.value = res; kaptchaUrl.value = res;
}; };
</script> </script>

View File

@ -18,40 +18,25 @@
</template> </template>
<script setup> <script setup>
import { ref, computed, reactive, getCurrentInstance } from 'vue' import * as rule from "@/utils/rules.js";
import { ref, reactive, getCurrentInstance } from 'vue'
import { qcckPost } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX") const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX")
const title = ref('新增培训人员') const title = ref('新增培训人员')
const loading = ref(false) const loading = ref(false)
const disabled = ref(false) const disabled = ref(false)
const FormRef = ref(null) const FormRef = ref(null)
const props = defineProps({ const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
dic: { dic: {
type: Object, type: Object,
default: () => ({}) default: () => ({})
} }
}) })
const formData = ref({})
const emits = defineEmits(['update:modelValue', 'refresh']) const dialogVisible = ref(false)
const emits = defineEmits(['refresh'])
const dialogVisible = computed({
get() {
return props.modelValue
},
set(val) {
emits('update:modelValue', val)
}
})
const formList = reactive([ const formList = reactive([
[ [
{ label: "姓名", prop: "xm", type: "input" }, { label: "姓名", prop: "xm", type: "input" },
@ -74,80 +59,34 @@ const formList = reactive([
{ label: "无犯罪记录证明", prop: "wfzzmjl", type: "upload", limit: 1 }, { label: "无犯罪记录证明", prop: "wfzzmjl", type: "upload", limit: 1 },
] ]
]) ])
const rules = { const rules = {
ryzpzm: [{ required: true, message: "请上传身份证正面", trigger: "change" }], ryzpzm: [{ required: true, message: "请上传身份证正面", trigger: "change" }],
ryzpfm: [{ required: true, message: "请上传身份证反面", trigger: "change" }], ryzpfm: [{ required: true, message: "请上传身份证反面", trigger: "change" }],
tjbg: [{ required: true, message: "请上传体检报告", trigger: "change" }], tjbg: [{ required: true, message: "请上传体检报告", trigger: "change" }],
wfzzmjl: [{ required: true, message: "请上传无犯罪记录证明", trigger: "change" }], wfzzmjl: [{ required: true, message: "请上传无犯罪记录证明", trigger: "change" }],
xm: [{ required: true, message: "请输入姓名", trigger: "change" }], xm: [{ required: true, message: "请输入姓名", trigger: "change" }],
zjhm: [ ...rule.phoneRule({ validator: true,message: "请输入联系电话",require: true }, "lxdh"), // 是否必填 是否进行校验`
{ required: true, message: "请输入证件号码", trigger: "change" }, ...rule.identityCardRule({ validator: true,message: "请输入身份证号" ,require: true}, "zjhm"), // 是否必填 是否进行校验
{
validator: (rule, value, callback) => {
if (!value) {
callback()
} else {
const reg = /^(\d{15}|\d{17}[\dXx])$/;
if (!reg.test(value)) {
callback(new Error("请输入正确的身份证号码"))
} else {
callback()
}
}
}
}
],
lxdh: [
{ required: true, message: "请输入联系电话", trigger: "change" },
{
validator: (rule, value, callback) => {
if (!value) {
callback()
} else {
const reg = /^1[34578]\d{9}$/
if (!reg.test(value)) {
callback(new Error("请输入正确的手机号"))
} else {
callback()
}
}
}
}
],
jzdz: [{ required: true, message: "请输入居住地址", trigger: "change" }], jzdz: [{ required: true, message: "请输入居住地址", trigger: "change" }],
rzsj: [{ required: true, message: "请选择入职时间", trigger: "change" }], rzsj: [{ required: true, message: "请选择入职时间", trigger: "change" }],
pxgs: [{ required: true, message: "请选择所属保安公司", trigger: "change" }], pxgs: [{ required: true, message: "请选择所属保安公司", trigger: "change" }],
gw: [{ required: true, message: "请输入岗位", trigger: "change" }], gw: [{ required: true, message: "请输入岗位", trigger: "change" }],
} }
const formData = ref({})
const close = () => { const close = () => {
FormRef.value?.reset() FormRef.value?.reset()
dialogVisible.value = false dialogVisible.value = false;
} }
const open = (row = {}, type = 'add') => { const open = (row = {}, type = 'add') => {
disabled.value = false
dialogVisible.value = true
const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl']; const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl'];
fieldsToSplit.forEach(field => { fieldsToSplit.forEach(field => {
row[field] = typeof row[field] === 'string' row[field] = typeof row[field] === 'string' ? row[field].split(',') : row[field];
? row[field].split(',')
: row[field];
}); });
formData.value = { ...row } formData.value = { ...row }
if (type === 'add') { title.value = type === 'add' ? '新增申请人员' : (type === 'upload' ? '上传资料' : '查看详情')
title.value = '新增申请人员' disabled.value = title.value === '查看详情' ? true : false;
} else if (type === 'upload') { dialogVisible.value = true;
title.value = '上传资料'
} else {
disabled.value = true
title.value = '查看详情'
}
} }
// 新增、编辑 // 新增、编辑
@ -155,15 +94,9 @@ const save = () => {
FormRef.value.submit(() => { FormRef.value.submit(() => {
loading.value = true; loading.value = true;
const url = !formData.value?.id ? `/mosty-base/baxx/basq/add` : `/mosty-base/baxx/basq/edit`; const url = !formData.value?.id ? `/mosty-base/baxx/basq/add` : `/mosty-base/baxx/basq/edit`;
const params = { ...formData.value } const params = { ...formData.value }
const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl']; const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl'];
fieldsToSplit.forEach(field => { fieldsToSplit.forEach(field => { params[field] = params[field] ? params[field].join(',') : ''; });
params[field] = params[field]
? params[field].join(',')
: '';
});
qcckPost(params, url).then(() => { qcckPost(params, url).then(() => {
loading.value = false; loading.value = false;
proxy.$message.success("保存成功"); proxy.$message.success("保存成功");

View File

@ -1,82 +1,101 @@
<template> <template>
<el-dialog class="dialogWerapper" width="30%" v-model="modelValue" :title="title" @close="handleClose"> <el-dialog class="dialogWerapper" width="80%" v-model="visibleDialog" title="选择公司" @close="handleClose">
<form-message ref="FormRef" :disabled="disabled" v-model="formData" :rules="rules" :formList="formList" /> <div>
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
</MyTable>
</div>
<template #footer> <template #footer>
<el-button type="primary" v-if="!disabled" :loading="loading" @click="handleSubmit">确定</el-button> <div class="flex just-center">
<el-button type="primary" :loading="loading" @click="handleSubmit">确定</el-button>
<el-button @click="handleClose">取消</el-button> <el-button @click="handleClose">取消</el-button>
</div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import { computed, ref, reactive, getCurrentInstance } from 'vue'; import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from '@/components/aboutTable/FormMessage.vue' import { ref, reactive,getCurrentInstance } from 'vue';
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
const emits = defineEmits(['refresh']);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BAXX_DWLX } = proxy.$dict("D_BAXX_DWLX") const visibleDialog = ref(false);
const props = defineProps({ const pageData = reactive({
modelValue: { tableData: [],
type: Boolean, keyCount: 0,
default: false tableConfiger: {
rowHieght: 61,
showSelectType: "radio",
loading: false,
haveControls:false
}, },
}) tableHeight:500,
pageConfiger: {
const emits = defineEmits(['update:modelValue', 'refresh']) pageSize: 20,
pageCurrent: 1
const visible = computed({
get() {
return props.modelValue
}, },
set(val) { controlsWidth: 180,
emits('update:modelValue', val) tableColumn: [
} { label: "单位名称", prop: "dwmc" },
}) { label: "信用代码", prop: "xydm" },
{ label: "场所名称", prop: "csmc" },
{ label: "场所电话", prop: "csLxdh" }
]
});
const title = ref('选择培训公司')
const loading = ref(false)
const disabled = ref(false)
const FormRef = ref(null)
const formData = ref({}) const formData = ref({})
const loading = ref(false)
const formList = reactive([
[
{ label: "培训公司", prop: "pxgs", type: "select", options: D_BAXX_DWLX },
],
])
const rules = {
pxgs: [{ required: true, message: "请选择培训公司", trigger: "change" }],
}
const open = (row = {}, type = 'updata') => {
visible.value = true
disabled.value = false
formData.value = { ...row }
}
const handleClose = () => { const handleClose = () => {
FormRef.value?.reset() formData.value = {};
visible.value = false visibleDialog.value = false;
}
const chooseData = (row) => {
formData.value.pxgsdm = row[0].id;
formData.value.pxgsid = row[0].id;
formData.value.pxgs = row[0].dwmc;
} }
const handleSubmit = async () => { const handleSubmit = async () => {
try { if(!formData.value.pxgsid) return proxy.$message.error('请选择公司');
loading.value = true loading.value = true;
await FormRef.value.submit(async () => { let data = { ...formData.value }
await qcckPost({ ...formData.value }, `/mosty-base/baxx/basq/edit`) data.sfzh = data.zjhm;
await qcckPost(data, `/mosty-base/baxx/basq/edit`)
await qcckPost(data, `/mosty-base/baxx/pxry/add`)
loading.value = false
proxy.$message.success('培训公司保存成功') proxy.$message.success('培训公司保存成功')
emits('refresh') emits('refresh')
visible.value = false handleClose()
})
} catch (error) {
console.log(error)
proxy.$message.error('培训公司保存失败')
} finally {
loading.value = false
}
} }
defineExpose({ open }) function open(row) {
pageData.keyCount++;
formData.value = row;
visibleDialog.value = true;
getList();
}
function getList () {
pageData.tableConfiger.loading = true;
qcckPost({ }, "/mosty-base/baxx/dwgl/list").then((res) => {
let arr = res || []
pageData.tableData = arr.filter(item => item.type == '02')
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
}
defineExpose({
open
})
</script> </script>

View File

@ -19,14 +19,14 @@
{{ row?.sfpx === '01' ? `` : `` }} {{ row?.sfpx === '01' ? `` : `` }}
</template> </template>
<template #gw="{ row }"> <template #gw="{ row }">
<DictTag :value="row.gw" :options="D_BAXX_GWLX" /> <DictTag :value="row.gw" :tag="false" :options="D_BAXX_GWLX" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="success" @click="addEdit('upload', row)">上传资料</el-link> <el-link type="success" @click="addEdit('upload', row)">上传资料</el-link>
<el-link type="danger" @click="handleDelete([row.id])">删除</el-link> <el-link type="danger" @click="handleDelete([row.id])">删除</el-link>
<el-link type="warning" @click="addEdit('view', row)">详情</el-link> <el-link type="warning" @click="addEdit('view', row)">详情</el-link>
<el-link type="primary" @click="addEdit('select', row)">提交培训公司</el-link> <el-link type="primary" @click="addEdit('select', row)" v-if="!row.pxgsdm">提交培训公司</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@ -34,10 +34,8 @@
total: pageData.total total: pageData.total
}"></Pages> }"></Pages>
</div> </div>
<add-trainer-dialog v-model="isVisible" ref="trainerRef" @refresh="getList" /> <add-trainer-dialog v-model="isVisible" ref="trainerRef" @refresh="getList" />
<select-ttaning-dialog ref="selectTtaningRef" v-model="dialogVisible" @refresh="getList" /> <select-ttaning-dialog ref="selectTtaningRef" @refresh="getList" />
</div> </div>
</template> </template>
@ -46,18 +44,16 @@ import { getCurrentInstance, onMounted, reactive, ref } from "vue";
import MyTable from '@/components/aboutTable/MyTable.vue'; import MyTable from '@/components/aboutTable/MyTable.vue';
import Pages from '@/components/aboutTable/Pages.vue'; import Pages from '@/components/aboutTable/Pages.vue';
import Search from '@/components/aboutTable/Search.vue'; import Search from '@/components/aboutTable/Search.vue';
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import AddTrainerDialog from "./components/addTrainerDialog.vue"; import AddTrainerDialog from "./components/addTrainerDialog.vue";
import selectTtaningDialog from "./components/selectTtaningDialog.vue"; import selectTtaningDialog from "./components/selectTtaningDialog.vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX") const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX")
const trainerRef = ref(null); const trainerRef = ref(null);
const selectTtaningRef = ref(null); const selectTtaningRef = ref();
const queryFrom = ref({}); const queryFrom = ref({});
const isVisible = ref(false); const isVisible = ref(false);
const dialogVisible = ref(false);
const searchBox = ref(null); const searchBox = ref(null);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
@ -107,8 +103,7 @@ const pageData = reactive({
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
@ -116,7 +111,7 @@ const tabHeightFn = () => {
const addEdit = (type, row) => { const addEdit = (type, row) => {
if (type === 'select') { if (type === 'select') {
selectTtaningRef.value.open(row, type); selectTtaningRef.value.open(row);
} else { } else {
trainerRef.value.open(row, type); trainerRef.value.open(row, type);
} }
@ -129,38 +124,26 @@ const onSearch = (value) => {
} }
const getList = async () => { const getList = async () => {
try {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
const res = await qcckPost({ let data = { ...pageData.pageConfiger, ...queryFrom.value }
...pageData.pageConfiger, const res = await qcckPost(data, `/mosty-base/baxx/basq/page`)
...queryFrom.value
}, `/mosty-base/baxx/basq/page`)
if(res) {
pageData.tableData = res.records || []; pageData.tableData = res.records || [];
pageData.total = res.total; pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;
}
} }
const handleDelete = async (ids) => { const handleDelete = async (ids) => {
await proxy.$modal.confirm("是否确认删除该培训人员?") await proxy.$modal.confirm("是否确认删除该培训人员?")
try {
await qcckPost({ idList: ids }, `/mosty-base/baxx/basq/remove`) await qcckPost({ idList: ids }, `/mosty-base/baxx/basq/remove`)
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
await getList(); await getList();
} catch (error) {
proxy.$modal.msgError("删除失败");
}
} }
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageNum = val; pageData.pageConfiger.pageNum = val;
getList(); getList();
}; };
const changeSize = (val) => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList(); getList();

View File

@ -13,10 +13,10 @@
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"> :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #sflz="{ row }"> <template #sflz="{ row }">
<DictTag :value="row.newSflz" :options="D_BZ_SF" /> <span>{{ row.sflz == 1 ? '离职' : '在职' }}</span>
</template> </template>
<template #gw="{ row }"> <template #gw="{ row }">
<DictTag :value="row.gw" :options="D_BAXX_GWLX" /> <DictTag :value="row.gw" :tag="false" :options="D_BAXX_GWLX" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
@ -150,21 +150,12 @@ const handleDelete = async (ids) => {
}; };
const getList = async () => { const getList = async () => {
try {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
const res = await qcckPost({ let params = { ...pageData.pageConfiger, ...queryFrom.value }
...pageData.pageConfiger, const res = await qcckPost(params, `/mosty-base/baxx/cyry/page`)
...queryFrom.value pageData.tableData = res.records || []
}, `/mosty-base/baxx/cyry/page`)
if(res) {
// 处理sflz为null默认为0
pageData.tableData = res.records?.map(i => ({ ...i, newSflz: i?.sflz === null ? 0 : i.sflz })) || [];
pageData.total = res.total; pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;
}
} }
const changeNo = (val) => { const changeNo = (val) => {

View File

@ -13,10 +13,7 @@
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"> :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #gw="{ row }"> <template #gw="{ row }">
<DictTag :value="row.gw" :options="D_BAXX_GWLX" /> <DictTag :value="row.gw" :tag="false" :options="D_BAXX_GWLX" />
</template>
<template #ssbags="{ row }">
<DictTag :value="row.ssbags" :options="D_BAXX_DWLX" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
@ -91,14 +88,13 @@ const pageData = reactive({
{ label: "证件号码", prop: "sfzh" }, { label: "证件号码", prop: "sfzh" },
{ label: "联系方式", prop: "lxdh" }, { label: "联系方式", prop: "lxdh" },
{ label: "岗位", prop: "gw", showSolt: true }, { label: "岗位", prop: "gw", showSolt: true },
{ label: "所属保安公司", prop: "ssbags", showSolt: true }, { label: "所属保安公司", prop: "pxgs" },
] ]
}); });
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
@ -115,52 +111,28 @@ const onSearch = (value) => {
} }
const getList = async () => { const getList = async () => {
try {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
const res = await qcckPost({ let params = { ...pageData.pageConfiger, ...queryFrom.value, sfxxpx: '01' }
...pageData.pageConfiger, const res = await qcckPost(params, `/mosty-base/baxx/pxry/page`)
...queryFrom.value,
sfxxpx: '01'
}, `/mosty-base/baxx/pxry/page`)
if(res) {
pageData.tableData = res.records || []; pageData.tableData = res.records || [];
pageData.total = res.total; pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;
}
} }
// 提交培训 // 提交培训
const handleSubmitTraining = async (row) => { const handleSubmitTraining = async (row) => {
await proxy.$modal.confirm("是否确认提交该人员进行待培训?") await proxy.$modal.confirm("是否确认提交该人员进行待培训?")
await qcckPost({ ...row, sfxxpx: '02' }, "/mosty-base/baxx/pxry/edit")
try {
await qcckPost({
...row,
sfxxpx: '02'
}, "/mosty-base/baxx/pxry/edit")
proxy.$modal.msgSuccess("提交培训成功"); proxy.$modal.msgSuccess("提交培训成功");
await getList(); await getList();
} catch (error) {
proxy.$modal.msgError("提交培训失败");
console.log(error)
}
}; };
// 删除 // 删除
const handleDelete = async (ids) => { const handleDelete = async (ids) => {
await proxy.$modal.confirm("是否确认删除该培训人员?") await proxy.$modal.confirm("是否确认删除该培训人员?")
try {
await qcckPost({ idList: ids }, "/mosty-base/baxx/pxry/remove") await qcckPost({ idList: ids }, "/mosty-base/baxx/pxry/remove")
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
await getList(); await getList();
} catch (error) {
proxy.$modal.msgError("删除失败");
console.log(error)
}
}; };
const changeNo = (val) => { const changeNo = (val) => {