This commit is contained in:
Paidax
2024-12-13 09:37:20 +08:00
parent 014beea7d4
commit c418e37618
20 changed files with 2043 additions and 230 deletions
@@ -0,0 +1,172 @@
!(function (e, r) {
"object" == typeof exports && "undefined" != typeof module
? (module.exports = r())
: "function" == typeof define && define.amd
? define(r)
: ((e || self).createPersistedState = r())
})(this, function () {
var e = function (e) {
return (
(function (e) {
return !!e && "object" == typeof e
})(e) &&
!(function (e) {
var t = Object.prototype.toString.call(e)
return (
"[object RegExp]" === t ||
"[object Date]" === t ||
(function (e) {
return e.$$typeof === r
})(e)
)
})(e)
)
},
r = "function" == typeof Symbol && Symbol.for ? Symbol.for("react.element") : 60103
function t(e, r) {
return !1 !== r.clone && r.isMergeableObject(e) ? u(Array.isArray(e) ? [] : {}, e, r) : e
}
function n(e, r, n) {
return e.concat(r).map(function (e) {
return t(e, n)
})
}
function o(e) {
return Object.keys(e).concat(
(function (e) {
return Object.getOwnPropertySymbols
? Object.getOwnPropertySymbols(e).filter(function (r) {
return e.propertyIsEnumerable(r)
})
: []
})(e)
)
}
function c(e, r) {
try {
return r in e
} catch (e) {
return !1
}
}
function u(r, i, a) {
;((a = a || {}).arrayMerge = a.arrayMerge || n), (a.isMergeableObject = a.isMergeableObject || e), (a.cloneUnlessOtherwiseSpecified = t)
var f = Array.isArray(i)
return f === Array.isArray(r)
? f
? a.arrayMerge(r, i, a)
: (function (e, r, n) {
var i = {}
return (
n.isMergeableObject(e) &&
o(e).forEach(function (r) {
i[r] = t(e[r], n)
}),
o(r).forEach(function (o) {
;(function (e, r) {
return c(e, r) && !(Object.hasOwnProperty.call(e, r) && Object.propertyIsEnumerable.call(e, r))
})(e, o) ||
(i[o] =
c(e, o) && n.isMergeableObject(r[o])
? (function (e, r) {
if (!r.customMerge) return u
var t = r.customMerge(e)
return "function" == typeof t ? t : u
})(o, n)(e[o], r[o], n)
: t(r[o], n))
}),
i
)
})(r, i, a)
: t(i, a)
}
u.all = function (e, r) {
if (!Array.isArray(e)) throw new Error("first argument should be an array")
return e.reduce(function (e, t) {
return u(e, t, r)
}, {})
}
var i = u
return function (e) {
var r = (e = e || {}).storage || (window && window.localStorage),
t = e.key || "vuex"
function n(e, r) {
var t = r.getItem(e)
try {
return "string" == typeof t ? JSON.parse(t) : "object" == typeof t ? t : void 0
} catch (e) {}
}
function o() {
return !0
}
function c(e, r, t) {
return t.setItem(e, JSON.stringify(r))
}
function u(e, r) {
return Array.isArray(r)
? r.reduce(function (r, t) {
return (function (e, r, t, n) {
return (
!/^(__proto__|constructor|prototype)$/.test(r) &&
((r = r.split ? r.split(".") : r.slice(0)).slice(0, -1).reduce(function (e, r) {
return (e[r] = e[r] || {})
}, e)[r.pop()] = t),
e
)
})(
r,
t,
((n = e),
void 0 ===
(n = ((o = t).split ? o.split(".") : o).reduce(function (e, r) {
return e && e[r]
}, n))
? void 0
: n)
)
var n, o
}, {})
: e
}
function a(e) {
return function (r) {
return e.subscribe(r)
}
}
;(
e.assertStorage ||
function () {
r.setItem("@@", 1), r.removeItem("@@")
}
)(r)
var f,
s = function () {
return (e.getState || n)(t, r)
}
return (
e.fetchBeforeUse && (f = s()),
function (n) {
e.fetchBeforeUse || (f = s()),
"object" == typeof f &&
null !== f &&
(n.replaceState(
e.overwrite
? f
: i(n.state, f, {
arrayMerge:
e.arrayMerger ||
function (e, r) {
return r
},
clone: !1
})
),
(e.rehydrated || function () {})(n)),
(e.subscriber || a)(n)(function (n, i) {
;(e.filter || o)(n) && (e.setState || c)(t, (e.reducer || u)(i, e.paths), r)
})
}
)
}
})
//# sourceMappingURL=vuex-persistedstate.umd.js.map
File diff suppressed because it is too large Load Diff
@@ -336,7 +336,6 @@
<script>
window.sessionStorage.setItem('moduleMenus', JSON.stringify(${@shiro.userModuleMenus()}))
const leftMenuApp = new Vue({
el: '#asideMenu',
data() {
@@ -447,7 +446,6 @@
},
methods: {
getUnReadMsgNum() {
console.log('-----------------------')
$.get('/platform/sys/msg/user/unread_num').then(res => {
if (res.code === 0) {
const totalSum = Object.values(res.data).reduce(function (sum, value) {
@@ -97,7 +97,7 @@ layout("/layouts/platform.html"){
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<el-card shadow="never">
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-content">
<el-row>
@@ -130,44 +130,46 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<!-- <el-row type="flex" align="middle" class="query-row">-->
<!-- <el-col class="query-row-content">-->
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <span>工会小组:</span>-->
<!-- <el-select v-model="pageForm.unionGroupId"-->
<!-- filterable-->
<!-- clearable-->
<!-- multiple-->
<!-- style="margin-left: 33px;width: 80%"-->
<!-- @change="getThreeUnitsByGroupIdsOrUnitIds"-->
<!-- placeholder="请选择">-->
<!-- <el-option-->
<!-- v-for="item in unionGroups"-->
<!-- :key="item.id"-->
<!-- :label="item.groupName"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <span>组成科室:</span>-->
<!-- <el-select v-model="pageForm.threeUnitId" filterable-->
<!-- clearable-->
<!-- multiple-->
<!-- style="margin-left: 33px;width: 80%"-->
<!-- placeholder="请选择">-->
<!-- <el-option-->
<!-- v-for="item in threeUnits"-->
<!-- :key="item.id"-->
<!-- :label="item.name"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-col>-->
<!-- </el-row>-->
<template v-if="isThreeUnit">
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>工会小组:</span>
<el-select v-model="pageForm.unionGroupId"
filterable
clearable
multiple
style="margin-left: 33px;width: 80%"
@change="getThreeUnitsByGroupIdsOrUnitIds"
placeholder="请选择">
<el-option
v-for="item in unionGroups"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>组成科室:</span>
<el-select v-model="pageForm.threeUnitId" filterable
clearable
multiple
style="margin-left: 33px;width: 80%"
placeholder="请选择">
<el-option
v-for="item in threeUnits"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</template>
<el-row class="query-row">
<el-col class="query-row-title">性别:</el-col>
@@ -350,7 +352,7 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<!--<el-row class="query-row"
v-if="is_H10===true||is_SchoolUnionMemberAdmin===true||is_sysadmin===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H04===true">
<el-col class="query-title">条件匹配:</el-col>
<el-col class="query-content">
<user-cnd @cnd="(v)=>{this.$set(this.pageForm,'activityUserCnd',v)}"></user-cnd>
@@ -376,26 +378,36 @@ layout("/layouts/platform.html"){
<template #func>
<el-select v-model="pageForm.isUnit" placeholder="是否有单位" clearable
class="mr10" size="small">
style="width: 150px"
class="mr10">
<el-option label="有单位" :value="true"></el-option>
<el-option label="无单位" :value="false"></el-option>
</el-select>
<el-select v-model="pageForm.isUnion" placeholder="是否有工会" clearable
class="mr10" size="small">
style="width: 150px"
class="mr10">
<el-option label="有工会" :value="true"></el-option>
<el-option label="无工会" :value="false"></el-option>
</el-select>
<!-- <el-button slot="reference"-->
<!-- @click="allIsWelfareMember"-->
<!-- v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}"-->
<!-- type="primary" :loading="welfareMemberLoading" size="small">-->
<!-- 全部设置为福利会员-->
<!-- </el-button>-->
<el-select v-model="pageForm.memberType" placeholder="会员状态" clearable
style="width: 150px" @change="doSearch"
class="mr10">
<el-option label="全部教工" :value="1"></el-option>
<el-option label="是会员" :value="2"></el-option>
<el-option label="非会员" :value="3"></el-option>
</el-select>
<el-button slot="reference"
@click="allIsWelfareMember"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
type="primary" :loading="welfareMemberLoading" size="medium">
全部设置为福利会员
</el-button>
<!-- <el-popconfirm-->
<!-- v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}"-->
<!-- v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"-->
<!-- title="确定要将所有会员设为福利会员吗?"-->
<!-- @confirm="allIsWelfareMember"-->
<!-- >-->
@@ -410,7 +422,7 @@ layout("/layouts/platform.html"){
<el-button icon="el-icon-printer" class="m10" type="primary"
style="float: right"
size="small" @click="doExportByUnion">导出
size="medium" @click="doExportByUnion">导出
</el-button>
@@ -448,7 +460,7 @@ layout("/layouts/platform.html"){
<el-table-column align="center" header-align="center" label="操作" width="100px">
<template scope="{row:{id}}">
<el-button size="mini" @click="openView(id)" type="primary">查看</el-button>
<el-button size="small" @click="openView(id)">查看</el-button>
</template>
</el-table-column>
</el-table>
@@ -500,6 +512,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
isThreeUnit: false,
sexTypeOptions: [
{code: '男', name: '男'},
{code: '女', name: '女'}
@@ -537,7 +550,8 @@ layout("/layouts/platform.html"){
reverseSelection: false,
activityUserCnd: '',
startDate: '',
endDate: ''
endDate: '',
memberType:2,
},
personTypeOptions: [],
@@ -565,8 +579,8 @@ layout("/layouts/platform.html"){
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
// {prop: 'threeUnitName', label: '所在科室', sortable: true},
// {prop: 'unionGroupName', label: '工会小组', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true},
{prop: 'unionGroupName', label: '工会小组', sortable: true},
{prop: 'campusName', label: '所属校区', sortable: true, checked: 0},
{prop: 'marriage', label: '婚否', checked: 0},
{prop: 'education', label: '学历', checked: 0},
@@ -580,10 +594,12 @@ layout("/layouts/platform.html"){
}
},
components: {
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=' + new Date().getTime()),
'member-cnd': httpVueLoader('/components/member/MemberCnd.vue?v=' + new Date().getTime()),
'user-cnd': httpVueLoader('/components/plugins/UserCnd.vue?v=' + new Date().getTime())
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.1'),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=1.0.2'),
'member-cnd': httpVueLoader('/components/member/MemberCnd.vue'),
'user-cnd': httpVueLoader('/components/plugins/UserCnd.vue'),
},
methods: {
async allIsWelfareMember() {
@@ -651,6 +667,7 @@ layout("/layouts/platform.html"){
startDate,
endDate,
campus,
memberType,
reverseSelection,
memberSearchName,
memberSearchKeyWord
@@ -658,7 +675,7 @@ layout("/layouts/platform.html"){
window.location.href = loc() + "/doExportByUnion?=searchName=" + this.pageForm.searchName
+ "&searchKeyword=" + this.pageForm.searchKeyword + "&unitId=" + unitId + "&unionId=" + unionId
+ "&unionGroupId=" + unionGroupId + "&threeUnitId=" + threeUnitId + "&sexTypes=" + sexTypes
+ "&unionGroupId=" + unionGroupId + "&threeUnitId=" + threeUnitId + "&sexTypes=" + sexTypes + "&memberType=" + memberType
+ "&roleIds=" + roleIds + "&age=" + age + "&year=" + this.pageForm.year + "&memberStatus=" + memberStatus
+ "&startDate=" + (startDate ? this.getDate(startDate) : '') + "&endDate=" + (endDate ? this.getDate(endDate) : '') + "&campus=" + (campus ? campus : '')
+ "&reverseSelection=" + (reverseSelection ? reverseSelection : '') + "&memberSearchName=" + (memberSearchName ? memberSearchName : '')
@@ -832,7 +849,7 @@ layout("/layouts/platform.html"){
},
},
async created() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -19,13 +19,14 @@ layout("/layouts/platform.html"){
</el-card>
<el-card class="mt10" shadow="never">
<el-table :data="tableData" :highlight-current-row="true" :key="tableKey"
:load="loadChild" lazy row-key="id"
:load="loadChild" lazy row-key="id" ref="tableData"
:expand-row-keys="expandedRowKeysRenew"
@expand-change="handleExpandChange"
style="width: 100%">
<el-table-column :show-overflow-tooltip="true" align="left" header-align="center"
label="字典名称" prop="name" width="200">
</el-table-column>
<el-table-column :show-overflow-tooltip="true" header-align="center" label="字典代码"
prop="code">
</el-table-column>
@@ -62,11 +63,11 @@ layout("/layouts/platform.html"){
:command="{type:'disable',id:scope.row.id,name:scope.row.name,row:scope.row}">
禁用
</el-dropdown-item>
<el-dropdown-item :command="{type:'edit',id:scope.row.id,name:scope.row.name}"
<el-dropdown-item :command="{type:'edit',data:scope.row}"
divided>
修改
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.name}">
<el-dropdown-item :command="{type:'delete',data:scope.row}">
删除
</el-dropdown-item>
</el-dropdown-menu>
@@ -164,7 +165,7 @@ layout("/layouts/platform.html"){
</el-dialog>
</div>
<script>
new Vue({
const vue = new Vue({
el: "#app",
data: function () {
return {
@@ -210,6 +211,9 @@ layout("/layouts/platform.html"){
children: 'children',
label: 'label'
},
// 保存展开状态的数组
expandedRowKeysRenew: [],
tableTreeRefreshTool: {}
}
},
methods: {
@@ -297,7 +301,7 @@ layout("/layouts/platform.html"){
type: 'success'
});
self.addDialogVisible = false;
self.initTreeTable();
self.loadChildByExpandedKeys();
} else {
self.$message({
message: data.msg,
@@ -320,7 +324,7 @@ layout("/layouts/platform.html"){
type: 'success'
});
self.editDialogVisible = false;
self.initTreeTable();
self.loadChildByExpandedKeys()
} else {
self.$message({
message: data.msg,
@@ -335,7 +339,7 @@ layout("/layouts/platform.html"){
var self = this;
var url = base + "/platform/sys/dict/child";
$.post(url, {pid: ""}, function (data) {
if (data.code == 0) {
if (data.code === 0) {
self.tableData = data.data;
self.tableKey = +new Date();
}
@@ -343,6 +347,12 @@ layout("/layouts/platform.html"){
},
loadChild: function (tree, treeNode, resolve) {
// 在之前声明的全局变量中,增加一个key为 本条数据的id,id可替换为你数据中的任意唯一值
this.tableTreeRefreshTool[tree.id] = {}
// 重要!保存resolve方法,以便后续使用
this.tableTreeRefreshTool[tree.id].resolve = resolve
// 记录展开次数,具体作用后续介绍
this.tableTreeRefreshTool[tree.id].expandCount = 0
var url = base + "/platform/sys/dict/child";
$.post(url, {pid: tree.id}, function (data) {
if (data.code == 0) {
@@ -359,8 +369,9 @@ layout("/layouts/platform.html"){
self.isAddFromSub = true;
}
if ("edit" == command.type) {
$.post(base + "/platform/sys/dict/edit/" + command.id, {}, function (data) {
$.post(base + "/platform/sys/dict/edit/" + command.data.id, {}, function (data) {
if (data.code == 0) {
self.beforeEditData = command.data
self.formData = data.data;//加载后台表单数据
self.editDialogVisible = true;//打开编辑窗口
} else {
@@ -393,19 +404,19 @@ layout("/layouts/platform.html"){
}, "json");
}
if ("delete" == command.type) {
self.$confirm('此操作将删除 ' + command.name, '提示', {
self.$confirm('此操作将删除 ' + command.data.name, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: function (a, b) {
if ("confirm" == a) {//确认后再执行
$.post(base + "/platform/sys/dict/delete/" + command.id, {}, function (data) {
$.post(base + "/platform/sys/dict/delete/" + command.data.id, {}, function (data) {
if (data.code == 0) {
self.$message({
message: data.msg,
type: 'success'
});
self.initTreeTable();
self.loadChildByExpandedKeys();
} else {
self.$message({
message: data.msg,
@@ -418,6 +429,31 @@ layout("/layouts/platform.html"){
});
}
},
handleExpandChange(row, expanded) {
if ((row.parentId === '' || row.parentId == null) && !expanded) {
this.expandedRowKeysRenew = []
return
}
if (expanded) {
this.expandedRowKeysRenew.push(row.id)
} else {
const index = this.expandedRowKeysRenew.findIndex(v => v === row.id)
this.expandedRowKeysRenew.splice(index, 1)
}
},
loadChildByExpandedKeys() {
if (this.expandedRowKeysRenew && this.expandedRowKeysRenew.length > 0) {
this.expandedRowKeysRenew.forEach((v) => {
const curr = this.tableTreeRefreshTool[v]
// api请求
$.get('/platform/sys/dict/child', {pid: v}).then(res => {
curr.resolve(res.data)
})
})
} else {
this.initTreeTable()
}
}
},
created: function () {
this.initTreeTable();
@@ -19,13 +19,14 @@ const appModule = {
`,
data() {
return {
id: ""
id: "",
entranceModules: []
}
},
computed: {
entranceModules() {
return JSON.parse(window.sessionStorage.getItem('moduleMenus'))
}
// entranceModules() {
// return JSON.parse(window.sessionStorage.getItem('moduleMenus'))
// }
},
methods: {
enterEntranceModules(item) {
@@ -35,9 +36,10 @@ const appModule = {
}
},
created() {
// setTimeout(()=>{
// // this.id = headerApp.appModuleId
// this.enterEntranceModules({id: headerApp.appModuleId})
// },500)
setTimeout(()=>{
// this.id = headerApp.appModuleId
// this.enterEntranceModules({id: headerApp.appModuleId})
this.entranceModules = JSON.parse(window.sessionStorage.getItem('moduleMenus'))
},500)
}
}
@@ -1,60 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS Grid 布局示例</title>
<style>
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 定义3列,每列宽度相等 */
grid-template-rows: repeat(3, 100px); /* 定义3行,每行高度为100px */
gap: 10px; /* 设置网格间距 */
width: 600px; /* 容器宽度 */
height: 400px; /* 容器高度 */
margin: 0 auto; /* 居中容器 */
}
.item {
background-color: #4CAF50;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2em;
border-radius: 5px;
}
.item1 {
grid-column: 1 / 3; /* 元素1占据第1和第2列 */
grid-row: 1 / 2; /* 元素1占据第1行 */
}
.item2 {
grid-column: 3 / 4; /* 元素2占据第3列 */
grid-row: 1 / 3; /* 元素2跨越第1和第2行 */
}
.item3 {
grid-column: 1 / 3; /* 元素3占据第1和第2列 */
grid-row: 2 / 3; /* 元素3占据第2行 */
}
.item4,
.item5,
.item6 {
grid-column: span 1; /* 每个元素占据1列 */
grid-row: 3 / 4; /* 所有元素都在第3行 */
}
</style>
</head>
<body>
<div class="grid-container">
<div class="item item1">元素 1</div>
<div class="item item2">元素 2</div>
<div class="item item3">元素 3</div>
<div class="item item4">元素 4</div>
<div class="item item5">元素 5</div>
<div class="item item6">元素 6</div>
</div>
</body>
</html>
@@ -5,8 +5,8 @@ layout("/layouts/platform.html"){
<guava>
<el-card shadow="never">
<el-row justify="end" type="flex">
<!--<el-col>
<div class="search">
<el-col>
<!--<div class="search">
<div class="search-item">
<div class="search-item-label">菜单名称:</div>
<div class="search-item-option">
@@ -18,8 +18,8 @@ layout("/layouts/platform.html"){
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-col>-->
</div>-->
</el-col>
<el-button @click="openAdd" size="medium" type="primary">
<i class="ti-plus"></i>