Ver código fonte

删除无用文件

aexiaoliou 1 ano atrás
pai
commit
f52a7ee4ac
34 arquivos alterados com 1 adições e 6138 exclusões
  1. 0 4
      h5/src/Update.md
  2. 0 116
      h5/src/api/department/department.ts
  3. 0 4
      h5/src/api/enum/io.ts
  4. 0 59
      h5/src/api/model/Good.ts
  5. 0 52
      h5/src/api/model/GoodClass.ts
  6. 0 40
      h5/src/api/model/OrderInout.ts
  7. 0 40
      h5/src/api/model/realinventory.ts
  8. 0 40
      h5/src/api/model/transfer.ts
  9. 0 16
      h5/src/layout/navBars/breadcrumb/user.vue
  10. 1 0
      h5/src/views/admin/admin/index.vue
  11. 0 434
      h5/src/views/chart/chart.scss
  12. 0 59
      h5/src/views/chart/chart.ts
  13. 0 101
      h5/src/views/chart/head.vue
  14. 0 477
      h5/src/views/chart/index.vue
  15. 0 750
      h5/src/views/data/good.vue
  16. 0 12
      h5/src/views/menu/menu1/menu11/index.vue
  17. 0 12
      h5/src/views/menu/menu1/menu12/menu121/index.vue
  18. 0 12
      h5/src/views/menu/menu1/menu12/menu122/index.vue
  19. 0 21
      h5/src/views/menu/menu1/menu13/index.vue
  20. 0 12
      h5/src/views/menu/menu2/index.vue
  21. 0 168
      h5/src/views/payrollModule/crkexport.vue
  22. 0 171
      h5/src/views/payrollModule/export.vue
  23. 0 177
      h5/src/views/payrollModule/import.vue
  24. 0 170
      h5/src/views/payrollModule/kcexport.vue
  25. 0 373
      h5/src/views/personal/index.vue
  26. 0 66
      h5/src/views/personal/mock.ts
  27. 0 475
      h5/src/views/tools/index.vue
  28. 0 275
      h5/src/views/underlying/department/departEdit.vue
  29. 0 377
      h5/src/views/underlying/department/detail.vue
  30. 0 498
      h5/src/views/underlying/department/edit.vue
  31. 0 152
      h5/src/views/underlying/department/export.vue
  32. 0 198
      h5/src/views/underlying/department/import.vue
  33. 0 641
      h5/src/views/underlying/department/index.vue
  34. 0 136
      h5/src/views/underlying/department/resetPassword.vue

+ 0 - 4
h5/src/Update.md

@@ -1,4 +0,0 @@
-## 2023年3月15日
-### 更新 utils工具类
-### 新增 apiConfig页面样板
-### 更新 config配置文件自动读取接口地址的参考

+ 0 - 116
h5/src/api/department/department.ts

@@ -1,116 +0,0 @@
-import Http from "../../utils/net/Http";
-import Urls from "../Urls";
-const Department = {
-    // 部门初始化
-    async init() {
-        let url = Urls.department.init;
-        let param: object = {};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门列表
-    async list(param: object) {
-        let url = Urls.department.list;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门详情
-    async detail(id: number) {
-        let url = Urls.department.detail;
-        let param: object = {id};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门添加
-    async add(param: object) {
-        let url = Urls.department.add;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门更新
-    async edit(param: object) {
-        let url = Urls.department.edit;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门删除/批量删除
-    async del(ids: string | number | object) {
-        let url = Urls.department.del;
-        let param: object = {ids};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员初始化
-    async initAdmin() {
-        let url = Urls.department.initAdmin;
-        let param: object = {};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员列表
-    async listAdmin(param: object) {
-        let url = Urls.department.listAdmin;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员添加
-    async addAdmin(param: object) {
-        let url = Urls.department.addAdmin;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员详情
-    async detailAdmin(id: number) {
-        let url = Urls.department.detailAdmin;
-        let param: object = {id};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员更新
-    async editAdmin(param: object) {
-        let url = Urls.department.editAdmin;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员删除/批量删除
-    async delAdmin(ids: string | number | object) {
-        let url = Urls.department.delAdmin;
-        let param: object = {ids};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 重置密码
-    async resetPassword(param: object) {
-        let url = Urls.department.resetPassword;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门人员审核
-    async passAdmin(ids: string | number | object) {
-        let url = Urls.department.passAdmin;
-        let param: object = {ids};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 部门人员反审核
-    async rePassAdmin(ids: string | number | object) {
-        let url = Urls.department.rePassAdmin;
-        let param: object = {ids};
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员导入
-    async import(param: object) {
-        let url = Urls.department.import;
-        let res = await Http.post(url, param);
-        return res;
-    },
-    // 人员导出
-    async export(path: string | number | object) {
-        let url = Urls.department.export;
-        let param: object = { path };
-        let res = await Http.post(url, param);
-        return res;
-    },
-};
-export default Department;

+ 0 - 4
h5/src/api/enum/io.ts

@@ -1,4 +0,0 @@
-export default {
-    IN: 1,
-    OUT: 2
-}

+ 0 - 59
h5/src/api/model/Good.ts

@@ -1,59 +0,0 @@
-import Http from '/@/utils/net/Http';
-import Urls from '../Urls';
-//gzs:物品模型
-const Good = {
-	/**
-	 * 初始化
-	 * @returns
-	 */
-	async init() {
-		let url = Urls.admin.init;
-		let res = await Http.get(url);
-		return res;
-	},
-	/**
-	 * 获取列表
-	 * @param params
-	 * @returns
-	 */
-	async list(params: any, sort = 'valid') {
-		let url = Urls.good.list;
-		let res = await Http.post(url, params);
-		let repos = res.data.data;
-		if (sort == 'valid') {
-			repos?.sort((a: any, b: any) => b.valid - a.valid);
-		}
-		return res;
-	},
-	async add(params: any) {
-		let url = Urls.good.add;
-		let res = await Http.post(url, params);
-		return res;
-	},
-	async edit(params: any) {
-		let url = Urls.good.edit;
-		let res = await Http.post(url, params);
-		return res;
-	},
-	async delete(id: any) {
-		let url = Urls.good.delete;
-		let res = await Http.post(url, id);
-		return res;
-	},
-	async export(params: any) {
-		let url = Urls.good.export;
-		let res = await Http.post(url, params);
-		return res;
-	},
-	async import(params: any) {
-		let url = Urls.good.import;
-		let res = await Http.post(url, params);
-		return res;
-	},
-	async no(no: any) {
-		let url = Urls.good.no;
-		let res = await Http.get(url, no);
-		return res;
-	},
-};
-export default Good;

+ 0 - 52
h5/src/api/model/GoodClass.ts

@@ -1,52 +0,0 @@
-import Http from "/@/utils/net/Http";
-import Urls from "../Urls";
-//gzs:物品模型
-const GoodClass = {
-    /**
-     * 初始化
-     * @returns 
-     */
-    async init() {
-        let url = Urls.admin.init;
-        let res = await Http.get(url);
-        return res;
-    },
-    /**
-     * 获取列表
-     * @param params 
-     * @returns 
-     */
-    async list(params: any) {
-        let url = Urls.goodClass.list;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async add(params: any) {
-        let url = Urls.goodClass.add;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async edit(params: any) {
-        let url = Urls.goodClass.edit;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async delete(id: any) {
-        let url = Urls.goodClass.delete;
-        let res = await Http.post(url, id );
-        return res;
-    },
-    async all() {
-        let url = Urls.goodClass.all;
-        let res = await Http.get(url);
-        return res;
-    },
-    // async detail(id: string | number) {
-    //     let url = Urls.goodClass.detail;
-    //     let res = await Http.post(url, { id });
-    //     return res;
-    // },
-
-
-};
-export default GoodClass;

+ 0 - 40
h5/src/api/model/OrderInout.ts

@@ -1,40 +0,0 @@
-import Http from '/@/utils/net/Http';
-import Urls from '../Urls';
-//gzs:出入库\盘点模型
-const OrderInout = {
-	/**
-	 * 初始化
-	 * @returns
-	 */
-	// async init() {
-	// 	let url = Urls.orderInout.init;
-	// 	let res = await Http.get(url);
-	// 	return res;
-	// },
-	async list(params: any) {
-		let url = Urls.orderInout.list;
-		let res = await Http.post(url, params);
-		return res;
-	},
-	async add(params: any) {
-		let url = Urls.orderInout.add;
-		let res = await Http.post(url, params);
-		return res;
-	},
-	async detail(id: any) {
-		let url = Urls.orderInout.detail;
-		let res = await Http.post(url, id);
-		return res;
-	},
-	async info(good_id: any, repo_id: any) {
-		let url = Urls.orderInout.info;
-		let res = await Http.get(url, { good_id, repo_id });
-		return res;
-	},
-	async reset(id: any) {
-		let url = Urls.orderInout.reset;
-		let res = await Http.post(url, {id});
-		return res;
-	},
-};
-export default OrderInout;

+ 0 - 40
h5/src/api/model/realinventory.ts

@@ -1,40 +0,0 @@
-import Http from "/@/utils/net/Http";
-import Urls from "../Urls";
-//gzs:在途库存模型
-const realinventory = {
-    /**
-     * 初始化
-     * @returns 
-     */
-    async init() {
-        let url = Urls.admin.init;
-        let res = await Http.get(url);
-        return res;
-    },
-    /**
-     * 获取列表
-     * @param params 
-     * @returns 
-     */
-    async list(params: any) {
-        let url = Urls.realinventory.list;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async export(params: any) {
-        let url = Urls.realinventory.export;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async detail(params: any) {
-        let url = Urls.realinventory.detail;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async edit(params: any) {
-        let url = Urls.realinventory.edit;
-        let res = await Http.post(url, params);
-        return res;
-    },
-};
-export default realinventory;

+ 0 - 40
h5/src/api/model/transfer.ts

@@ -1,40 +0,0 @@
-import Http from "/@/utils/net/Http";
-import Urls from "../Urls";
-//gzs:物品模型
-const Transfer = {
-    /**
-     * 初始化
-     * @returns 
-     */
-    async init() {
-        let url = Urls.admin.init;
-        let res = await Http.get(url);
-        return res;
-    },
-    /**
-     * 获取列表
-     * @param params 
-     * @returns 
-     */
-    async list(params: any) {
-        let url = Urls.transfer.list;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async detail(params: any) {
-        let url = Urls.transfer.detail;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async add(params: any) {
-        let url = Urls.transfer.add;
-        let res = await Http.post(url, params);
-        return res;
-    },
-    async reset(id: any) {
-		let url = Urls.transfer.reset;
-		let res = await Http.post(url, {id});
-		return res;
-	},
-};
-export default Transfer;

+ 0 - 16
h5/src/layout/navBars/breadcrumb/user.vue

@@ -12,22 +12,6 @@
 				</el-dropdown-menu>
 			</template>
 		</el-dropdown>
-		<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">
-			<div class="layout-navbars-breadcrumb-user-icon">
-				<i
-					class="iconfont"
-					:class="state.disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'"
-					:title="$t('message.user.title1')"
-				></i>
-			</div>
-			<template #dropdown>
-				<el-dropdown-menu>
-					<el-dropdown-item command="zh-cn" :disabled="state.disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>
-					<el-dropdown-item command="en" :disabled="state.disabledI18n === 'en'">English</el-dropdown-item>
-					<el-dropdown-item command="zh-tw" :disabled="state.disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>
-				</el-dropdown-menu>
-			</template>
-		</el-dropdown>
 		<div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">
 			<el-icon :title="$t('message.user.title2')">
 				<ele-Search />

+ 1 - 0
h5/src/views/admin/admin/index.vue

@@ -28,6 +28,7 @@
 				<el-table-column type="selection" width="55" />
 				<el-table-column fixed prop="id" label="ID" width="60" />
 				<el-table-column fixed prop="name" label="账号" width="150" />
+				<el-table-column fixed prop="real_name" label="真实姓名" width="150" />
 				<el-table-column prop="phone" label="手机号" width="" />
 				<el-table-column prop="login_count" label="登录次数" width="120" />
 				<el-table-column prop="login_last_time" label="最后登录时间" min-width="180" />

+ 0 - 434
h5/src/views/chart/chart.scss

@@ -1,434 +0,0 @@
-.chart-scrollbar {
-	.chart-warp {
-		display: flex;
-		flex-direction: column;
-		height: 100%;
-		.chart-warp-bottom {
-			flex: 1;
-			overflow: hidden;
-			display: flex;
-			.big-data-down-left,
-			.big-data-down-right {
-				width: 30%;
-				display: flex;
-				flex-direction: column;
-				.flex-warp-item {
-					padding: 0 7.5px 15px 15px;
-					width: 100%;
-					height: 33.33%;
-					.flex-warp-item-box {
-						width: 100%;
-						height: 100%;
-						background: var(--el-color-white);
-						border: 1px solid var(--el-border-color-lighter);
-						border-radius: 4px;
-						display: flex;
-						flex-direction: column;
-						padding: 15px;
-						transition: all ease 0.3s;
-						&:hover {
-							box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
-							transition: all ease 0.3s;
-						}
-						.flex-title {
-							margin-bottom: 15px;
-							display: flex;
-							justify-content: space-between;
-							.flex-title-small {
-								font-size: 12px;
-							}
-						}
-						.flex-content {
-							flex: 1;
-							font-size: 12px;
-						}
-						.flex-content-overflow {
-							overflow: hidden;
-						}
-					}
-				}
-			}
-			.big-data-down-left {
-				color: var(--el-text-color-primary);
-				.sky {
-					display: flex;
-					align-items: center;
-					.sky-left {
-						font-size: 30px;
-					}
-					.sky-center {
-						flex: 1;
-						overflow: hidden;
-						padding: 0 10px;
-						font {
-							margin-right: 15px;
-						}
-						.span {
-							background: #22bc76;
-							border-radius: 2px;
-							padding: 0 5px;
-							color: var(--el-color-white);
-						}
-					}
-					.sky-right {
-						span {
-							font-size: 30px;
-						}
-						font {
-							font-size: 20px;
-						}
-					}
-				}
-				.sky-dd {
-					.sky-dl {
-						display: flex;
-						align-items: center;
-						height: 28px;
-						overflow: hidden;
-						div {
-							flex: 1;
-							overflow: hidden;
-							i {
-								font-size: 14px;
-							}
-						}
-						.tip {
-							overflow: hidden;
-							white-space: nowrap;
-							text-overflow: ellipsis;
-						}
-					}
-					.sky-dl-first {
-						color: var(--el-color-primary);
-					}
-				}
-				.d-states {
-					display: flex;
-					.d-states-item {
-						flex: 1;
-						display: flex;
-						align-items: center;
-						overflow: hidden;
-						i {
-							font-size: 20px;
-							height: 33px;
-							width: 33px;
-							line-height: 33px;
-							text-align: center;
-							border-radius: 100%;
-							flex-shrink: 1;
-							color: var(--el-color-white);
-							display: flex;
-							align-items: center;
-							justify-content: center;
-						}
-						.i-bg1 {
-							background: #22bc76;
-						}
-						.i-bg2 {
-							background: #e2356d;
-						}
-						.i-bg3 {
-							background: #43bbef;
-						}
-						.d-states-flex {
-							overflow: hidden;
-							padding: 0 10px 0;
-							.d-states-item-label {
-								color: var(--el-color-primary);
-								overflow: hidden;
-								white-space: nowrap;
-								text-overflow: ellipsis;
-							}
-							.d-states-item-value {
-								font-size: 14px;
-								text-align: center;
-								margin-top: 3px;
-								color: var(--el-color-primary);
-							}
-						}
-					}
-				}
-				.d-btn {
-					margin-top: 5px;
-					.d-btn-item {
-						border: 1px solid var(--el-color-primary);
-						display: flex;
-						width: 100%;
-						border-radius: 35px;
-						align-items: center;
-						padding: 5px;
-						margin-top: 15px;
-						cursor: pointer;
-						transition: all ease 0.3s;
-						color: var(--el-color-primary);
-						.d-btn-item-left {
-							font-size: 20px;
-							border: 1px solid var(--el-color-primary);
-							width: 25px;
-							height: 25px;
-							line-height: 25px;
-							border-radius: 100%;
-							text-align: center;
-							font-size: 14px;
-						}
-						.d-btn-item-center {
-							padding: 0 10px;
-							flex: 1;
-						}
-						.d-btn-item-eight {
-							text-align: right;
-							padding-right: 10px;
-						}
-					}
-				}
-			}
-			.big-data-down-center {
-				width: 40%;
-				display: flex;
-				flex-direction: column;
-				.big-data-down-center-one {
-					height: 66.67%;
-					padding: 0 7.5px 15px;
-					.big-data-down-center-one-content {
-						height: 100%;
-						background: var(--el-color-white);
-						padding: 15px;
-						border: 1px solid var(--el-border-color-lighter);
-						border-radius: 4px;
-						transition: all ease 0.3s;
-						&:hover {
-							box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
-							transition: all ease 0.3s;
-						}
-					}
-				}
-				.big-data-down-center-two {
-					padding: 0 7.5px 15px;
-					height: 33.33%;
-					.flex-warp-item-box {
-						width: 100%;
-						height: 100%;
-						background: var(--el-color-white);
-						display: flex;
-						flex-direction: column;
-						padding: 15px;
-						border: 1px solid var(--el-border-color-lighter);
-						border-radius: 4px;
-						transition: all ease 0.3s;
-						&:hover {
-							box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
-							transition: all ease 0.3s;
-						}
-						.flex-title {
-							margin-bottom: 15px;
-							color: var(--el-text-color-primary);
-							display: flex;
-							justify-content: space-between;
-							.flex-title-small {
-								font-size: 12px;
-							}
-						}
-						.flex-content {
-							flex: 1;
-							font-size: 12px;
-							display: flex;
-							height: calc(100% - 30px);
-							.flex-content-left {
-								display: flex;
-								flex-wrap: wrap;
-								width: 120px;
-								height: 100%;
-								.monitor-item {
-									width: 50%;
-									display: flex;
-									align-items: center;
-									.monitor-wave {
-										cursor: pointer;
-										width: 40px;
-										height: 40px;
-										position: relative;
-										background-color: var(--el-color-primary);
-										border-radius: 50%;
-										overflow: hidden;
-										text-align: center;
-										&::before,
-										&::after {
-											content: '';
-											position: absolute;
-											left: 50%;
-											width: 40px;
-											height: 40px;
-											background: #f4f4f4;
-											animation: roateOne 10s linear infinite;
-											transform: translateX(-50%);
-											z-index: 1;
-										}
-										&::before {
-											bottom: 10px;
-											border-radius: 60%;
-										}
-										&::after {
-											bottom: 8px;
-											opacity: 0.7;
-											border-radius: 37%;
-										}
-										.monitor-z-index {
-											position: relative;
-											z-index: 2;
-											color: var(--el-color-primary);
-											display: flex;
-											align-items: center;
-											height: 100%;
-											justify-content: center;
-										}
-									}
-									@keyframes roateOne {
-										0% {
-											transform: translate(-50%, 0) rotateZ(0deg);
-										}
-										50% {
-											transform: translate(-50%, -2%) rotateZ(180deg);
-										}
-										100% {
-											transform: translate(-50%, 0%) rotateZ(360deg);
-										}
-									}
-									.monitor-active {
-										background-color: #22bc76;
-										.monitor-z-index {
-											color: #22bc76;
-										}
-									}
-								}
-							}
-							.flex-content-right {
-								flex: 1;
-							}
-						}
-					}
-				}
-			}
-			.big-data-down-right {
-				.flex-warp-item {
-					padding: 0 15px 15px 7.5px;
-					.flex-title {
-						color: var(--el-text-color-primary);
-					}
-					.flex-content {
-						display: flex;
-						flex-direction: column;
-						.task {
-							display: flex;
-							height: 45px;
-							.task-item {
-								flex: 1;
-								color: var(--el-color-white);
-								display: flex;
-								justify-content: center;
-								.task-item-box {
-									position: relative;
-									width: 45px;
-									height: 45px;
-									overflow: hidden;
-									border-radius: 100%;
-									z-index: 0;
-									display: flex;
-									align-items: center;
-									flex-direction: column;
-									justify-content: center;
-									box-shadow: 0 10px 12px 0 rgba(0, 0, 0, 0.3);
-									&::before {
-										content: '';
-										position: absolute;
-										z-index: -2;
-										left: -50%;
-										top: -50%;
-										width: 200%;
-										height: 200%;
-										background-repeat: no-repeat;
-										background-size: 50% 50%, 50% 50%;
-										background-position: 0 0, 100% 0, 100% 100%, 0 100%;
-										background-image: linear-gradient(#19d4ae, #19d4ae), linear-gradient(#5ab1ef, #5ab1ef), linear-gradient(#fa6e86, #fa6e86),
-											linear-gradient(#ffb980, #ffb980);
-										animation: rotate 2s linear infinite;
-									}
-									&::after {
-										content: '';
-										position: absolute;
-										z-index: -1;
-										left: 1px;
-										top: 1px;
-										width: calc(100% - 2px);
-										height: calc(100% - 2px);
-										border-radius: 100%;
-									}
-									.task-item-value {
-										text-align: center;
-										font-size: 14px;
-										font-weight: bold;
-									}
-									.task-item-label {
-										text-align: center;
-									}
-								}
-								.task1 {
-									&::after {
-										background: #5492be;
-									}
-								}
-								.task2 {
-									&::after {
-										background: #43a177;
-									}
-								}
-								.task3 {
-									&::after {
-										background: #a76077;
-									}
-								}
-							}
-							.task-first-item {
-								flex-direction: column;
-								text-align: center;
-								color: var(--el-color-primary);
-								.task-first {
-									font-size: 20px;
-								}
-							}
-						}
-						.progress {
-							color: var(--el-text-color-primary);
-							display: flex;
-							flex-direction: column;
-							flex: 1;
-							justify-content: space-between;
-							margin-top: 15px;
-							.progress-item {
-								height: 33.33%;
-								display: flex;
-								align-items: center;
-								.progress-box {
-									flex: 1;
-									width: 100%;
-									margin-left: 10px;
-									:deep(.el-progress__text) {
-										color: var(--el-text-color-primary);
-										font-size: 12px !important;
-										text-align: right;
-									}
-									:deep(.el-progress-bar__outer) {
-										background-color: rgba(0, 0, 0, 0.1) !important;
-									}
-									:deep(.el-progress-bar) {
-										margin-right: -22px !important;
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-}

+ 0 - 59
h5/src/views/chart/chart.ts

@@ -1,59 +0,0 @@
-/**
- * sky 天气
- * @returns 返回模拟数据
- */
-export const skyList = [
-	{
-		v1: '时间',
-		v2: '天气',
-		v3: '温度',
-		v5: '降水',
-		v7: '风力',
-		type: 'title',
-	},
-	{
-		v1: '今天',
-		v2: 'ele-Sunny',
-		v3: '20°/26°',
-		v5: '50%',
-		v7: '13m/s',
-	},
-	{
-		v1: '明天',
-		v2: 'ele-Lightning',
-		v3: '20°/26°',
-		v5: '50%',
-		v7: '13m/s',
-	},
-];
-
-/**
- * 当前设置状态
- * @returns 返回模拟数据
- */
-export const dBtnList = [
-	{
-		v2: '阳光玫瑰种植',
-		v3: '126天',
-		v4: '设备在线',
-	},
-];
-
-/**
- * 当前设备监测
- * @returns 返回模拟数据
- */
-export const chartData4List = [
-	{
-		label: '温度',
-	},
-	{
-		label: '光照',
-	},
-	{
-		label: '湿度',
-	},
-	{
-		label: '风力',
-	},
-];

+ 0 - 101
h5/src/views/chart/head.vue

@@ -1,101 +0,0 @@
-<template>
-	<div class="big-data-up mb15">
-		<div class="up-left">
-			<i class="el-icon-time mr5"></i>
-			<span>{{ state.time.txt }}</span>
-		</div>
-		<div class="up-center">
-			<span>智慧农业系统平台</span>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts" name="chartHead">
-import { reactive, onBeforeMount, onUnmounted } from 'vue';
-import { formatDate } from '/@/utils/formatTime';
-
-// 定义变量内容
-const state = reactive({
-	time: {
-		txt: '',
-		fun: 0,
-	},
-});
-
-// 初始化时间
-const initTime = () => {
-	state.time.txt = formatDate(new Date(), 'YYYY-mm-dd HH:MM:SS WWW QQQQ');
-	state.time.fun = window.setInterval(() => {
-		state.time.txt = formatDate(new Date(), 'YYYY-mm-dd HH:MM:SS WWW QQQQ');
-	}, 1000);
-};
-// 页面加载前
-onBeforeMount(() => {
-	initTime();
-});
-// 页面卸载时
-onUnmounted(() => {
-	window.clearInterval(state.time.fun);
-});
-</script>
-
-<style scoped lang="scss">
-.big-data-up {
-	height: 55px;
-	width: 100%;
-	display: flex;
-	align-items: center;
-	padding: 0 15px;
-	color: var(--el-color-primary);
-	overflow: hidden;
-	position: relative;
-	.up-left {
-		position: absolute;
-	}
-	.up-center {
-		width: 100%;
-		display: flex;
-		justify-content: center;
-		font-size: 18px;
-		letter-spacing: 5px;
-		background-image: -webkit-linear-gradient(
-			left,
-			var(--el-color-primary),
-			var(--el-color-primary-light-3) 25%,
-			var(--el-color-primary) 50%,
-			var(--el-color-primary-light-3) 75%,
-			var(--el-color-primary)
-		);
-		-webkit-text-fill-color: transparent;
-		-webkit-background-clip: text;
-		background-clip: text;
-		background-size: 200% 100%;
-		-webkit-animation: masked-animation-data-v-b02d8052 4s linear infinite;
-		animation: masked-animation-data-v-b02d8052 4s linear infinite;
-		-webkit-box-reflect: below -2px -webkit-gradient(linear, left top, left bottom, from(transparent), to(hsla(0, 0%, 100%, 0.1)));
-		position: relative;
-		@keyframes masked-animation {
-			0% {
-				background-position: 0 0;
-			}
-			100% {
-				background-position: -100% 0;
-			}
-		}
-		position: relative;
-		&::after {
-			content: '';
-			width: 250px;
-			position: absolute;
-			bottom: -15px;
-			left: 50%;
-			transform: translateX(-50%);
-			border: 1px transparent solid;
-			border-image: linear-gradient(to right, var(--el-color-primary-light-9), var(--el-color-primary)) 1 10;
-		}
-		span {
-			cursor: pointer;
-		}
-	}
-}
-</style>

+ 0 - 477
h5/src/views/chart/index.vue

@@ -1,477 +0,0 @@
-<template>
-	<div class="chart-scrollbar layout-padding">
-		<div class="chart-warp layout-padding-auto layout-padding-view">
-			<div class="chart-warp-top">
-				<ChartHead />
-			</div>
-			<div class="chart-warp-bottom">
-				<!-- 左边 -->
-				<div class="big-data-down-left">
-					<div class="flex-warp-item">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">天气预报</div>
-							<div class="flex-content">
-								<div class="sky">
-									<SvgIcon name="ele-Sunny" class="sky-left" />
-									<div class="sky-center">
-										<div class="mb2">
-											<span>多云转晴</span>
-											<span>东南风</span>
-											<span class="span ml5">良</span>
-										</div>
-									</div>
-									<div class="sky-right">
-										<span>25</span>
-										<span>°C</span>
-									</div>
-								</div>
-								<div class="sky-dd">
-									<div class="sky-dl" v-for="(v, k) in state.skyList" :key="k" :class="{ 'sky-dl-first': k === 1 }">
-										<div>{{ v.v1 }}</div>
-										<div v-if="v.type === 'title'">{{ v.v2 }}</div>
-										<div v-else>
-											<SvgIcon :name="v.v2" />
-										</div>
-										<div>{{ v.v3 }}</div>
-										<div class="tip">{{ v.v5 }}</div>
-										<div>{{ v.v7 }}</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="flex-warp-item">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">当前设备状态</div>
-							<div class="flex-content flex-content-overflow">
-								<div class="d-states">
-									<div class="d-states-item">
-										<SvgIcon name="ele-Odometer" class="i-bg1" />
-										<div class="d-states-flex">
-											<div class="d-states-item-label">园区设备数</div>
-											<div class="d-states-item-value">99</div>
-										</div>
-									</div>
-									<div class="d-states-item">
-										<SvgIcon name="ele-FirstAidKit" class="i-bg2" />
-										<div class="d-states-flex">
-											<div class="d-states-item-label">预警设备数</div>
-											<div class="d-states-item-value">10</div>
-										</div>
-									</div>
-									<div class="d-states-item">
-										<SvgIcon name="ele-VideoPlay" class="i-bg3" />
-										<div class="d-states-flex">
-											<div class="d-states-item-label">运行设备数</div>
-											<div class="d-states-item-value">20</div>
-										</div>
-									</div>
-								</div>
-								<div class="d-btn">
-									<div class="d-btn-item" v-for="(v, k) in state.dBtnList" :key="k">
-										<i class="d-btn-item-left el-icon-money"></i>
-										<div class="d-btn-item-center">
-											<div>{{ v.v2 }}|{{ v.v3 }}</div>
-										</div>
-										<div class="d-btn-item-eight">{{ v.v4 }}</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="flex-warp-item">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">近30天预警总数</div>
-							<div class="flex-content">
-								<div style="height: 100%" ref="chartsWarningRef"></div>
-							</div>
-						</div>
-					</div>
-				</div>
-
-				<!-- 中间 -->
-				<div class="big-data-down-center">
-					<div class="big-data-down-center-one">
-						<div class="big-data-down-center-one-content">
-							<div style="height: 100%" ref="chartsCenterOneRef"></div>
-						</div>
-					</div>
-					<div class="big-data-down-center-two">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">
-								<span>当前设备监测</span>
-								<span class="flex-title-small">单位:次</span>
-							</div>
-							<div class="flex-content">
-								<div class="flex-content-left">
-									<div class="monitor-item" v-for="(v, k) in state.chartData4List" :key="k">
-										<div class="monitor-wave">
-											<div class="monitor-z-index">
-												<div class="monitor-item-label">{{ v.label }}</div>
-											</div>
-										</div>
-									</div>
-								</div>
-								<div class="flex-content-right">
-									<div style="height: 100%" ref="chartsMonitorRef"></div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-
-				<!-- 右边 -->
-				<div class="big-data-down-right">
-					<div class="flex-warp-item">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">
-								<span>近7天产品追溯扫码统计</span>
-								<span class="flex-title-small">单位:次</span>
-							</div>
-							<div class="flex-content">
-								<div style="height: 100%" ref="chartsSevenDaysRef"></div>
-							</div>
-						</div>
-					</div>
-					<div class="flex-warp-item">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">当前任务统计</div>
-							<div class="flex-content">
-								<div class="task">
-									<div class="task-item task-first-item">
-										<div class="task-item-value task-first">25</div>
-										<div class="task-item-label">待办任务</div>
-									</div>
-									<div class="task-item">
-										<div class="task-item-box task1">
-											<div class="task-item-value">12</div>
-											<div class="task-item-label">施肥</div>
-										</div>
-									</div>
-									<div class="task-item">
-										<div class="task-item-box task2">
-											<div class="task-item-value">3</div>
-											<div class="task-item-label">施药</div>
-										</div>
-									</div>
-									<div class="task-item">
-										<div class="task-item-box task3">
-											<div class="task-item-value">5</div>
-											<div class="task-item-label">农事</div>
-										</div>
-									</div>
-								</div>
-								<div class="progress">
-									<div class="progress-item">
-										<span>施肥率</span>
-										<div class="progress-box">
-											<el-progress :percentage="70" color="#43bdf0"></el-progress>
-										</div>
-									</div>
-									<div class="progress-item">
-										<span>施药率</span>
-										<div class="progress-box">
-											<el-progress :percentage="36" color="#43bdf0"></el-progress>
-										</div>
-									</div>
-									<div class="progress-item">
-										<span>农事率</span>
-										<div class="progress-box">
-											<el-progress :percentage="91" color="#43bdf0"></el-progress>
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-					<div class="flex-warp-item">
-						<div class="flex-warp-item-box">
-							<div class="flex-title">
-								<span>近7天投入品记录</span>
-								<span class="flex-title-small">单位:件</span>
-							</div>
-							<div class="flex-content">
-								<div style="height: 100%" ref="chartsInvestmentRef"></div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script setup lang="ts" name="chartIndex">
-import { defineAsyncComponent, reactive, onMounted, watch, nextTick, onActivated, ref } from 'vue';
-import * as echarts from 'echarts';
-import 'echarts-wordcloud';
-import { storeToRefs } from 'pinia';
-import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
-import { skyList, dBtnList, chartData4List } from '/@/views/chart/chart';
-
-// 引入组件
-const ChartHead = defineAsyncComponent(() => import('/@/views/chart/head.vue'));
-
-// 定义变量内容
-const chartsCenterOneRef = ref();
-const chartsSevenDaysRef = ref();
-const chartsWarningRef = ref();
-const chartsMonitorRef = ref();
-const chartsInvestmentRef = ref();
-const storesTagsViewRoutes = useTagsViewRoutes();
-const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
-const state = reactive({
-	skyList,
-	dBtnList,
-	chartData4List,
-	myCharts: [] as EmptyArrayType,
-});
-
-// 初始化中间图表1
-const initChartsCenterOne = () => {
-	const myChart = echarts.init(chartsCenterOneRef.value);
-	const option = {
-		grid: {
-			top: 15,
-			right: 15,
-			bottom: 20,
-			left: 30,
-		},
-		tooltip: {},
-		series: [
-			{
-				type: 'wordCloud',
-				sizeRange: [12, 40],
-				rotationRange: [0, 0],
-				rotationStep: 45,
-				gridSize: Math.random() * 20 + 5,
-				shape: 'circle',
-				width: '100%',
-				height: '100%',
-				textStyle: {
-					fontFamily: 'sans-serif',
-					fontWeight: 'bold',
-					color: function () {
-						return `rgb(${[Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160)].join(',')})`;
-					},
-				},
-				data: [
-					{ name: 'vue-next-admin', value: 520 },
-					{ name: 'lyt', value: 520 },
-					{ name: 'next-admin', value: 500 },
-					{ name: '更名', value: 420 },
-					{ name: '智慧农业', value: 520 },
-					{ name: '男神', value: 2.64 },
-					{ name: '好身材', value: 4.03 },
-					{ name: '校草', value: 24.95 },
-					{ name: '酷', value: 4.04 },
-					{ name: '时尚', value: 5.27 },
-					{ name: '阳光活力', value: 5.8 },
-					{ name: '初恋', value: 3.09 },
-					{ name: '英俊潇洒', value: 24.71 },
-					{ name: '霸气', value: 6.33 },
-					{ name: '腼腆', value: 2.55 },
-					{ name: '蠢萌', value: 3.88 },
-					{ name: '青春', value: 8.04 },
-					{ name: '网红', value: 5.87 },
-					{ name: '萌', value: 6.97 },
-					{ name: '认真', value: 2.53 },
-					{ name: '古典', value: 2.49 },
-					{ name: '温柔', value: 3.91 },
-					{ name: '有个性', value: 3.25 },
-					{ name: '可爱', value: 9.93 },
-					{ name: '幽默诙谐', value: 3.65 },
-				],
-			},
-		],
-	};
-	myChart.setOption(option);
-	state.myCharts.push(myChart);
-};
-// 初始化近7天产品追溯扫码统计
-const initChartsSevenDays = () => {
-	const myChart = echarts.init(chartsSevenDaysRef.value);
-	const option = {
-		grid: {
-			top: 15,
-			right: 15,
-			bottom: 20,
-			left: 30,
-		},
-		tooltip: {
-			trigger: 'axis',
-		},
-		xAxis: {
-			type: 'category',
-			boundaryGap: false,
-			data: ['1天', '2天', '3天', '4天', '5天', '6天', '7天'],
-		},
-		yAxis: {
-			type: 'value',
-		},
-		series: [
-			{
-				name: '邮件营销',
-				type: 'line',
-				stack: '总量',
-				data: [12, 32, 11, 34, 90, 23, 21],
-			},
-			{
-				name: '联盟广告',
-				type: 'line',
-				stack: '总量',
-				data: [22, 82, 91, 24, 90, 30, 30],
-			},
-			{
-				name: '视频广告',
-				type: 'line',
-				stack: '总量',
-				data: [50, 32, 18, 14, 90, 30, 50],
-			},
-		],
-	};
-	myChart.setOption(option);
-	state.myCharts.push(myChart);
-};
-// 初始化近30天预警总数
-const initChartsWarning = () => {
-	const myChart = echarts.init(chartsWarningRef.value);
-	const option = {
-		grid: {
-			top: 50,
-			right: 20,
-			bottom: 30,
-			left: 30,
-		},
-		tooltip: {
-			trigger: 'item',
-		},
-		series: [
-			{
-				name: '面积模式',
-				type: 'pie',
-				radius: [20, 50],
-				center: ['50%', '50%'],
-				roseType: 'area',
-				itemStyle: {
-					borderRadius: 8,
-				},
-				data: [
-					{ value: 40, name: '监测设备预警' },
-					{ value: 38, name: '天气预警' },
-					{ value: 32, name: '任务预警' },
-					{ value: 30, name: '病虫害预警' },
-				],
-			},
-		],
-	};
-	myChart.setOption(option);
-	state.myCharts.push(myChart);
-};
-// 初始化当前设备监测
-const initChartsMonitor = () => {
-	const myChart = echarts.init(chartsMonitorRef.value);
-	const option = {
-		grid: {
-			top: 15,
-			right: 15,
-			bottom: 20,
-			left: 30,
-		},
-		tooltip: {
-			trigger: 'axis',
-		},
-		xAxis: {
-			type: 'category',
-			boundaryGap: false,
-			data: ['02:00', '04:00', '06:00', '08:00', '10:00', '12:00', '14:00'],
-		},
-		yAxis: {
-			type: 'value',
-		},
-		series: [
-			{
-				itemStyle: {
-					color: '#289df5',
-					borderColor: '#289df5',
-					areaStyle: {
-						type: 'default',
-						opacity: 0.1,
-					},
-				},
-				data: [20, 32, 31, 34, 12, 13, 20],
-				type: 'line',
-				areaStyle: {},
-			},
-		],
-	};
-	myChart.setOption(option);
-	state.myCharts.push(myChart);
-};
-// 初始化近7天投入品记录
-const initChartsInvestment = () => {
-	const myChart = echarts.init(chartsInvestmentRef.value);
-	const option = {
-		grid: {
-			top: 15,
-			right: 15,
-			bottom: 20,
-			left: 30,
-		},
-		tooltip: {
-			trigger: 'axis',
-		},
-		xAxis: {
-			type: 'category',
-			data: ['1天', '2天', '3天', '4天', '5天', '6天', '7天'],
-		},
-		yAxis: {
-			type: 'value',
-		},
-		series: [
-			{
-				data: [10, 20, 15, 80, 70, 11, 30],
-				type: 'bar',
-			},
-		],
-	};
-	myChart.setOption(option);
-	state.myCharts.push(myChart);
-};
-// 批量设置 echarts resize
-const initEchartsResizeFun = () => {
-	nextTick(() => {
-		for (let i = 0; i < state.myCharts.length; i++) {
-			state.myCharts[i].resize();
-		}
-	});
-};
-// 批量设置 echarts resize
-const initEchartsResize = () => {
-	window.addEventListener('resize', initEchartsResizeFun);
-};
-// 页面加载时
-onMounted(() => {
-	initChartsCenterOne();
-	initChartsSevenDays();
-	initChartsWarning();
-	initChartsMonitor();
-	initChartsInvestment();
-	initEchartsResize();
-});
-// 由于页面缓存原因,keep-alive
-onActivated(() => {
-	initEchartsResizeFun();
-});
-// 监听 pinia 中的 tagsview 开启全屏变化,重新 resize 图表,防止不出现/大小不变等
-watch(
-	() => isTagsViewCurrenFull.value,
-	() => {
-		initEchartsResizeFun();
-	}
-);
-</script>
-
-<style scoped lang="scss">
-@import './chart.scss';
-</style>

+ 0 - 750
h5/src/views/data/good.vue

@@ -1,750 +0,0 @@
-<template>
-	<div class="p20">
-		<!-- 功能区 -->
-		<el-card class="box-card">
-			<el-row>
-				<el-col :span="12">
-					<el-text class="mx-1">关键词:</el-text>
-
-					<el-input class="width200" placeholder="请输入物品名称" v-model="data.params.keyword"
-						@keyup.enter.native="getList"> </el-input>
-
-					<el-button type="primary" class="ml10" @click="getList">
-						<el-icon>
-							<ele-Search />
-						</el-icon>
-						查询
-					</el-button>
-				</el-col>
-				<el-col :span="12" class="tr">
-					<el-button type="primary" @click="addPage">添加</el-button>
-					<el-button type="danger" @click="deleteMult">批量删除</el-button>
-					<el-button type="default" @click="checkAll">查看全部</el-button>
-					<el-button type="default" @click="importExcel()">导入</el-button>
-					<el-button type="default" @click="exportExcel()">导出</el-button>
-					<el-button type="default" @click="enable">启用</el-button>
-					<el-button type="default" @click="forbidden">禁用</el-button>
-				</el-col>
-			</el-row>
-		</el-card>
-		<!-- 主体区 -->
-		<el-row :gutter="20">
-			<el-col :span="16">
-				<el-card class="box-card mt20" v-loading="data.loading">
-					<!-- 列表 -->
-					<el-table :data="data.tableData" @selection-change="handleTableDataSelectionChange">
-						<!-- props绑定数据表的字段,lable填写中文 -->
-						<el-table-column type="selection" width="55" />
-						<el-table-column fixed prop="no" label="物品编码" width="150"
-							:default-sort="{ prop: 'date', order: 'descending' }" />
-						<el-table-column prop="name" label="物品名称" width="150" />
-						<el-table-column prop="desc" label="物品介绍" width="" />
-						<el-table-column prop="goodClass.name" label="物品类别" width="" />
-						<el-table-column prop="unit" label="单位" width="" />
-						<el-table-column prop="spec" label="规格" width="" />
-						<el-table-column prop="valid" label="是否有效" width="">
-							<template #default="scope">
-								<el-tag v-if="scope.row.valid == 1">启用</el-tag>
-								<el-tag type="danger" v-if="scope.row.valid == 0">禁用</el-tag>
-							</template>
-						</el-table-column>
-						<el-table-column fixed="right" label="操作" width="200">
-							<template #default="scope">
-								<el-button link type="primary" @click="openDetail(scope.row)">详情</el-button>
-								<el-button link type="primary" @click="print(scope.row)">打印</el-button>
-								<el-button link type="primary" @click="edit(scope.$index, scope.row)">编辑</el-button>
-								<el-button link type="danger" @click="deleteOne(scope.row)">删除</el-button>
-							</template>
-						</el-table-column>
-					</el-table>
-					<!-- 分页 -->
-					<div class="yc_pagebox">
-						<el-pagination v-model:current-page="data.pagination.currentPage"
-							v-model:page-size="data.pagination.pageSize" :page-sizes="getThemeConfig.pageSizeArray"
-							layout="total, sizes, prev, pager, next, jumper" :total="data.pagination.total"
-							@size-change="handleSizeChange" @current-change="handleCurrentChange" />
-					</div>
-				</el-card>
-			</el-col>
-			<el-col :span="8">
-				<el-card class="box-card mt20" v-loading="data.classLoading">
-					<div class="class">
-						<div class="classFont">物品分类</div>
-						<el-button type="primary" @click="addClassPage">新增类别</el-button>
-					</div>
-					<div class="mt20">
-						<el-input class="" placeholder="请输入物品分类名称" v-model="data.classParams.keyword"
-							@keyup.enter.native="getClass"> </el-input>
-					</div>
-					<!-- 列表 -->
-					<el-table :data="data.tableClassData" style="width: 100%" @row-click="checkproduct">
-						<!-- props绑定数据表的字段,lable填写中文 -->
-						<el-table-column prop="name" label="分类名称" width="" />
-						<el-table-column prop="desc" label="分类说明" width="" />
-						<el-table-column fixed="right" label="操作" width="200">
-							<template #default="scope">
-								<el-button link type="primary"
-									@click.stop="classEdit(scope.$index, scope.row)">编辑</el-button>
-								<el-button link type="danger" @click.stop="deleteClassOne(scope.row)">删除</el-button>
-							</template>
-						</el-table-column>
-					</el-table>
-				</el-card>
-			</el-col>
-		</el-row>
-		<!-- 物品弹出容器 ,新增和修改的-->
-		<vuecmf-dialog width="1000px" :model_value="data.dialog.show" :title="data.dialog.title" @close="closePage">
-			<template #content>
-				<el-form :model="newForm" label-width="120px" ref="formRef" v-loading="data.dialog.isLoading">
-					<!-- 每个form-item就是一个表单的标签,label是名称,prop和v-model绑定字段名 -->
-					<!-- <el-form-item label="物品图片" prop="img">
-						<el-avatar shape="square" :size="100" fit="fill" :src="newForm.img" />
-						<el-text class="mx-1" type="info"
-							style="margin-top: -80px; margin-left: 20px;">尺寸316*316,小于100k</el-text>
-					</el-form-item> -->
-					<el-row>
-						<el-col :span="12">
-							<el-form-item label="物品编码" prop="no"
-								:rules="[{ required: true, message: '请选择状态', trigger: 'blur' }]">
-								<el-input v-model="newForm.no" placeholder="填写物品代码" />
-							</el-form-item></el-col>
-						<el-col :span="12">
-							<el-form-item label="物品名称" prop="name"
-								:rules="[{ required: true, message: '请选择状态', trigger: 'blur' }]">
-								<el-input v-model="newForm.name" placeholder="填写物品名称" />
-							</el-form-item></el-col>
-					</el-row>
-					<el-row class="mt20">
-						<el-col :span="12">
-							<el-form-item label="物品单位" prop="unit">
-								<el-input v-model="newForm.unit" placeholder="填写物品单位" />
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="物品介绍" prop="desc">
-								<el-input v-model="newForm.desc" placeholder="填写物品介绍" />
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-row class="mt20">
-						<el-col :span="12">
-							<el-form-item label="物品规格" prop="spec">
-								<el-input v-model="newForm.spec" placeholder="填写物品规格" />
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="物品分类" prop="good_class_id">
-								<el-select v-model="newForm.good_class_id" value-key="id" placeholder="选择物品分类">
-									<el-option v-for="item in data.region" :key="item.id" :label="item.name"
-										:value="item.id" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-form-item class="mt20" label="状态" prop="valid"
-						:rules="[{ required: true, message: '请选择状态', trigger: 'blur' }]">
-						<el-radio-group v-model="newForm.valid">
-							<el-radio :label="1">启用</el-radio>
-							<el-radio :label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-				</el-form>
-				<div class="height20"></div>
-			</template>
-			<template #footer>
-				<el-button type="default" @click="closePage">取消</el-button>
-				<el-button type="primary" @click="submitForm(formRef)">确定</el-button>
-			</template>
-		</vuecmf-dialog>
-
-		<!-- 详情弹出容器-->
-		<vuecmf-dialog width="1000px" :model_value="data.dialogDetail.showDetail" :title="data.dialogDetail.titleDetail"
-			@close="closePage">
-			<template #content>
-				<el-form :model="newForm" label-width="120px" ref="formRef" v-loading="data.dialogDetail.isLoadingDetail">
-					<!-- 每个form-item就是一个表单的标签,label是名称,prop和v-model绑定字段名 -->
-					<!-- <el-form-item label="物品图片" prop="img">
-						<el-avatar shape="square" :size="100" fit="fill" :src="newForm.img" />
-						<el-text class="mx-1" type="info"
-							style="margin-top: -80px; margin-left: 20px;">尺寸316*316,小于100k</el-text>
-					</el-form-item> -->
-					<el-row>
-						<el-col :span="12">
-							<el-form-item label="物品编码:" prop="no">
-								<el-text class="mx-1">{{ newForm.no }}</el-text>
-							</el-form-item></el-col>
-						<el-col :span="12">
-							<el-form-item label="物品名称:" prop="name">
-								<el-text class="mx-1">{{ newForm.name }}</el-text>
-							</el-form-item></el-col>
-					</el-row>
-					<el-row class="mt20">
-						<el-col :span="12">
-							<el-form-item label="物品单位:" prop="unit">
-								<el-text class="mx-1">{{ newForm.unit }}</el-text>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="物品介绍:" prop="desc">
-								<el-text class="mx-1">{{ newForm.desc }}</el-text>
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-row class="mt20">
-						<el-col :span="12">
-							<el-form-item label="物品规格:" prop="spec">
-								<el-text class="mx-1">{{ newForm.spec }}</el-text>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="物品分类:" prop="good_class_id">
-								<el-text class="mx-1">{{ newForm.good_class_id }}</el-text>
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-form-item class="mt20" label="状态:" prop="valid">
-						<el-text class="mx-1">{{ newForm.valid == 1 ? "启用" : "禁用" }}</el-text>
-					</el-form-item>
-				</el-form>
-				<div class="height20"></div>
-			</template>
-		</vuecmf-dialog>
-
-		<!-- 物品分类弹出容器 ,新增和修改的-->
-		<vuecmf-dialog width="1000px" :model_value="data.classDialog.classShow" :title="data.classDialog.classTitle"
-			@close="closePage">
-			<template #content>
-				<el-form :model="data.form" label-width="120px" ref="formRef" v-loading="data.classDialog.classIsLoading">
-					<!-- 每个form-item就是一个表单的标签,label是名称,prop和v-model绑定字段名 -->
-					<el-form-item label="分类名称" prop="name"> <el-input v-model="data.form.name" placeholder="填写分类名称" />
-					</el-form-item>
-					<el-form-item label="分类说明" prop="desc"> <el-input v-model="data.form.desc" placeholder="填写分类说明" />
-					</el-form-item>
-				</el-form>
-				<div class="height20"></div>
-			</template>
-			<template #footer>
-				<el-button type="default" @click="closePage">取消</el-button>
-				<el-button type="primary" @click="submitClassForm(formRef)">确定</el-button>
-			</template>
-		</vuecmf-dialog>
-		<ImportExcelDialog ref="importExcelDialogRef" @refresh="getTableData()" />
-		<ExportExcelDialog ref="exportExcelDialogRef" @refresh="getTableData()" />
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { defineAsyncComponent, onMounted, reactive, computed, ref, watch } from 'vue';
-import { storeToRefs } from 'pinia';
-import { useThemeConfig } from '/@/stores/themeConfig';
-import Good from '/@/api/model/Good'; //gzs:引入模型
-import GoodClass from '/@/api/model/GoodClass';//gzs:引入模型
-import { ElMessage, ElMessageBox } from 'element-plus';
-import type { FormInstance, FormRules } from 'element-plus';
-import router from '/@/router';
-// 定义变量内容
-const storesThemeConfig = useThemeConfig();
-const { themeConfig } = storeToRefs(storesThemeConfig);
-// 获取布局配置信息
-const getThemeConfig = computed(() => {
-	return themeConfig.value;
-});
-const formRef = ref<FormInstance>();
-const multipleSelection = ref([]);
-//双向绑定的变量,推荐只定义1个
-//注意:所有变量初始化后再使用
-const data = reactive({
-	//请求查询的参数
-	params: {
-		pageSize: getThemeConfig.value.pageSize, //分页大小
-		page: 1, //当前页面
-		keyword: '', //关键字
-		good_class_id: null,
-	},
-	classParams: {
-		pageSize: getThemeConfig.value.pageSize, //分页大小
-		page: 1, //当前页面
-		keyword: '', //关键字
-	},
-	//分页组件的变量
-	pagination: {
-		currentPage: 1,
-		pageSize: getThemeConfig.value.pageSize,
-		total: 100,
-	},
-	loading: false, //是否加载中
-	classPagination: {
-		currentPage: 1,
-		pageSize: getThemeConfig.value.pageSize,
-		total: 100,
-	},
-	classLoading: false, //是否加载中
-	tableData: [], // 表格数据
-	tableClassData: [], //分类表格数据
-	//物品弹出框
-	dialog: {
-		show: false, // 是否显示弹出框,用于最大化、最小化及还原
-		title: '添加', // 弹出框标题
-		isLoading: false, //是否加载中
-		type: "edit" as "submit" | "edit"	// 表单类型 edit|submit
-	},
-	//详情弹出框
-	dialogDetail: {
-		showDetail: false, // 是否显示弹出框,用于最大化、最小化及还原
-		titleDetail: '添加', // 弹出框标题
-		isLoadingDetail: false, //是否加载中
-	},
-	//分类弹出框
-	classDialog: {
-		classShow: false, // 是否显示弹出框,用于最大化、最小化及还原
-		classTitle: '添加', // 弹出框标题
-		classIsLoading: false, //是否加载中
-	},
-	form: {} as any, //分类新增和修改表单数据
-	//扫码枪
-	value: '',
-	//物品分类选择
-	region: [] as any,
-	//导出
-	impparam: {
-		date: "",
-		keyword: "",
-		product_id: "",
-		classes_id: "",
-		page: 1,
-		list_rows: 10,
-		is_sort: 0
-	},
-});
-/**
- * 监听页数
- */
-watch(() => [data.params.good_class_id, data.params.keyword], (count, prevCount) => {
-	data.params.page = 1
-	getList();
-}
-)
-
-// 初始化表格数据
-const getTableData = () => {
-	getList();
-	getClass();
-};
-/**
- * 导入、导出
- */
-const ImportExcelDialog = defineAsyncComponent(() => import("/@/views/payrollModule/import.vue"));
-const importExcelDialogRef = ref();
-const importExcel = () => {
-	importExcelDialogRef.value.openDialog();
-};
-
-const ExportExcelDialog = defineAsyncComponent(() => import("/@/views/payrollModule/export.vue"));
-const exportExcelDialogRef = ref();
-const exportExcel = () => {
-	// return ElMessage.warning("功能正在完善中");
-	exportExcelDialogRef.value.openDialog(data.impparam);
-};
-/**
- * 实例化1个表单对象
- */
-const newForm = reactive({
-	no: '',
-	name: '',
-	desc: '',
-	unit: '',
-	img: '',
-	spec: '',
-	index: 0,
-	good_class_id: '' as number | string,
-	valid: 1,
-});
-/**
- * 实例化1个分类表单对象
- */
-const newClassForm = () => {
-	let form = {
-		id: 0,
-		name: '',
-		desc: '',
-		valid: 1,
-	};
-	return form;
-};
-/**
- * 启用、禁用
- */
-const enable = async () => {
-	const items = multipleSelection.value.map((item: any) => { item.valid = 1; return item });
-	let res = await Good.edit(items);
-	if (res.code != 0) {
-		return;
-	}
-	ElMessage.success(res.msg);
-	getList()
-};
-const forbidden = async () => {
-	const items = multipleSelection.value.map((item: any) => { item.valid = 0; return item });
-	let res = await Good.edit(items);
-	if (res.code != 0) {
-		return;
-	}
-	ElMessage.success(res.msg);
-	getList()
-};
-/**
- * 切换页面大小
- * @param val
- */
-const handleSizeChange = (val: number) => {
-	data.params.pageSize = val;
-	data.classParams.pageSize = val;
-	getList();
-	getClass()
-};
-/**
- * 翻页
- */
-const handleCurrentChange = (val: number) => {
-	data.params.page = val;
-	getList();
-};
-
-const search = async () => {
-	data.params.page = 1;
-	await getList();
-};
-/**
- * 页面初始化方法,有就写逻辑,没有可以留空
- */
-const init = async () => { };
-/**
- * 获取所有分类数据
- */
-const getAll = async () => {
-	data.loading = true;
-	const res = await GoodClass.all();
-	data.loading = false;
-	if (res.code != 0) {
-		return;
-	}
-	console.log("getAllres", res);
-	data.region = res.data
-	console.log("data.region", data.region);
-};
-/**
- * 获取分类列表数据
- */
-const getClass = async () => {
-	data.classLoading = true;
-	const res = await GoodClass.list({
-		pageParams: {
-			page: data.classParams.page,
-			size: data.classParams.pageSize,
-		},
-		keyword: data.classParams.keyword
-	});
-	data.classLoading = false;
-	if (res.code != 0) {
-		return;
-	}
-	console.log("getClass", res);
-	data.tableClassData = res.data.data;
-	//分页数据赋值
-	// data.classPagination.total = res.data.total;
-	// data.classPagination.currentPage = res.data.current_page;
-	// data.classPagination.pageSize = res.data.per_page;
-};
-/**
- * 点击查看全部
- */
-const checkAll = async () => {
-	data.params.good_class_id = null
-	getList();
-};
-/**
- * 点击分类选项查看物品分类
- */
-const checkproduct = async (row: any) => {
-	console.log("check", row.id);
-	data.params.good_class_id = row.id;
-};
-/**
- * 获取分页数据
- */
-const getList = async () => {
-	data.loading = true;
-	const res = await Good.list({
-		pageParams: {
-			page: data.params.page,
-			size: data.params.pageSize,
-		},
-		keyword: data.params.keyword,
-		good_class_id: data.params.good_class_id
-	}); //异步请求获取 分页数据,接口返回,0为成功,非0失败
-	data.loading = false;
-	if (res.code != 0) {
-		return;
-	}
-	data.tableData = res.data.data;
-	//分页数据赋值
-	data.pagination.total = res.data.total;
-	data.pagination.currentPage = res.data.current_page;
-	data.pagination.pageSize = res.data.per_page;
-};
-// 翻页
-const handleTableDataSelectionChange = (val: any) => {
-	multipleSelection.value = val;
-	console.log('lzj500🚀 ~ file: index.vue:203 ~ handleTableDataSelectionChange ~ val:', val);
-};
-//=========添加 和 编辑 删除
-/**
- * 关闭弹出框
- */
-const closePage = () => {
-	data.dialog.show = false;
-	data.dialogDetail.showDetail = false;
-	data.classDialog.classShow = false;
-};
-
-/**
- * 弹出新增分类页面
- */
-const addClassPage = () => {
-	data.classDialog.classShow = true;
-	data.classDialog.classTitle = '添加分类'; //gzs:标题
-	data.form = newClassForm();
-	console.log('lzj500🚀 ~ file: index.vue:160 ~ addPage ~ dialog:', data.classDialog);
-};
-/**
- * 弹出新增页面
- */
-const addPage = async () => {
-	await getAll();
-	data.dialog.show = true;
-	data.dialog.title = '添加物品'; //gzs:标题
-	data.dialog.type = "submit";
-	newForm.no = '';
-	newForm.desc = '';
-	newForm.good_class_id = '';
-	newForm.img = '';
-	newForm.unit = '';
-	newForm.valid = 1;
-	newForm.spec = '';
-	newForm.name = '';
-	console.log('lzj500🚀 ~ file: index.vue:160 ~ addPage ~ dialog:', data.dialog);
-};
-/**
- * 弹出 分类编辑页面
- */
-const classEdit = async (index: number, item: any) => {
-	data.classDialog.classShow = true;
-	data.classDialog.classTitle = '编辑分类';
-	data.form = item;
-};
-/**
- * 弹出 编辑页面
- */
-const edit = async (index: number, item: any) => {
-	data.dialog.show = true;
-	data.dialog.title = '编辑物品';
-	data.dialog.type = "edit";
-	newForm.no = item.no;
-	newForm.desc = item.desc;
-	newForm.good_class_id = item.good_class_id;
-	newForm.img = item.img;
-	newForm.unit = item.unit;
-	newForm.valid = item.valid;
-	newForm.spec = item.spec;
-	newForm.name = item.name;
-	newForm.index = item.id;
-	// await detail(item.id);
-};
-/**
- * 弹出详情页面
- */
-const openDetail = async (item: any) => {
-	console.log("itemitem", item);
-
-	data.dialogDetail.showDetail = true;
-	data.dialogDetail.titleDetail = '仓库详情';
-	newForm.no = item.no;
-	newForm.desc = item.desc;
-	newForm.good_class_id = item.goodClass.name;
-	newForm.img = item.img;
-	newForm.unit = item.unit;
-	newForm.valid = item.valid;
-	newForm.spec = item.spec;
-	newForm.name = item.name;
-	newForm.index = item.id;
-};
-/**
- * 打印机打印
- */
-const print = (item: any) => {
-	// let url = window.location.href.split('/data/good')[0];
-	// setTimeout(() => {
-	// 	window.open(url + `/data/print?no=${item.no}&name=${item.name}`);
-	// }, 500)
-	router.push({ name: 'printGood', query: { no: item.no, name: item.name } });
-};
-/**
- * 分类的提交 表单,新增和修改都在这里
- */
-const submitClassForm = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.validate(async (valid) => {
-		if (!valid) {
-			console.log('error submit!');
-			return false;
-		}
-
-		// console.log('submit!');
-		let res = null;
-		data.classDialog.classIsLoading = true;
-		if (data.form?.id) {
-			//如果是编辑
-			res = await GoodClass.edit(data.form);
-		} else {
-			res = await GoodClass.add(data.form);
-		}
-		data.classDialog.classIsLoading = false;
-		if (res.code != 0) {
-			return;
-		}
-		ElMessage.success(res.msg);
-		await getClass();
-		search();
-		closePage();
-	});
-};
-/**
- * 提交 表单,新增和修改都在这里
- */
-const submitForm = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.validate(async (valid) => {
-		if (!valid) {
-			console.log('error submit!');
-			return false;
-		}
-		let res = null;
-		data.dialog.isLoading = true;
-		console.log("🚀 ~ file: good.vue:638 ~ formEl.validate ~ newForm:", newForm)
-		if (data.dialog.type == "edit") {
-			//如果是编辑
-			res = await Good.edit([{
-				id: newForm.index,
-				no: newForm.no,
-				name: newForm.name,
-				img: newForm.img,
-				spec: newForm.spec,
-				valid: newForm.valid,
-				unit: newForm.unit,
-				desc: newForm.desc,
-				good_class_id: newForm.good_class_id,
-			}])
-		} else {
-			res = await Good.add(newForm);
-		}
-		data.dialog.isLoading = false;
-		if (res.code != 0) {
-			return;
-		}
-		ElMessage.success(res.msg);
-		search();
-		closePage();
-	});
-};
-//删除分类1条数据
-const deleteClassOne = (item: any) => {
-	ElMessageBox.confirm('删除后不可恢复,确定要删除该记录吗?', '警告', {
-		confirmButtonText: '确定',
-		cancelButtonText: '取消',
-		type: 'warning',
-	})
-		.then(() => {
-			doClassDelete(item.id);
-		})
-		.catch(() => { });
-};
-//删除1条数据
-const deleteOne = (item: any) => {
-	ElMessageBox.confirm('删除后不可恢复,确定要删除该记录吗?', '警告', {
-		confirmButtonText: '确定',
-		cancelButtonText: '取消',
-		type: 'warning',
-	})
-		.then(() => {
-			doDelete([item.id]);
-		})
-		.catch(() => { });
-};
-//删除多条数据
-const deleteMult = (item: any) => {
-	if (multipleSelection.value.length == 0) {
-		ElMessage.error('请选择要删除的记录');
-		return;
-	}
-	let ids = multipleSelection.value.map((item: any) => item.id);
-	ElMessageBox.confirm('删除后不可恢复,确定要删除选中记录吗?', '警告', {
-		confirmButtonText: '确定',
-		cancelButtonText: '取消',
-		type: 'warning',
-	})
-		.then(() => {
-			doDelete(ids);
-		})
-		.catch(() => { });
-};
-
-//执行分类删除请求
-const doClassDelete = async (id: any) => {
-	data.loading = true;
-	let res = await GoodClass.delete({ id });
-	data.loading = false;
-	if (res.code != 0) {
-		return;
-	}
-	await getClass();
-};
-//执行删除请求
-const doDelete = async (id: any) => {
-	data.loading = true;
-	let res = await Good.delete({ id });
-	data.loading = false;
-	if (res.code != 0) {
-		return;
-	}
-	await getList();
-};
-//=========页面事件
-/**
- * 页面加载时事件
- */
-onMounted(async () => {
-	getList();
-	getClass();
-	getAll();
-	init();
-});
-
-
-</script>
-<style>
-.class {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-}
-
-.classFont {
-	color: #31373D;
-	font-size: 14px;
-	font-weight: bold;
-}
-
-.active {
-	color: blue;
-}
-</style>

+ 0 - 12
h5/src/views/menu/menu1/menu11/index.vue

@@ -1,12 +0,0 @@
-<template>
-	<div class="layout-pd">
-		<el-input v-model="val" placeholder="menu11:请输入内容测试路由缓存"></el-input>
-	</div>
-</template>
-
-<script setup lang="ts" name="menu11">
-import { ref } from 'vue';
-
-// 定义变量内容
-const val = ref('');
-</script>

+ 0 - 12
h5/src/views/menu/menu1/menu12/menu121/index.vue

@@ -1,12 +0,0 @@
-<template>
-	<div class="layout-pd">
-		<el-input v-model="val" placeholder="menu121:请输入内容测试路由缓存"></el-input>
-	</div>
-</template>
-
-<script setup lang="ts" name="menu121">
-import { ref } from 'vue';
-
-// 定义变量内容
-const val = ref('');
-</script>

+ 0 - 12
h5/src/views/menu/menu1/menu12/menu122/index.vue

@@ -1,12 +0,0 @@
-<template>
-	<div class="layout-pd">
-		<el-input v-model="val" placeholder="menu122:请输入内容测试路由缓存"></el-input>
-	</div>
-</template>
-
-<script setup lang="ts" name="menu122">
-import { ref } from 'vue';
-
-// 定义变量内容
-const val = ref('');
-</script>

+ 0 - 21
h5/src/views/menu/menu1/menu13/index.vue

@@ -1,21 +0,0 @@
-<template>
-	<div class="layout-pd">
-		<el-input v-model="val" placeholder="menu13:请输入内容测试路由缓存"></el-input>
-	</div>
-</template>
-
-<script setup lang="ts" name="menu13">
-import { ref, onActivated, onMounted } from 'vue';
-
-// 定义变量内容
-const val = ref('');
-
-// 页面加载时
-onMounted(() => {
-	console.log(2222);
-});
-// keep-alive 钩子函数,页面进入时
-onActivated(() => {
-	console.log(1111);
-});
-</script>

+ 0 - 12
h5/src/views/menu/menu2/index.vue

@@ -1,12 +0,0 @@
-<template>
-	<div class="layout-pd">
-		<el-input v-model="val" placeholder="menu2:请输入内容测试路由缓存"></el-input>
-	</div>
-</template>
-
-<script setup lang="ts" name="menu2">
-import { ref } from 'vue';
-
-// 定义变量内容
-const val = ref('');
-</script>

+ 0 - 168
h5/src/views/payrollModule/crkexport.vue

@@ -1,168 +0,0 @@
-<template>
-	<div class="system-edit-user-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="400px" draggable
-			:close-on-click-modal="false">
-			<div>确定要导出物品记录表吗?</div>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary" @click="onSubmit()">
-						{{ state.dialog.submitTxt }}
-					</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup name="payrollModuleAttendanceImport">
-import { reactive, ref, nextTick } from 'vue';
-import { ElMessageBox, ElMessage } from 'element-plus';
-import type { ElForm, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
-import Repertory from '/@/api/model/Repertory';
-import config from '/@/config';
-import { ElLoading } from "element-plus";
-type FormInstance = InstanceType<typeof ElForm>;
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-const deptDialogFormRef = ref();
-const upload = ref<UploadInstance>();
-const refForm = ref<FormInstance>();
-const uploadEle = ref<any>(null);
-const state = reactive<any>({
-	productOptions: [],
-	ruleForm: {
-		path: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	isTips: false,
-	fileUrl: '',
-	uploadUrl: config.host + '/admin/upload/file',
-	download_file_url: config.file + '/static/salaryRateItem.xlsx',
-	param: {},
-});
-
-// 打开弹窗
-const openDialog = (param: any) => {
-	//param 导出参数
-	state.param = param;
-	state.dialog.isShowDialog = true;
-	state.dialog.title = '导出物品记录表';
-	state.dialog.submitTxt = '导 出';
-	console.log("param", param);
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-// 清除文件缓存
-const ClearFiles = () => {
-	console.log('uploadEle.value=>', uploadEle.value);
-	if (uploadEle.value != null) {
-		state.isTips = false;
-		state.ruleForm.path = '';
-		uploadEle.value.clearFiles();
-	}
-};
-
-// 导出
-const onSubmit = async () => {
-	const loadingInstance = ElLoading.service({ fullscreen: true, text: "正在导出,请耐心等待" });
-	let res = await Repertory.export(state.param);
-	if (res.code != 0) {
-		nextTick(() => {
-			loadingInstance.close();
-		});
-		return ElMessage.error(res.msg);
-	}
-	state.download_file_url = res.data.url;
-	console.log('state.download_file_url', state.download_file_url);
-	window.open(state.download_file_url);
-	nextTick(() => {
-		loadingInstance.close();
-	});
-	setTimeout(() => {
-		ElMessage.success('导出成功,请留意浏览器下载列表');
-		console.log('submit succ!');
-	}, 500)
-	closeDialog();
-	emit('refresh');
-};
-
-// 上传文件成功的事件
-const handleAvatarSuccess = (res: any, file: any) => {
-	console.log('res=>', res);
-	console.log('file=>', file);
-	state.ruleForm.path = res.data.file;
-	state.fileUrl = res.data.url;
-	state.isTips = true;
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-.down-a {
-	text-decoration: none;
-	color: #FFFFFF;
-}
-
-.tips {
-	font-size: 12px;
-	line-height: 1.2;
-	color: #666;
-}
-
-.two {
-	margin: 8px 0px;
-}
-
-.download-file {
-	margin-top: 10px;
-
-	a {
-		text-decoration: none;
-		color: #409eff;
-	}
-}
-
-.avatar-uploader .avatar {
-	width: 178px;
-	height: 178px;
-	display: block;
-}
-
-.avatar-uploader .el-upload {
-	border: 1px dashed var(--el-border-color);
-	border-radius: 6px;
-	cursor: pointer;
-	position: relative;
-	overflow: hidden;
-	transition: var(--el-transition-duration-fast);
-}
-
-.avatar-uploader .el-upload:hover {
-	border-color: var(--el-color-primary);
-}
-
-.el-icon.avatar-uploader-icon {
-	font-size: 28px;
-	color: #8c939d;
-	width: 178px;
-	height: 178px;
-	text-align: center;
-}
-</style>

+ 0 - 171
h5/src/views/payrollModule/export.vue

@@ -1,171 +0,0 @@
-<template>
-	<div class="system-edit-user-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="400px" draggable
-			:close-on-click-modal="false">
-			<div>确定要导出物品记录表吗?</div>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary" @click="onSubmit()">
-						{{ state.dialog.submitTxt }}
-					</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup name="payrollModuleAttendanceImport">
-import { reactive, ref, nextTick } from 'vue';
-import { ElMessageBox, ElMessage } from 'element-plus';
-import type { ElForm, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
-import { UploadFilled } from '@element-plus/icons-vue';
-import noPacking from '/@/api/noPacking/noPacking';
-import Good from '/@/api/model/Good'; //gzs:引入模型
-import config from '/@/config';
-import { ElLoading } from "element-plus";
-type FormInstance = InstanceType<typeof ElForm>;
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-const deptDialogFormRef = ref();
-
-const upload = ref<UploadInstance>();
-const refForm = ref<FormInstance>();
-const uploadEle = ref<any>(null);
-const state = reactive<any>({
-	productOptions: [],
-	ruleForm: {
-		path: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	isTips: false,
-	fileUrl: '',
-	uploadUrl: config.host + '/admin/upload/file',
-	download_file_url: config.file + '/static/salaryRateItem.xlsx',
-	param: {},
-});
-
-// 打开弹窗
-const openDialog = (param: any) => {
-	//param 导出参数
-	state.param = param;
-	state.dialog.isShowDialog = true;
-	state.dialog.title = '导出物品记录表';
-	state.dialog.submitTxt = '导 出';
-	console.log("param", param);
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-// 清除文件缓存
-const ClearFiles = () => {
-	console.log('uploadEle.value=>', uploadEle.value);
-	if (uploadEle.value != null) {
-		state.isTips = false;
-		state.ruleForm.path = '';
-		uploadEle.value.clearFiles();
-	}
-};
-
-// 导出
-const onSubmit = async () => {
-	const loadingInstance = ElLoading.service({ fullscreen: true, text: "正在导出,请耐心等待" });
-	let res = await Good.export(state.param);
-	if (res.code != 0) {
-		nextTick(() => {
-			loadingInstance.close();
-		});
-		return ElMessage.error(res.msg);
-	}
-	state.download_file_url = res.data.url;
-	console.log('state.download_file_url', state.download_file_url);
-	window.open(state.download_file_url);
-	nextTick(() => {
-		loadingInstance.close();
-	});
-	setTimeout(() => {
-		ElMessage.success('导出成功,请留意浏览器下载列表');
-		console.log('submit succ!');
-	}, 500)
-	closeDialog();
-	emit('refresh');
-};
-
-// 上传文件成功的事件
-const handleAvatarSuccess = (res: any, file: any) => {
-	console.log('res=>', res);
-	console.log('file=>', file);
-	state.ruleForm.path = res.data.file;
-	state.fileUrl = res.data.url;
-	state.isTips = true;
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-.down-a {
-	text-decoration: none;
-	color: #FFFFFF;
-}
-
-.tips {
-	font-size: 12px;
-	line-height: 1.2;
-	color: #666;
-}
-
-.two {
-	margin: 8px 0px;
-}
-
-.download-file {
-	margin-top: 10px;
-
-	a {
-		text-decoration: none;
-		color: #409eff;
-	}
-}
-
-.avatar-uploader .avatar {
-	width: 178px;
-	height: 178px;
-	display: block;
-}
-
-.avatar-uploader .el-upload {
-	border: 1px dashed var(--el-border-color);
-	border-radius: 6px;
-	cursor: pointer;
-	position: relative;
-	overflow: hidden;
-	transition: var(--el-transition-duration-fast);
-}
-
-.avatar-uploader .el-upload:hover {
-	border-color: var(--el-color-primary);
-}
-
-.el-icon.avatar-uploader-icon {
-	font-size: 28px;
-	color: #8c939d;
-	width: 178px;
-	height: 178px;
-	text-align: center;
-}
-</style>

+ 0 - 177
h5/src/views/payrollModule/import.vue

@@ -1,177 +0,0 @@
-<template>
-	<div class="system-edit-user-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="800px" draggable
-			:close-on-click-modal="false">
-			<el-form :model="state.ruleForm" ref="refForm">
-				<el-form-item label="文件" prop="path" :rules="[{ required: true, message: '请上传文件' }]">
-					<el-upload ref="uploadEle" class="upload-demo" drag :action="state.uploadUrl" :limit="1"
-						:on-exceed="handleExceed" method="post" :on-success="handleAvatarSuccess" :on-remove="ClearFiles"
-						:auto-upload="false" :headers="{ token: state.getToken }">
-						<el-icon class="el-icon--upload">
-							<upload-filled />
-						</el-icon>
-						<div class="el-upload__text">拖拽文件或者 <em>点击上传</em></div>
-						<template #tip>
-							<div class="el-upload__tip" v-if="state.isTips">已上传文件到:{{ state.fileUrl }},请点击导入按钮开始导入</div>
-						</template>
-					</el-upload>
-				</el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary" @click="onSubmit()">{{ state.dialog.submitTxt }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup name="payrollModuleAttendanceImport">
-import { reactive, ref, } from 'vue';
-import { ElMessage, genFileId } from 'element-plus';
-import type { ElForm, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
-import { UploadFilled } from '@element-plus/icons-vue';
-type FormInstance = InstanceType<typeof ElForm>;
-import config from '/@/config';
-import { Session } from '/@/utils/storage';
-
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-const deptDialogFormRef = ref();
-
-const upload = ref<UploadInstance>();
-const refForm = ref<FormInstance>();
-const uploadEle = ref<any>(null);
-const state = reactive<any>({
-	productOptions: [],
-	ruleForm: {
-		path: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	isTips: false,
-	fileUrl: '',
-	uploadUrl: config.host + '/admin/upload/attachment',
-	download_file_url: config.file + '/public/static/execl/GOOD_TEMPLATE.xlsx',
-	getToken: Session.get('token')
-});
-
-// 打开弹窗
-const openDialog = () => {
-	state.ruleForm = {
-		path: '',
-	};
-	ClearFiles();
-	state.dialog.isShowDialog = true;
-	state.dialog.title = '上传附件';
-	state.dialog.submitTxt = '上传';
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-// 清除文件缓存
-const ClearFiles = () => {
-	console.log('uploadEle.value=>', uploadEle.value);
-	if (uploadEle.value != null) {
-		state.isTips = false;
-		state.ruleForm.path = '';
-		uploadEle.value.clearFiles();
-	}
-};
-
-// 新增
-const onSubmit = () => {
-	uploadEle.value!.submit()
-	closeDialog();
-};
-//替换上一次文件
-const handleExceed: UploadProps['onExceed'] = (files) => {
-	uploadEle.value!.clearFiles()
-	const file = files[0] as UploadRawFile
-	file.uid = genFileId()
-	uploadEle.value!.handleStart(file)
-}
-
-const clearData = () => {
-	state.isTips = false;
-	state.ruleForm.path = '';
-	uploadEle.value.clearFiles();
-}
-
-// 上传文件成功的事件
-const handleAvatarSuccess = (res: any, file: any) => {
-	if (res.code == 0) {
-		ElMessage.success('上传成功!');
-		console.log('res=>', res);
-		console.log('file=>', file);
-		state.ruleForm.path = res.data.path;
-		state.fileUrl = res.data.url;
-		state.isTips = true;
-
-		emit('refresh', [state.ruleForm.path, file.name]);
-	}
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-.tips {
-	font-size: 12px;
-	line-height: 1.2;
-	color: #666;
-}
-
-.two {
-	margin: 8px 0px;
-}
-
-a {
-	text-decoration: none;
-	color: #409eff;
-}
-
-.download-file {
-	margin-top: 10px;
-}
-
-.avatar-uploader .avatar {
-	width: 178px;
-	height: 178px;
-	display: block;
-}
-
-.avatar-uploader .el-upload {
-	border: 1px dashed var(--el-border-color);
-	border-radius: 6px;
-	cursor: pointer;
-	position: relative;
-	overflow: hidden;
-	transition: var(--el-transition-duration-fast);
-}
-
-.avatar-uploader .el-upload:hover {
-	border-color: var(--el-color-primary);
-}
-
-.el-icon.avatar-uploader-icon {
-	font-size: 28px;
-	color: #8c939d;
-	width: 178px;
-	height: 178px;
-	text-align: center;
-}
-</style>

+ 0 - 170
h5/src/views/payrollModule/kcexport.vue

@@ -1,170 +0,0 @@
-<template>
-	<div class="system-edit-user-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="400px" draggable
-			:close-on-click-modal="false">
-			<div>确定要导出在途库存记录表吗?</div>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary" @click="onSubmit()">
-						{{ state.dialog.submitTxt }}
-					</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup name="payrollModuleAttendanceImport">
-import { reactive, ref, nextTick } from 'vue';
-import { ElMessageBox, ElMessage } from 'element-plus';
-import type { ElForm, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
-import { UploadFilled } from '@element-plus/icons-vue';
-import realinventory from '/@/api/model/realinventory'; //gzs:引入模型
-import config from '/@/config';
-import { ElLoading } from "element-plus";
-type FormInstance = InstanceType<typeof ElForm>;
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-const deptDialogFormRef = ref();
-
-const upload = ref<UploadInstance>();
-const refForm = ref<FormInstance>();
-const uploadEle = ref<any>(null);
-const state = reactive<any>({
-	productOptions: [],
-	ruleForm: {
-		path: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	isTips: false,
-	fileUrl: '',
-	uploadUrl: config.host + '/admin/upload/file',
-	download_file_url: config.file + '/static/salaryRateItem.xlsx',
-	param: {},
-});
-
-// 打开弹窗
-const openDialog = (param: any) => {
-	//param 导出参数
-	state.param = param;
-	state.dialog.isShowDialog = true;
-	state.dialog.title = '导出库存记录表';
-	state.dialog.submitTxt = '导 出';
-	console.log("param", param);
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-// 清除文件缓存
-const ClearFiles = () => {
-	console.log('uploadEle.value=>', uploadEle.value);
-	if (uploadEle.value != null) {
-		state.isTips = false;
-		state.ruleForm.path = '';
-		uploadEle.value.clearFiles();
-	}
-};
-
-// 导出
-const onSubmit = async () => {
-	const loadingInstance = ElLoading.service({ fullscreen: true, text: "正在导出,请耐心等待" });
-	let res = await realinventory.export(state.param);
-	if (res.code != 0) {
-		nextTick(() => {
-			loadingInstance.close();
-		});
-		return ElMessage.error(res.msg);
-	}
-	state.download_file_url = res.data.url;
-	console.log('state.download_file_url', state.download_file_url);
-	window.open(state.download_file_url);
-	nextTick(() => {
-		loadingInstance.close();
-	});
-	setTimeout(() => {
-		ElMessage.success('导出成功,请留意浏览器下载列表');
-		console.log('submit succ!');
-	}, 500)
-	closeDialog();
-	emit('refresh');
-};
-
-// 上传文件成功的事件
-const handleAvatarSuccess = (res: any, file: any) => {
-	console.log('res=>', res);
-	console.log('file=>', file);
-	state.ruleForm.path = res.data.file;
-	state.fileUrl = res.data.url;
-	state.isTips = true;
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-.down-a {
-	text-decoration: none;
-	color: #FFFFFF;
-}
-
-.tips {
-	font-size: 12px;
-	line-height: 1.2;
-	color: #666;
-}
-
-.two {
-	margin: 8px 0px;
-}
-
-.download-file {
-	margin-top: 10px;
-
-	a {
-		text-decoration: none;
-		color: #409eff;
-	}
-}
-
-.avatar-uploader .avatar {
-	width: 178px;
-	height: 178px;
-	display: block;
-}
-
-.avatar-uploader .el-upload {
-	border: 1px dashed var(--el-border-color);
-	border-radius: 6px;
-	cursor: pointer;
-	position: relative;
-	overflow: hidden;
-	transition: var(--el-transition-duration-fast);
-}
-
-.avatar-uploader .el-upload:hover {
-	border-color: var(--el-color-primary);
-}
-
-.el-icon.avatar-uploader-icon {
-	font-size: 28px;
-	color: #8c939d;
-	width: 178px;
-	height: 178px;
-	text-align: center;
-}
-</style>

+ 0 - 373
h5/src/views/personal/index.vue

@@ -1,373 +0,0 @@
-<template>
-	<div class="personal layout-pd">
-		<el-row>
-			<!-- 个人信息 -->
-			<el-col :xs="24" :sm="16">
-				<el-card shadow="hover" header="个人信息">
-					<div class="personal-user">
-						<div class="personal-user-left">
-							<el-upload class="h100 personal-user-left-upload" action="https://jsonplaceholder.typicode.com/posts/" multiple :limit="1">
-								<img src="https://img2.baidu.com/it/u=1978192862,2048448374&fm=253&fmt=auto&app=138&f=JPEG?w=504&h=500" />
-							</el-upload>
-						</div>
-						<div class="personal-user-right">
-							<el-row>
-								<el-col :span="24" class="personal-title mb18">{{ currentTime }},admin,生活变的再糟糕,也不妨碍我变得更好! </el-col>
-								<el-col :span="24">
-									<el-row>
-										<el-col :xs="24" :sm="8" class="personal-item mb6">
-											<div class="personal-item-label">昵称:</div>
-											<div class="personal-item-value">小柒</div>
-										</el-col>
-										<el-col :xs="24" :sm="16" class="personal-item mb6">
-											<div class="personal-item-label">身份:</div>
-											<div class="personal-item-value">超级管理</div>
-										</el-col>
-									</el-row>
-								</el-col>
-								<el-col :span="24">
-									<el-row>
-										<el-col :xs="24" :sm="8" class="personal-item mb6">
-											<div class="personal-item-label">登录IP:</div>
-											<div class="personal-item-value">192.168.1.1</div>
-										</el-col>
-										<el-col :xs="24" :sm="16" class="personal-item mb6">
-											<div class="personal-item-label">登录时间:</div>
-											<div class="personal-item-value">2021-02-05 18:47:26</div>
-										</el-col>
-									</el-row>
-								</el-col>
-							</el-row>
-						</div>
-					</div>
-				</el-card>
-			</el-col>
-
-			<!-- 消息通知 -->
-			<el-col :xs="24" :sm="8" class="pl15 personal-info">
-				<el-card shadow="hover">
-					<template #header>
-						<span>消息通知</span>
-						<span class="personal-info-more">更多</span>
-					</template>
-					<div class="personal-info-box">
-						<ul class="personal-info-ul">
-							<li v-for="(v, k) in state.newsInfoList" :key="k" class="personal-info-li">
-								<a :href="v.link" target="_block" class="personal-info-li-title">{{ v.title }}</a>
-							</li>
-						</ul>
-					</div>
-				</el-card>
-			</el-col>
-
-			<!-- 营销推荐 -->
-			<el-col :span="24">
-				<el-card shadow="hover" class="mt15" header="营销推荐">
-					<el-row :gutter="15" class="personal-recommend-row">
-						<el-col :sm="6" v-for="(v, k) in state.recommendList" :key="k" class="personal-recommend-col">
-							<div class="personal-recommend" :style="{ 'background-color': v.bg }">
-								<SvgIcon :name="v.icon" :size="70" :style="{ color: v.iconColor }" />
-								<div class="personal-recommend-auto">
-									<div>{{ v.title }}</div>
-									<div class="personal-recommend-msg">{{ v.msg }}</div>
-								</div>
-							</div>
-						</el-col>
-					</el-row>
-				</el-card>
-			</el-col>
-
-			<!-- 更新信息 -->
-			<el-col :span="24">
-				<el-card shadow="hover" class="mt15 personal-edit" header="更新信息">
-					<div class="personal-edit-title">基本信息</div>
-					<el-form :model="state.personalForm" size="default" label-width="40px" class="mt35 mb35">
-						<el-row :gutter="35">
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="昵称">
-									<el-input v-model="state.personalForm.name" placeholder="请输入昵称" clearable></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="邮箱">
-									<el-input v-model="state.personalForm.email" placeholder="请输入邮箱" clearable></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="签名">
-									<el-input v-model="state.personalForm.autograph" placeholder="请输入签名" clearable></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="职业">
-									<el-select v-model="state.personalForm.occupation" placeholder="请选择职业" clearable class="w100">
-										<el-option label="计算机 / 互联网 / 通信" value="1"></el-option>
-										<el-option label="生产 / 工艺 / 制造" value="2"></el-option>
-										<el-option label="医疗 / 护理 / 制药" value="3"></el-option>
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="手机">
-									<el-input v-model="state.personalForm.phone" placeholder="请输入手机" clearable></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="性别">
-									<el-select v-model="state.personalForm.sex" placeholder="请选择性别" clearable class="w100">
-										<el-option label="男" value="1"></el-option>
-										<el-option label="女" value="2"></el-option>
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-								<el-form-item>
-									<el-button type="primary">
-										<el-icon>
-											<ele-Position />
-										</el-icon>
-										更新个人信息
-									</el-button>
-								</el-form-item>
-							</el-col>
-						</el-row>
-					</el-form>
-					<div class="personal-edit-title mb15">账号安全</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">账户密码</div>
-								<div class="personal-edit-safe-item-left-value">当前密码强度:强</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即修改</el-button>
-							</div>
-						</div>
-					</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">密保手机</div>
-								<div class="personal-edit-safe-item-left-value">已绑定手机:132****4108</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即修改</el-button>
-							</div>
-						</div>
-					</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">密保问题</div>
-								<div class="personal-edit-safe-item-left-value">已设置密保问题,账号安全大幅度提升</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即设置</el-button>
-							</div>
-						</div>
-					</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">绑定QQ</div>
-								<div class="personal-edit-safe-item-left-value">已绑定QQ:110****566</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即设置</el-button>
-							</div>
-						</div>
-					</div>
-				</el-card>
-			</el-col>
-		</el-row>
-	</div>
-</template>
-
-<script setup lang="ts" name="personal">
-import { reactive, computed } from 'vue';
-import { formatAxis } from '/@/utils/formatTime';
-import { newsInfoList, recommendList } from './mock';
-
-// 定义变量内容
-const state = reactive<PersonalState>({
-	newsInfoList,
-	recommendList,
-	personalForm: {
-		name: '',
-		email: '',
-		autograph: '',
-		occupation: '',
-		phone: '',
-		sex: '',
-	},
-});
-
-// 当前时间提示语
-const currentTime = computed(() => {
-	return formatAxis(new Date());
-});
-</script>
-
-<style scoped lang="scss">
-@import '../../theme/mixins/index.scss';
-.personal {
-	.personal-user {
-		height: 130px;
-		display: flex;
-		align-items: center;
-		.personal-user-left {
-			width: 100px;
-			height: 130px;
-			border-radius: 3px;
-			:deep(.el-upload) {
-				height: 100%;
-			}
-			.personal-user-left-upload {
-				img {
-					width: 100%;
-					height: 100%;
-					border-radius: 3px;
-				}
-				&:hover {
-					img {
-						animation: logoAnimation 0.3s ease-in-out;
-					}
-				}
-			}
-		}
-		.personal-user-right {
-			flex: 1;
-			padding: 0 15px;
-			.personal-title {
-				font-size: 18px;
-				@include text-ellipsis(1);
-			}
-			.personal-item {
-				display: flex;
-				align-items: center;
-				font-size: 13px;
-				.personal-item-label {
-					color: var(--el-text-color-secondary);
-					@include text-ellipsis(1);
-				}
-				.personal-item-value {
-					@include text-ellipsis(1);
-				}
-			}
-		}
-	}
-	.personal-info {
-		.personal-info-more {
-			float: right;
-			color: var(--el-text-color-secondary);
-			font-size: 13px;
-			&:hover {
-				color: var(--el-color-primary);
-				cursor: pointer;
-			}
-		}
-		.personal-info-box {
-			height: 130px;
-			overflow: hidden;
-			.personal-info-ul {
-				list-style: none;
-				.personal-info-li {
-					font-size: 13px;
-					padding-bottom: 10px;
-					.personal-info-li-title {
-						display: inline-block;
-						@include text-ellipsis(1);
-						color: var(--el-text-color-secondary);
-						text-decoration: none;
-					}
-					& a:hover {
-						color: var(--el-color-primary);
-						cursor: pointer;
-					}
-				}
-			}
-		}
-	}
-	.personal-recommend-row {
-		.personal-recommend-col {
-			.personal-recommend {
-				position: relative;
-				height: 100px;
-				border-radius: 3px;
-				overflow: hidden;
-				cursor: pointer;
-				&:hover {
-					i {
-						right: 0px !important;
-						bottom: 0px !important;
-						transition: all ease 0.3s;
-					}
-				}
-				i {
-					position: absolute;
-					right: -10px;
-					bottom: -10px;
-					font-size: 70px;
-					transform: rotate(-30deg);
-					transition: all ease 0.3s;
-				}
-				.personal-recommend-auto {
-					padding: 15px;
-					position: absolute;
-					left: 0;
-					top: 5%;
-					color: var(--next-color-white);
-					.personal-recommend-msg {
-						font-size: 12px;
-						margin-top: 10px;
-					}
-				}
-			}
-		}
-	}
-	.personal-edit {
-		.personal-edit-title {
-			position: relative;
-			padding-left: 10px;
-			color: var(--el-text-color-regular);
-			&::after {
-				content: '';
-				width: 2px;
-				height: 10px;
-				position: absolute;
-				left: 0;
-				top: 50%;
-				transform: translateY(-50%);
-				background: var(--el-color-primary);
-			}
-		}
-		.personal-edit-safe-box {
-			border-bottom: 1px solid var(--el-border-color-light, #ebeef5);
-			padding: 15px 0;
-			.personal-edit-safe-item {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.personal-edit-safe-item-left {
-					flex: 1;
-					overflow: hidden;
-					.personal-edit-safe-item-left-label {
-						color: var(--el-text-color-regular);
-						margin-bottom: 5px;
-					}
-					.personal-edit-safe-item-left-value {
-						color: var(--el-text-color-secondary);
-						@include text-ellipsis(1);
-						margin-right: 15px;
-					}
-				}
-			}
-			&:last-of-type {
-				padding-bottom: 0;
-				border-bottom: none;
-			}
-		}
-	}
-}
-</style>

+ 0 - 66
h5/src/views/personal/mock.ts

@@ -1,66 +0,0 @@
-/**
- * 消息通知
- * @returns 返回模拟数据
- */
-export const newsInfoList = [
-	{
-		title: '[发布] 2021年02月28日发布基于 vue3.x + vite v1.0.0 版本',
-		date: '02/28',
-		link: 'https://gitee.com/lyt-top/vue-next-admin',
-	},
-	{
-		title: '[发布] 2021年04月15日发布 vue2.x + webpack 重构版本',
-		date: '04/15',
-		link: 'https://gitee.com/lyt-top/vue-next-admin/tree/vue-prev-admin/',
-	},
-	{
-		title: '[重构] 2021年04月10日 重构 vue2.x + webpack v1.0.0 版本',
-		date: '04/10',
-		link: 'https://gitee.com/lyt-top/vue-next-admin/tree/vue-prev-admin/',
-	},
-	{
-		title: '[预览] 2020年12月08日,基于 vue3.x 版本后台模板的预览',
-		date: '12/08',
-		link: 'http://lyt-top.gitee.io/vue-next-admin-preview/#/login',
-	},
-	{
-		title: '[预览] 2020年11月15日,基于 vue2.x 版本后台模板的预览',
-		date: '11/15',
-		link: 'https://lyt-top.gitee.io/vue-prev-admin-preview/#/login',
-	},
-];
-
-/**
- * 营销推荐
- * @returns 返回模拟数据
- */
-export const recommendList = [
-	{
-		title: '优惠券',
-		msg: '现金券、折扣券、营销必备',
-		icon: 'ele-Food',
-		bg: '#48D18D',
-		iconColor: '#64d89d',
-	},
-	{
-		title: '多人拼团',
-		msg: '社交电商、开辟流量',
-		icon: 'ele-ShoppingCart',
-		bg: '#F95959',
-		iconColor: '#F86C6B',
-	},
-	{
-		title: '分销中心',
-		msg: '轻松招募分销员,成功推广奖励',
-		icon: 'ele-School',
-		bg: '#8595F4',
-		iconColor: '#92A1F4',
-	},
-	{
-		title: '秒杀',
-		msg: '超低价抢购引导更多销量',
-		icon: 'ele-AlarmClock',
-		bg: '#FEBB50',
-		iconColor: '#FDC566',
-	},
-];

+ 0 - 475
h5/src/views/tools/index.vue

@@ -1,475 +0,0 @@
-<template>
-	<div class="layout-pd">
-		<el-card shadow="hover" header="正则验证(一些项目中常用的正则)">
-			<el-form :model="state.ruleForm" :rules="state.rules" class="tools-warp-form" size="default" label-position="top">
-				<el-form-item label="验证百分比(不可以小数):" prop="a22">
-					<div class="tools-warp-form-msg">验证可以输入大于0小于100的数字</div>
-					<div>
-						<el-input v-model="state.ruleForm.a22" @input="onVerifyNumberPercentage($event)" placeholder="请输入数字进行测试">
-							<template #append> % </template>
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="验证百分比(可以小数):" prop="a23" class="mt20">
-					<div class="tools-warp-form-msg">验证可以输入大于0小于100的数字</div>
-					<div>
-						<el-input v-model="state.ruleForm.a23" @input="onVerifyNumberPercentageFloat($event)" placeholder="请输入数字进行测试">
-							<template #append> % </template>
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="小数或整数:" prop="a1" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证可以输入小数或整数,0 开始, . 只能出现一次,保留小数点后保留2位小数。(负数时,模拟拼接负号给后台)。
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a1" @input="onVerifyNumberIntegerAndFloat($event)" placeholder="请输入小数或整数进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="正整数:" prop="a2" class="mt20">
-					<div class="tools-warp-form-msg">验证只可以输入正整数,0 开始后面将不可以输入。</div>
-					<div>
-						<el-input v-model="state.ruleForm.a2" @input="onVerifiyNumberInteger($event)" placeholder="请输入整数进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="去掉中文及空格:" prop="a3" class="mt20">
-					<div class="tools-warp-form-msg">验证不可以输入空格与中文。</div>
-					<div>
-						<el-input v-model="state.ruleForm.a3" @input="onVerifyCnAndSpace($event)" placeholder="请输入内容进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="去掉英文及空格:" prop="a4" class="mt20">
-					<div class="tools-warp-form-msg">验证不可以输入空格与英文。</div>
-					<div>
-						<el-input v-model="state.ruleForm.a4" @input="onVerifyEnAndSpace($event)" placeholder="请输入内容进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="禁止输入空格:" prop="a5" class="mt20">
-					<div class="tools-warp-form-msg">验证不可以输入空格。</div>
-					<div>
-						<el-input v-model="state.ruleForm.a5" @input="onVerifyAndSpace($event)" placeholder="请输入内容进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="金额用 `,` 区分开:" prop="a6" class="mt20">
-					<div class="tools-warp-form-msg">金额添加 `,` 进行区分,便于阅读。{{ state.ruleForm.a6 }}</div>
-					<div>
-						<el-input v-model="state.ruleForm.a6" @input="onVerifyNumberComma($event)" placeholder="请输入金额进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="匹配文字变色(搜索时):" prop="a7" class="mt20">
-					<div class="tools-warp-form-msg">示例:<span v-html="state.text"></span></div>
-					<div>
-						<el-input v-model="state.ruleForm.a7" @input="onVerifyTextColor($event)" placeholder="请输入示例中的部分文字"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="数字转中文大写:" prop="a8" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证数字转成中文的大写。<span class="tools-warp-form-msg-red">{{ state.cnText }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a8" @input="onVerifyNumberCnUppercase($event)" placeholder="请输入金额进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="手机号码:" prop="a9" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证手机号码 (true: 正确,false: 不正确)。<span class="tools-warp-form-msg-red">{{ state.phone }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a9" @input="onVerifyPhone($event)" placeholder="请输入手机号进行测试" maxlength="11"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="国内电话号码:" prop="a10" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证国内电话号码 (true: 正确,false: 不正确)。<span class="tools-warp-form-msg-red">{{ state.telePhone }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a10" @input="onVerifyTelPhone($event)" placeholder="请输入国内电话号码进行测试" maxlength="12">
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="登录账号:" prop="a11" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证登录账号是否正确。字母开头,允许5-16字节,允许字母数字下划线 (true: 正确,false: 不正确)。<span class="tools-warp-form-msg-red">{{
-							state.account
-						}}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a11" @input="onVerifyAccount($event)" placeholder="请输入账号进行测试" maxlength="16"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="密码:" prop="a12" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证密码是否正确。以字母开头,长度在6~16之间,只能包含字母、数字和下划线 (true: 正确,false: 不正确)。<span
-							class="tools-warp-form-msg-red"
-							>{{ state.password }}</span
-						>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a12" @input="onVerifyPassword($event)" placeholder="请输入密码进行测试" maxlength="16"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="强密码:" prop="a13" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证强密码是否正确。字母+数字+特殊字符,长度在6-16之间 (true: 正确,false: 不正确)。<span class="tools-warp-form-msg-red">{{
-							state.passwordPowerful
-						}}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a13" @input="onVerifyPasswordPowerful($event)" placeholder="请输入密码进行测试" maxlength="16">
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="密码强度:" prop="a14" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证密码强度。返回 强、中、弱。(弱:纯数字,纯字母,纯特殊字符,中:字母+数字,字母+特殊字符,数字+特殊字符,强:字母+数字+特殊字符)<span
-							class="tools-warp-form-msg-red"
-							>{{ state.passwordStrength }}</span
-						>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a14" @input="onVerifyPasswordStrength($event)" placeholder="请输入密码进行测试" maxlength="16">
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="IP地址:" prop="a15" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证IP地址是否正确。(true: 正确,false: 不正确)。<span class="tools-warp-form-msg-red">{{ state.iPAddress }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a15" @input="onVerifyIPAddress($event)" placeholder="请输入IP地址进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="邮箱:" prop="a16" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证邮箱是否正确。(true: 正确,false:不正确)。<span class="tools-warp-form-msg-red">{{ state.email }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a16" @input="onVerifyEmail($event)" placeholder="请输入邮箱进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="身份证:" prop="a17" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证身份证是否正确。(true: 正确,false:不正确)。<span class="tools-warp-form-msg-red">{{ state.idCard }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a17" @input="onVerifyIDCard($event)" placeholder="请输入身份证进行测试" maxlength="18"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="姓名:" prop="a18" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证姓名是否正确,包括少数民族名字。(true: 正确,false:不正确)。<span class="tools-warp-form-msg-red">{{ state.fullName }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a18" @input="onVerifyFullName($event)" placeholder="请输入姓名进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="邮政编码:" prop="a19" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证邮政编码是否正确,不能以 0 开始。(true: 正确,false:不正确)。<span class="tools-warp-form-msg-red">{{ state.postalCode }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a19" @input="onVerifyPostalCode($event)" placeholder="请输入邮政编码进行测试" maxlength="6"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="url:" prop="a20" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证url是否正确。(true: 正确,false:不正确)。<span class="tools-warp-form-msg-red">{{ state.url }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a20" @input="onVerifyUrl($event)" placeholder="请输入内容进行测试"> </el-input>
-					</div>
-				</el-form-item>
-				<el-form-item label="车牌号:" prop="a21" class="mt20">
-					<div class="tools-warp-form-msg">
-						验证车牌号是否正确。(true: 正确,false:不正确)。<span class="tools-warp-form-msg-red">{{ state.carNum }}</span>
-					</div>
-					<div>
-						<el-input v-model="state.ruleForm.a21" @input="onVerifyCarNum($event)" placeholder="请输入车牌号进行测试"> </el-input>
-					</div>
-				</el-form-item>
-			</el-form>
-		</el-card>
-	</div>
-</template>
-
-<script setup lang="ts" name="tools">
-import { reactive } from 'vue';
-import {
-	verifyNumberPercentage,
-	verifyNumberPercentageFloat,
-	verifyNumberIntegerAndFloat,
-	verifiyNumberInteger,
-	verifyCnAndSpace,
-	verifyEnAndSpace,
-	verifyAndSpace,
-	verifyNumberComma,
-	verifyTextColor,
-	verifyNumberCnUppercase,
-	verifyPhone,
-	verifyTelPhone,
-	verifyAccount,
-	verifyPassword,
-	verifyPasswordPowerful,
-	verifyPasswordStrength,
-	verifyIPAddress,
-	verifyEmail,
-	verifyIdCard,
-	verifyFullName,
-	verifyPostalCode,
-	verifyUrl,
-	verifyCarNum,
-} from '/@/utils/toolsValidate';
-
-// 定义变量内容
-const state = reactive({
-	text: '世间美好,与你环环相扣,祝你开心每一天!',
-	phone: false,
-	cnText: '',
-	telePhone: false,
-	account: false,
-	password: false,
-	passwordPowerful: false,
-	passwordStrength: '',
-	iPAddress: false,
-	email: false,
-	idCard: false,
-	fullName: false,
-	postalCode: false,
-	url: false,
-	carNum: false,
-	/**
-	 * 变量名为了方便,随便取了,
-	 * 实际中,按正常程序进行命名
-	 */
-	ruleForm: {
-		a1: '',
-		a2: '',
-		a3: '',
-		a4: '',
-		a5: '',
-		a6: '',
-		a7: '',
-		a8: '',
-		a9: '',
-		a10: '',
-		a11: '',
-		a12: '',
-		a13: '',
-		a14: '',
-		a15: '',
-		a16: '',
-		a17: '',
-		a18: '',
-		a19: '',
-		a20: '',
-		a21: '',
-		a22: '',
-		a23: '',
-	},
-	rules: {
-		a1: [
-			{
-				required: true,
-				message: '请输入小数或整数进行测试',
-				trigger: 'change',
-			},
-		],
-		a2: [
-			{
-				required: true,
-				message: '请输入正整数进行测试',
-				trigger: 'change',
-			},
-		],
-		a3: [{ required: true, message: '请输入内容进行测试', trigger: 'change' }],
-		a4: [{ required: true, message: '请输入内容进行测试', trigger: 'change' }],
-		a5: [{ required: true, message: '请输入内容进行测试', trigger: 'change' }],
-		a6: [
-			{
-				required: true,
-				message: '请输入小数或整数进行测试',
-				trigger: 'change',
-			},
-		],
-		a7: [{ required: true, message: '请输入内容进行测试', trigger: 'change' }],
-		a8: [{ required: true, message: '请输入金额进行测试', trigger: 'change' }],
-		a9: [
-			{
-				required: true,
-				message: '请输入手机号进行测试',
-				trigger: 'change',
-			},
-		],
-		a10: [
-			{
-				required: true,
-				message: '请输入国内电话号码进行测试',
-				trigger: 'change',
-			},
-		],
-		a11: [{ required: true, message: '请输入账号进行测试', trigger: 'change' }],
-		a12: [{ required: true, message: '请输入密码进行测试', trigger: 'change' }],
-		a13: [{ required: true, message: '请输入密码进行测试', trigger: 'change' }],
-		a14: [{ required: true, message: '请输入密码进行测试', trigger: 'change' }],
-		a15: [
-			{
-				required: true,
-				message: '请输入IP地址进行测试',
-				trigger: 'change',
-			},
-		],
-		a16: [{ required: true, message: '请输入邮箱进行测试', trigger: 'change' }],
-		a17: [
-			{
-				required: true,
-				message: '请输入身份证进行测试',
-				trigger: 'change',
-			},
-		],
-		a18: [{ required: true, message: '请输入姓名进行测试', trigger: 'change' }],
-		a19: [
-			{
-				required: true,
-				message: '请输入邮政编码进行测试',
-				trigger: 'change',
-			},
-		],
-		a20: [{ required: true, message: '请输入内容进行测试', trigger: 'change' }],
-		a21: [
-			{
-				required: true,
-				message: '请输入车牌号进行测试',
-				trigger: 'change',
-			},
-		],
-		a22: [{ required: true, message: '请输入数字进行测试', trigger: 'change' }],
-		a23: [{ required: true, message: '请输入数字进行测试', trigger: 'change' }],
-	},
-});
-
-// 验证百分比(不可以小数)
-const onVerifyNumberPercentage = (val: string) => {
-	state.ruleForm.a22 = verifyNumberPercentage(val);
-};
-// 验证百分比(可以小数)
-const onVerifyNumberPercentageFloat = (val: string) => {
-	state.ruleForm.a23 = verifyNumberPercentageFloat(val);
-};
-// 小数或整数
-const onVerifyNumberIntegerAndFloat = (val: string) => {
-	state.ruleForm.a1 = verifyNumberIntegerAndFloat(val);
-};
-// 正整数
-const onVerifiyNumberInteger = (val: string) => {
-	state.ruleForm.a2 = verifiyNumberInteger(val);
-};
-// 去掉中文及空格
-const onVerifyCnAndSpace = (val: string) => {
-	state.ruleForm.a3 = verifyCnAndSpace(val);
-};
-// 去掉英文及空格
-const onVerifyEnAndSpace = (val: string) => {
-	state.ruleForm.a4 = verifyEnAndSpace(val);
-};
-// 禁止输入空格
-const onVerifyAndSpace = (val: string) => {
-	state.ruleForm.a5 = verifyAndSpace(val);
-};
-// 金额用 `,` 区分开
-const onVerifyNumberComma = (val: string) => {
-	state.ruleForm.a6 = verifyNumberComma(val);
-};
-// 匹配文字变色(搜索时)
-const onVerifyTextColor = (val: string) => {
-	state.ruleForm.a7 = verifyAndSpace(val);
-	if (state.ruleForm.a7 === '') state.text = `世间美好,与你环环相扣,祝你开心每一天!`;
-	else state.text = verifyTextColor(state.ruleForm.a7, state.text);
-};
-// 数字转中文大写
-const onVerifyNumberCnUppercase = (val: string) => {
-	state.ruleForm.a8 = verifyNumberIntegerAndFloat(val);
-	if (state.ruleForm.a8 === '') state.cnText = '';
-	else state.cnText = verifyNumberCnUppercase(state.ruleForm.a8);
-};
-// 手机号码
-const onVerifyPhone = (val: string) => {
-	state.phone = verifyPhone(val);
-};
-// 国内电话号码
-const onVerifyTelPhone = (val: string) => {
-	state.telePhone = verifyTelPhone(val);
-};
-// 登录账号
-const onVerifyAccount = (val: string) => {
-	state.ruleForm.a11 = verifyCnAndSpace(val);
-	state.account = verifyAccount(state.ruleForm.a11);
-};
-// 密码
-const onVerifyPassword = (val: string) => {
-	state.ruleForm.a12 = verifyCnAndSpace(val);
-	state.password = verifyPassword(state.ruleForm.a12);
-};
-// 强密码
-const onVerifyPasswordPowerful = (val: string) => {
-	state.ruleForm.a13 = verifyCnAndSpace(val);
-	state.passwordPowerful = verifyPasswordPowerful(state.ruleForm.a13);
-};
-// 密码强度
-const onVerifyPasswordStrength = (val: string) => {
-	state.ruleForm.a14 = verifyCnAndSpace(val);
-	state.passwordStrength = verifyPasswordStrength(state.ruleForm.a14);
-};
-// IP地址
-const onVerifyIPAddress = (val: string) => {
-	state.iPAddress = verifyIPAddress(val);
-};
-// 邮箱
-const onVerifyEmail = (val: string) => {
-	state.ruleForm.a16 = verifyCnAndSpace(val);
-	state.email = verifyEmail(state.ruleForm.a16);
-};
-// 身份证
-const onVerifyIDCard = (val: string) => {
-	state.ruleForm.a17 = verifyCnAndSpace(val);
-	state.idCard = verifyIdCard(state.ruleForm.a17);
-};
-// 姓名
-const onVerifyFullName = (val: string) => {
-	state.ruleForm.a18 = verifyAndSpace(val);
-	state.fullName = verifyFullName(state.ruleForm.a18);
-};
-// 邮政编码
-const onVerifyPostalCode = (val: string) => {
-	state.ruleForm.a19 = verifiyNumberInteger(val);
-	state.postalCode = verifyPostalCode(state.ruleForm.a19);
-};
-// url
-const onVerifyUrl = (val: string) => {
-	state.ruleForm.a20 = verifyAndSpace(val);
-	state.url = verifyUrl(state.ruleForm.a20);
-};
-// 车牌号
-const onVerifyCarNum = (val: string) => {
-	state.ruleForm.a21 = verifyAndSpace(val);
-	state.carNum = verifyCarNum(state.ruleForm.a21);
-};
-</script>
-
-<style scoped lang="scss">
-.tools-warp-form {
-	:deep(.el-form-item--small.el-form-item) {
-		margin-bottom: 0 !important;
-	}
-	.tools-warp-form-msg {
-		color: #666666;
-		font-size: 14px;
-		width: 100%;
-		.tools-warp-form-msg-red {
-			color: red;
-		}
-	}
-	.tools-warp-form-msg + div {
-		width: 100%;
-	}
-}
-</style>

+ 0 - 275
h5/src/views/underlying/department/departEdit.vue

@@ -1,275 +0,0 @@
-<template>
-    <div>
-        <el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px">
-			<el-form ref="deptDialogFormRef" :model="state.ruleForm" size="default" label-width="90px" v-if="state.isLoad">
-				<el-row :gutter="35">
-					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="上级部门">
-                            <el-select v-model="state.ruleForm.department_id" placeholder="请选择上级部门">
-                                <el-option
-                                v-for="item in state.options"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col> -->
-
-					<!--  :rules="[{ required: true, message: '上级部门不能为空' }]"
-								clearable -->
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="上级部门">
-							<el-cascader
-								:options="state.departmentList"
-								:props="{ checkStrictly: true, value: 'id', label: 'name' }"
-								placeholder="请选择上级部门"
-								class="w100"
-								v-model="state.ruleForm.parent_id"
-								@change="getDepartId"
-							>
-							<!-- :disabled="state.ruleForm.parent_id==0" -->
-								<template #default="{ node, data }">
-									<span>{{ data.name }}</span>
-									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
-								</template>
-							</el-cascader>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="部门名称" :rules="[{ required: true, message: '部门名称不能为空' }]">
-							<el-input v-model="state.ruleForm.name" placeholder="请输入部门名称" clearable></el-input>
-						</el-form-item>
-					</el-col>
-
-					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="负责人">
-                            <el-select v-model="state.ruleForm.leader_id" placeholder="请选择负责人">
-                                <el-option
-                                v-for="item in state.options"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col> -->
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="负 责 人" :rules="[{ required: true, message: '负责人不能为空' }]">
-                            <el-select v-model="state.ruleForm.admin_ids" placeholder="请选择负责人" multiple>
-                                <el-option
-									v-for="item in state.adminList"
-									:key="item.id"
-									:label="item.name"
-									:value="item.id"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="状  态">
-                            <el-radio-group v-model="state.ruleForm.valid">
-                                <el-radio :label="1">启用</el-radio>
-                                <el-radio :label="0">禁用</el-radio>
-                            </el-radio-group>
-						</el-form-item>
-					</el-col>
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-    </div>
-</template>
-
-<script setup lang="ts" name="underlyingDeptDialog">
-import { nextTick, reactive, ref } from 'vue';
-import { ElMessage } from 'element-plus';
-import Department from '/@/api/department/department.ts';
-import ruleReg from '/@/utils/ruleReg.ts';
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-
-// 定义变量内容
-const deptDialogFormRef = ref();
-const state = reactive({
-	id: 0,
-	ruleForm: {
-		parent_id: 0,
-		name: '',
-		admin_ids: [],
-		valid: 1,
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	departmentList: [], //部门列表
-	roleList: [], //角色列表
-	adminList: [], //负责人列表
-	isLoad: true,
-});
-const getDepartId = (e: any) => {
-	console.log('e',e);
-	state.ruleForm.parent_id = e[e.length-1];
-	console.log('state.ruleForm.department_id',state.ruleForm.parent_id);
-}
-// 部门详情
-const detail = async() => {
-	let res = await Department.detail(state.id);
-	if(res.code != 0){
-		return ElMessage.error(res.msg);
-	}
-	let admin_ids:any = [];
-	res.data.mainAdmin.forEach((item:any)=>{
-		admin_ids.push(item.id);
-	});
-	state.ruleForm = {
-		parent_id: res.data.parent_id,
-		name: res.data.name,
-		admin_ids: admin_ids,
-		valid: res.data.valid,
-	};
-};
-// 打开弹窗
-const openDialog = (type: string, row: any) => {
-	// console.log('row',row);
-    state.dialog.type = type;
-	if (type === 'edit') {
-		state.id = row.id;
-		state.dialog.title = '部门编辑038';
-		state.dialog.submitTxt = '修 改';
-		detail();
-	} else {
-		state.id = 0;
-        state.ruleForm = {
-            parent_id: 0,
-			name: '',
-			admin_ids: [],
-			valid: 1,
-        };
-		state.dialog.title = '部门添加037';
-		state.dialog.submitTxt = '保 存';
-		// 清空表单,此项需加表单验证才能使用
-		// nextTick(() => {
-		// 	deptDialogFormRef.value.resetFields();
-		// });
-	}
-	state.departmentList = [];
-	state.roleList = [];
-	state.dialog.isShowDialog = true;
-	getMenuData();
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-// 提交
-const onSubmit = async() => {
-	console.log('state.ruleForm.parent_id',state.ruleForm.parent_id);
-	if(!ruleReg.emptyReg(state.ruleForm.name)){
-		return ElMessage.warning("请输入部门名称");
-	}
-	if(state.ruleForm.admin_ids.length<=0){
-		return ElMessage.warning("请选择负责人");
-	}
-	let res: any = null;
-	if(state.dialog.type=='edit'){
-        state.ruleForm.id = state.id;
-		res = await Department.edit(state.ruleForm);
-		if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-	}else{
-		res = await Department.add(state.ruleForm);
-		if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-	}
-	ElMessage.success(res.msg);
-	closeDialog();
-	emit('refresh');
-};
-// 部门列表排除本身
-const treeFormat = (tree_list:any) => {
-	tree_list.forEach((item:any,index:number)=>{
-		// console.log('index',index);
-		if(item.parent_id==0&&item.id==state.id){
-			console.log('indexDel1',index);
-			tree_list.splice(index,1);
-		}
-		if(item.children&&item.children.length>0){
-			item.children.forEach((item2:any,index2:number)=>{
-				// console.log('index2',index2);
-				if(item2.id==state.id){
-					console.log('indexDel2',index,index2);
-					item.children.splice(index2,1);
-				}
-			});
-			treeFormat(item.children);
-		}
-	})
-}
-const departmentList = (list:any) => {
-	list.forEach((item:any)=>{
-		if(item.valid!=1){
-			item.disabled = true;
-		}
-		if(item.children){
-			departmentList(item.children);
-		}
-	});
-}
-// 初始化下拉列表
-const initAdmin = async() => {
-	console.log("初始化下拉列表");
-	let res = await Department.initAdmin();
-	if(res.code != 0){
-		return ElMessage.error(res.msg);
-	}
-	treeFormat(res.data.departmentList);
-	departmentList(res.data.departmentList);
-	state.departmentList = res.data.departmentList;
-	state.roleList = res.data.roleList;
-}
-// 部门初始化
-const init = async() => {
-	console.log("初始化人员列表");
-	state.isLoad = false;
-	let res = await Department.init();
-	if(res.code != 0){
-		return ElMessage.error(res.msg);
-	}
-	state.adminList = res.data.adminList;
-	await initAdmin();
-	state.isLoad = true;
-};
-// 初始化部门数据
-const getMenuData = () => {
-	init();
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-
-</style>

+ 0 - 377
h5/src/views/underlying/department/detail.vue

@@ -1,377 +0,0 @@
-<template>
-	<div class="system-dept-dialog-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px">
-			<el-form ref="deptDialogFormRef" :model="state.ruleForm" size="default" label-width="90px">
-				<el-row :gutter="35">
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="员工照片" :rules="[{ required: true, message: '员工照片不能为空' }]">
-							<el-upload
-								class="avatar-uploader"
-								:action="state.action"
-								:show-file-list="false"
-								:on-success="handleAvatarSuccess"
-								:before-upload="beforeAvatarUpload"
-								:drag="false"
-								:disabled="state.disabled"
-							>
-								<img v-if="state.ruleForm.img_url" :src="state.ruleForm.img_url" class="avatar" />
-								<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
-							</el-upload>
-							<span class="ml10">尺寸316*316,小于100kb</span>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="员工性别" :rules="[{ required: true, message: '员工性别不能为空' }]">
-							<el-radio-group v-model="state.ruleForm.gender" :disabled="state.disabled">
-								<!-- <el-radio-button :label="0">保密</el-radio-button>
-                                <el-radio-button :label="1">男</el-radio-button>
-                                <el-radio-button :label="2">女</el-radio-button> -->
-								<el-radio :label="0">保密</el-radio>
-                                <el-radio :label="1">男</el-radio>
-                                <el-radio :label="2">女</el-radio>
-							</el-radio-group>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="name" -->
-						<el-form-item label="员工姓名" :rules="[{ required: true, message: '员工姓名不能为空' }]">
-							<el-input v-model="state.ruleForm.name" placeholder="请输入员工姓名" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="所在部门" :rules="[{ required: true, message: '所在部门不能为空' }]">
-							<el-cascader
-								:options="state.departmentList"
-								:props="{ checkStrictly: true, value: 'id', label: 'name' }"
-								placeholder="请选择所在部门"
-								clearable
-								class="w100"
-								v-model="state.ruleForm.department_id"
-								:disabled="state.disabled"
-							>
-								<template #default="{ node, data }">
-									<span>{{ data.name }}</span>
-									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
-								</template>
-							</el-cascader>
-						</el-form-item>
-					</el-col>
-
-					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="所在部门" :rules="[{ required: true, message: '所在部门不能为空' }]">
-                            <el-select v-model="state.ruleForm.department_id" placeholder="请选择所在部门" :disabled="state.disabled">
-                                <el-option
-                                v-for="item in state.options"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col> -->
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="id_card" -->
-						<el-form-item label="身份证号" :rules="[{ required: true, message: '身份证号不能为空' }]">
-							<el-input v-model="state.ruleForm.id_card" placeholder="请输入身份证号" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="角  色" :rules="[{ required: true, message: '角色不能为空' }]">
-                            <el-select v-model="state.ruleForm.role_id" placeholder="请选择角色" :disabled="state.disabled">
-                                <el-option
-                                v-for="item in state.roleList"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="item.id"
-                                :disabled="item.valid==0"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="phone" -->
-						<el-form-item label="联系电话" :rules="[{ required: true, message: '联系电话不能为空' }]">
-							<el-input v-model="state.ruleForm.phone" placeholder="请输入联系电话" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="状  态" :rules="[{ required: true, message: '状态不能为空' }]">
-                            <el-radio-group v-model="state.ruleForm.valid" :disabled="state.disabled">
-                                <el-radio :label="1">启用</el-radio>
-                                <el-radio :label="0">禁用</el-radio>
-                            </el-radio-group>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="age" -->
-						<el-form-item label="年  龄" :rules="[{ required: true, message: '年龄不能为空' }]">
-							<el-input v-model="state.ruleForm.age" type="number" placeholder="请输入年龄" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.id==0">
-						 <!-- prop="password" -->
-						<el-form-item label="初始密码" :rules="[{ required: true, message: '初始密码不能为空' }]">
-							<el-input v-model="state.ruleForm.password" type="password" show-password placeholder="请输入初始密码" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="入职日期" :rules="[{ required: true, message: '入职日期不能为空' }]">
-							<el-date-picker
-								v-model="state.ruleForm.entry_date"
-								type="date"
-								placeholder="请选择入职日期"
-								size="default"
-                                value-format="YYYY-MM-DD"
-								:disabled="state.disabled"
-							/>
-						</el-form-item>
-					</el-col>
-
-					<el-divider content-position="left">工资信息</el-divider>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="工资类型" :rules="[{ required: true, message: '状态不能为空' }]">
-                            <el-radio-group v-model="state.ruleForm.salary_type" :disabled="state.disabled">
-                                <el-radio :label="1">计件</el-radio>
-                                <el-radio :label="2">非计件</el-radio>
-                            </el-radio-group>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20">
-						<el-form-item label="基本工资" :rules="[{ required: true, message: '基本工资不能为空' }]">
-							<el-input v-model="state.ruleForm.base_salary" type="number" placeholder="填写工资基数金额" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-					<span class="mt5">元</span>
-					
-					<el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20">
-						<el-form-item label="加班工资" :rules="[{ required: true, message: '加班工资不能为空' }]">
-							<el-input v-model="state.ruleForm.over_salary" type="number" placeholder="填写工资基数金额" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-					<span class="mt5">元</span>
-					
-					<el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20">
-						<el-form-item label="计时工资" :rules="[{ required: true, message: '计时工资不能为空' }]">
-							<el-input v-model="state.ruleForm.hourly_salary" type="number" placeholder="填写工资基数金额" clearable :disabled="state.disabled"></el-input>
-						</el-form-item>
-					</el-col>
-					<span class="mt5">元/小时</span>
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">返回</el-button>
-					<!-- <el-button type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button> -->
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script setup lang="ts" name="systemDeptDialog">
-import { reactive, ref } from 'vue';
-import { ElMessage } from 'element-plus';
-import { Plus } from '@element-plus/icons-vue';
-import type { UploadProps } from 'element-plus';
-import config from '/@/config.ts';
-import Department from '/@/api/department/department.ts';
-import ruleReg from '/@/utils/ruleReg.ts';
-
-const handleAvatarSuccess: UploadProps['onSuccess'] = (
-  response,
-  uploadFile
-) => {
-  state.ruleForm.img_url = URL.createObjectURL(uploadFile.raw!)
-  console.log('state.ruleForm.head_img',state.ruleForm.img_url);
-}
-const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
-  if (rawFile.type !== 'image/jpeg') {
-    ElMessage.error('Avatar picture must be JPG format!')
-    return false
-  } else if (rawFile.size / 1024 / 1024 > 2) {
-    ElMessage.error('Avatar picture size can not exceed 2MB!')
-    return false
-  }
-  return true
-}
-
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-
-// 定义变量内容
-const radio1 = ref('男')
-const deptDialogFormRef = ref();
-const state = reactive({
-	id: 0,
-	ruleForm: {
-		id: 0,
-		img_url: '',
-		gender: 0,
-		name: '',
-		department_id: '',
-		id_card: '',
-		age: '',
-		phone: '',
-		valid: 1,
-        role_id: '',
-		password: '',
-		salary_type: 1,
-		base_salary: '',
-		over_salary: '',
-		hourly_salary: '',
-		entry_date: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	action: config.host + '/admin/upload/file',
-	departmentList: [], //部门列表
-	roleList: [], //角色列表
-	disabled: true,
-});
-
-// 打开弹窗
-const openDialog = (id: number) => {
-	initAdmin();
-	state.id = id;
-	state.dialog.title = '员工详情033';
-	// state.dialog.submitTxt = '保 存';
-	state.dialog.isShowDialog = true;
-	getMenuData();
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-// 提交
-const onSubmit = async() => {
-	if(!ruleReg.emptyReg(state.ruleForm.img_url)){
-		return ElMessage.warning("请上传员工照片");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.name)){
-		return ElMessage.warning("请输入员工姓名");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.department_id)){
-		return ElMessage.warning("请选择所在部门");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.id_card)){
-		return ElMessage.warning("请输入身份证号");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.age)){
-		return ElMessage.warning("请输入年龄");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.phone)){
-		return ElMessage.warning("请输入联系电话");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.role_id)){
-		return ElMessage.warning("请选择角色");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.password)){
-		return ElMessage.warning("请设置初始密码");
-	}
-	let res: any = null;
-	if(state.dialog.type=='edit' || state.ruleForm.id!=0){
-		res = await Department.editAdmin(state.ruleForm);
-		if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-	}else{
-		res = await Department.addAdmin(state.ruleForm);
-		if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-	}
-	ElMessage.success(res.msg);
-	closeDialog();
-	emit('refresh');
-};
-// 初始化下拉列表
-const initAdmin = async() => {
-	let res = await Department.initAdmin();
-	if(res.code != 0){
-		return ElMessage.error(res.msg);
-	}
-	state.departmentList = [];
-	state.roleList = [];
-	state.departmentList = res.data.departmentList;
-	state.roleList = res.data.roleList;
-}
-// 初始化人员数据
-const getMenuData = async() => {
-    let res = await Department.detailAdmin(state.id);
-	if(res.code != 0){
-		return ElMessage.error(res.msg);
-	}
-	state.ruleForm = {
-		id: res.data.id,
-		img_url: res.data.img_url,
-		gender: res.data.gender,
-		name: res.data.name,
-		department_id: res.data.department_id,
-		id_card: res.data.id_card,
-		age: res.data.age,
-		phone: res.data.phone,
-		valid: res.data.valid,
-        role_id: res.data.role_id,
-		password: res.data.password,
-		salary_type: res.data.salary_type,
-		base_salary: res.data.base_salary,
-		over_salary: res.data.over_salary,
-		hourly_salary: res.data.hourly_salary,
-		entry_date: res.data.entry_date,
-	}
-	if(state.ruleForm.gender==1){
-		radio1.value = '男';
-	}else if(state.ruleForm.gender==2){
-		radio1.value = '女';
-	}else{
-		radio1.value = '保密';
-	}
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-	.avatar-uploader .avatar {
-		width: 178px;
-		height: 178px;
-		display: block;
-	}
-	.avatar-uploader .el-upload {
-		border: 1px dashed var(--el-border-color);
-		border-radius: 6px;
-		cursor: pointer;
-		position: relative;
-		overflow: hidden;
-		transition: var(--el-transition-duration-fast);
-	}
-	.avatar-uploader .el-upload:hover {
-		border-color: var(--el-color-primary);
-	}
-	.el-icon.avatar-uploader-icon {
-		font-size: 28px;
-		color: #8c939d;
-		width: 178px;
-		height: 178px;
-		text-align: center;
-	}
-</style>

+ 0 - 498
h5/src/views/underlying/department/edit.vue

@@ -1,498 +0,0 @@
-<template>
-	<div class="system-dept-dialog-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px">
-			<el-form ref="deptDialogFormRef" :model="state.ruleForm" size="default" label-width="90px">
-				<el-row :gutter="35">
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="员工照片" :rules="[{ required: true, message: '员工照片不能为空' }]">
-							<el-upload
-								class="avatar-uploader"
-								:action="state.action"
-								:show-file-list="false"
-								:on-success="handleAvatarSuccess"
-								:before-upload="beforeAvatarUpload"
-								:drag="true"
-							>
-								<img v-if="state.ruleForm.img_url" :src="state.ruleForm.img_url" class="avatar" />
-								<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
-							</el-upload>
-							<span class="ml10">尺寸316*316,小于2MB</span>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="员工性别" :rules="[{ required: true, message: '员工性别不能为空' }]">
-                            <el-radio-group v-model="state.ruleForm.gender">
-                                <!-- <el-radio-button :label="0">保密</el-radio-button>
-                                <el-radio-button :label="1">男</el-radio-button>
-                                <el-radio-button :label="2">女</el-radio-button> -->
-								<el-radio :label="0">保密</el-radio>
-                                <el-radio :label="1">男</el-radio>
-                                <el-radio :label="2">女</el-radio>
-                            </el-radio-group>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="name" -->
-						<el-form-item label="员工姓名" :rules="[{ required: true, message: '员工姓名不能为空' }]">
-							<el-input v-model="state.ruleForm.name" placeholder="请输入员工姓名" clearable></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="所在部门" :rules="[{ required: true, message: '所在部门不能为空' }]">
-							<el-cascader
-								:options="state.departmentList"
-								:props="{ checkStrictly: true, value: 'id', label: 'name' }"
-								placeholder="请选择所在部门"
-								clearable
-								class="w100"
-								v-model="state.ruleForm.department_id"
-								@change="getDepartId"
-							>
-								<template #default="{ node, data }">
-									<span>{{ data.name }}</span>
-									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
-								</template>
-							</el-cascader>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="id_card" -->
-						<el-form-item label="身份证号" :rules="[{ required: true, message: '身份证号不能为空' }]">
-							<el-input v-model="state.ruleForm.id_card" placeholder="请输入身份证号" clearable @change="autoComputer($event)"></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="角  色" :rules="[{ required: true, message: '角色不能为空' }]">
-                            <el-select v-model="state.ruleForm.role_id" placeholder="请选择角色">
-                                <el-option
-                                v-for="item in state.roleList"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="item.id"
-								:disabled="item.valid==0"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="phone" -->
-						<el-form-item label="联系电话" :rules="[{ required: true, message: '联系电话不能为空' }]">
-							<el-input v-model="state.ruleForm.phone" placeholder="请输入联系电话" clearable></el-input>
-						</el-form-item>
-					</el-col>
-
-					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="状态">
-                            <el-select v-model="state.ruleForm.valid" placeholder="请选择状态">
-                                <el-option
-                                v-for="item in state.options"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled"
-                                />
-                            </el-select>
-						</el-form-item>
-					</el-col> -->
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="状  态" :rules="[{ required: true, message: '状态不能为空' }]">
-                            <el-radio-group v-model="state.ruleForm.valid">
-                                <el-radio :label="1">启用</el-radio>
-                                <el-radio :label="0">禁用</el-radio>
-                            </el-radio-group>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<!--  prop="age" -->
-						<el-form-item label="年  龄" :rules="[{ required: true, message: '年龄不能为空' }]">
-							<el-input v-model="state.ruleForm.age" type="number" placeholder="请输入年龄" clearable min="0"
-							 @input="verifyNumberIntegerAndFloat('age',$event)"></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.id==0">
-						 <!-- prop="password" -->
-						<el-form-item label="初始密码" :rules="[{ required: true, message: '初始密码不能为空' }]">
-							<el-input v-model="state.ruleForm.password" type="password" show-password placeholder="请输入初始密码" clearable></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="入职日期" :rules="[{ required: true, message: '入职日期不能为空' }]">
-							<el-date-picker
-								v-model="state.ruleForm.entry_date"
-								type="date"
-								placeholder="请选择入职日期"
-								size="default"
-                                value-format="YYYY-MM-DD"
-							/>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="工  号" :rules="[{ required: false, message: '工号不能为空' }]">
-							<el-input v-model="state.ruleForm.card_num" type="text" placeholder="请输入工号" clearable></el-input>
-						</el-form-item>
-					</el-col>
-
-					<el-divider content-position="left">工资信息</el-divider>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="工资类型" :rules="[{ required: true, message: '状态不能为空' }]">
-                            <el-radio-group v-model="state.ruleForm.salary_type">
-                                <el-radio :label="1">计件</el-radio>
-                                <el-radio :label="2">非计件</el-radio>
-                            </el-radio-group>
-						</el-form-item>
-					</el-col>
-
-					<el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20">
-						<el-form-item label="基本工资" :rules="[{ required: true, message: '基本工资不能为空' }]">
-							<el-input v-model="state.ruleForm.base_salary" type="number" placeholder="填写工资基数金额" clearable min="0"
-							 @input="verifyNumberIntegerAndFloat('base_salary',$event)"></el-input>
-						</el-form-item>
-					</el-col>
-					<span class="mt5">元</span>
-					
-					<el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20">
-						<el-form-item label="加班工资" :rules="[{ required: true, message: '加班工资不能为空' }]">
-							<el-input v-model="state.ruleForm.over_salary" type="number" placeholder="填写工资基数金额" clearable min="0"
-							 @input="verifyNumberIntegerAndFloat('over_salary',$event)"></el-input>
-						</el-form-item>
-					</el-col>
-					<span class="mt5">元</span>
-					
-					<el-col :xs="24" :sm="11" :md="11" :lg="11" :xl="11" class="mb20">
-						<el-form-item label="计时工资" :rules="[{ required: true, message: '计时工资不能为空' }]">
-							<el-input v-model="state.ruleForm.hourly_salary" type="number" placeholder="填写工资基数金额" clearable min="0"
-							 @input="verifyNumberIntegerAndFloat('hourly_salary',$event)"></el-input>
-						</el-form-item>
-					</el-col>
-					<span class="mt5">元/小时</span>
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script setup lang="ts" name="systemDeptDialog">
-import { reactive, ref } from 'vue';
-import { ElMessage } from 'element-plus';
-import { Plus } from '@element-plus/icons-vue';
-import type { UploadProps } from 'element-plus';
-import config from '/@/config.ts';
-import Department from '/@/api/department/department.ts';
-import ruleReg from '/@/utils/ruleReg.ts';
-import { Session } from '/@/utils/storage';
-
-const handleAvatarSuccess: UploadProps['onSuccess'] = (
-  response,
-  uploadFile
-) => {
-	console.log('response',response);
-	state.ruleForm.img_url = response.data.url;
-	// state.ruleForm.img_url = URL.createObjectURL(uploadFile.raw!);
-	console.log('state.ruleForm.head_img',state.ruleForm.img_url);
-}
-const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
-  if (rawFile.type !== 'image/jpeg' && rawFile.type !== 'image/png') {
-    ElMessage.error('Avatar picture must be JPG and PNG format!')
-    return false
-  } else if (rawFile.size / 1024 / 1024 > 2) {
-    ElMessage.error('Avatar picture size can not exceed 2MB!')
-    return false
-  }
-  return true
-}
-
-const verifyNumberIntegerAndFloat = (type:string,e:any) => {
-	switch(type){
-		case 'age':
-			state.ruleForm.age = ruleReg.verifiyNumberInteger(e);
-			break;
-		case 'base_salary':
-			state.ruleForm.base_salary = ruleReg.verifyNumberIntegerAndFloat(e);
-			break;
-		case 'over_salary':
-			state.ruleForm.over_salary = ruleReg.verifyNumberIntegerAndFloat(e);
-			break;
-		case 'hourly_salary':
-			state.ruleForm.hourly_salary = ruleReg.verifyNumberIntegerAndFloat(e);
-			break;
-	}
-}
-
-const autoComputer = (e:any) => {
-	// console.log('e',e);
-	state.ruleForm.age = ruleReg.autoComputerID(e,state.ruleForm.name);
-	// console.log('state.ruleForm.age',state.ruleForm.age);
-}
-
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-
-// 定义变量内容
-const radio1 = ref('男')
-const deptDialogFormRef = ref();
-
-const state = reactive({
-	ruleForm: {
-		id: 0,
-		img_url: '',
-		gender: 0,
-		name: '',
-		department_id: '',
-		id_card: '',
-		age:<number|string> '',
-		phone: '',
-		valid: 1,
-        role_id: '',
-		password: '',
-		salary_type: 1,
-		base_salary: '',
-		over_salary: '',
-		hourly_salary: '',
-		entry_date: '',
-		card_num: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	action: config.host + '/admin/upload/file',
-	departmentList: [], //部门列表
-	roleList: [], //角色列表
-});
-
-const getDepartId = (e: any) => {
-	console.log('e',e);
-	state.ruleForm.department_id = e[e.length-1];
-	console.log('state.ruleForm.department_id',state.ruleForm.department_id);
-}
-
-// 打开弹窗
-const openDialog = (type: string, row: any) => {
-	initAdmin();
-	state.dialog.type = type;
-	if (type === 'edit') {
-		state.ruleForm = {
-			id: row.id,
-			img_url: row.img_url,
-			gender: row.gender,
-			name: row.name,
-			department_id: row.department_id,
-			id_card: row.id_card,
-			age: row.age,
-			phone: row.phone,
-			valid: row.valid,
-			role_id: row.role_id,
-			password: row.password,
-			salary_type: row.salary_type,
-			base_salary: row.base_salary,
-			over_salary: row.over_salary,
-			hourly_salary: row.hourly_salary,
-			entry_date: row.entry_date,
-			card_num: row.card_num,
-		};
-		if(state.ruleForm.gender==1){
-			radio1.value = '男';
-		}else if(state.ruleForm.gender==2){
-			radio1.value = '女';
-		}else{
-			radio1.value = '保密';
-		}
-		state.dialog.title = '修改员工032';
-		state.dialog.submitTxt = '修 改';
-	} else {
-        state.ruleForm = {
-			id: 0,
-            img_url: '',
-			gender: 0,
-			name: '',
-			department_id: '',
-			id_card: '',
-			age:<number|string> '',
-			phone: '',
-			valid: 1,
-			role_id: '',
-			password: '',
-			salary_type: 1,
-			base_salary: '',
-			over_salary: '',
-			hourly_salary: '',
-			entry_date: '',
-			card_num: '',
-        };
-		radio1.value = '保密';
-		state.dialog.title = '新增员工031';
-		state.dialog.submitTxt = '保 存';
-		// 清空表单,此项需加表单验证才能使用
-		// nextTick(() => {
-		// 	deptDialogFormRef.value.resetFields();
-		// });
-	}
-	state.dialog.isShowDialog = true;
-	// getMenuData();
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-// 提交
-const onSubmit = async() => {
-	if(!ruleReg.emptyReg(state.ruleForm.img_url)){
-		return ElMessage.warning("请上传员工照片");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.name)){
-		return ElMessage.warning("请输入员工姓名");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.department_id)){
-		return ElMessage.warning("请选择所在部门");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.id_card)){
-		return ElMessage.warning("请输入身份证号");
-	}else{
-		if(!ruleReg.checkID(state.ruleForm.id_card)){
-			return ElMessage.warning("身份证号格式不正确");
-		}
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.role_id)){
-		return ElMessage.warning("请选择角色");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.phone)){
-		return ElMessage.warning("请输入联系电话");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.age)){
-		return ElMessage.warning("请输入年龄");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.password)){
-		return ElMessage.warning("请设置初始密码");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.entry_date)){
-		return ElMessage.warning("请选择入职日期");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.base_salary)){
-		return ElMessage.warning("请输入基本工资");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.over_salary)){
-		return ElMessage.warning("请输入加班工资");
-	}
-	if(!ruleReg.emptyReg(state.ruleForm.hourly_salary)){
-		return ElMessage.warning("请输入计时工资");
-	}
-	let res: any = null;
-	if(state.dialog.type=='edit' || state.ruleForm.id!=0){
-		res = await Department.editAdmin(state.ruleForm);
-		if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-	}else{
-		res = await Department.addAdmin(state.ruleForm);
-		if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-	}
-	state.ruleForm.img_url = '';
-	ElMessage.success(res.msg);
-	closeDialog();
-	emit('refresh');
-};
-const departmentList = (list:any) => {
-	list.forEach((item:any)=>{
-		if(item.valid!=1){
-			item.disabled = true;
-		}
-		if(item.children){
-			departmentList(item.children);
-		}
-	});
-}
-// 初始化下拉列表
-const initAdmin = async() => {
-	console.log("初始化");
-	let res = await Department.initAdmin();
-	if(res.code != 0){
-		return ElMessage.error(res.msg);
-	}
-	state.departmentList = [];
-	state.roleList = [];
-	departmentList(res.data.departmentList);
-	state.departmentList = res.data.departmentList;
-	state.roleList = res.data.roleList;
-}
-// 初始化人员数据
-// const getMenuData = async() => {
-//     let res = await Department.detailAdmin(state.id);
-// 	if(res.code != 0){
-// 		return ElMessage.error(res.msg);
-// 	}
-// 	state.ruleForm = {
-// 		id: res.data.id,
-// 		img_url: res.data.img_url,
-// 		gender: res.data.gender,
-// 		name: res.data.name,
-// 		department_id: res.data.department_id,
-// 		id_card: res.data.id_card,
-// 		age: res.data.age,
-// 		phone: res.data.phone,
-// 		valid: res.data.valid,
-//         role_id: res.data.role_id,
-// 		password: res.data.password,
-// 	}
-// 	if(state.ruleForm.gender==1){
-// 		radio1.value = '男';
-// 	}else if(state.ruleForm.gender==2){
-// 		radio1.value = '女';
-// 	}else{
-// 		radio1.value = '保密';
-// 	}
-// };
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-	.avatar-uploader .avatar {
-		width: 178px;
-		height: 178px;
-		display: block;
-	}
-	.avatar-uploader .el-upload {
-		border: 1px dashed var(--el-border-color);
-		border-radius: 6px;
-		cursor: pointer;
-		position: relative;
-		overflow: hidden;
-		transition: var(--el-transition-duration-fast);
-	}
-	.avatar-uploader .el-upload:hover {
-		border-color: var(--el-color-primary);
-	}
-	.el-icon.avatar-uploader-icon {
-		font-size: 28px;
-		color: #8c939d;
-		width: 178px;
-		height: 178px;
-		text-align: center;
-	}
-</style>

+ 0 - 152
h5/src/views/underlying/department/export.vue

@@ -1,152 +0,0 @@
-<template>
-	<div class="system-edit-user-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="400px" draggable>
-            <div>确定要导出员工表吗?</div>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary">
-                        <a class="down-a" :href="state.ruleForm.path" target="target" download @click="onSubmit()">{{ state.dialog.submitTxt }}</a>
-                    </el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup name="payrollModuleAttendanceImport">
-import { reactive, ref } from 'vue';
-import { ElMessageBox, ElMessage } from 'element-plus';
-import type { ElForm, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
-import { UploadFilled } from '@element-plus/icons-vue';
-type FormInstance = InstanceType<typeof ElForm>;
-import Department from '/@/api/department/department.ts';
-import config from '/@/config.ts';
-
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-const deptDialogFormRef = ref();
-
-const upload = ref<UploadInstance>();
-const refForm = ref<FormInstance>();
-const uploadEle = ref<any>(null);
-const state = reactive<any>({
-	productOptions: [],
-	ruleForm: {
-		path: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	isTips: false,
-	fileUrl: '',
-	uploadUrl: config.host + '/admin/upload/file',
-	download_file_url: config.file + '/static/admin.xlsx',
-});
-
-// 打开弹窗
-const openDialog = (url:any) => {
-	state.ruleForm = {
-		path: url,
-	};
-	// ClearFiles();
-	state.dialog.isShowDialog = true;
-    state.dialog.title = '导出员工036';
-    state.dialog.submitTxt = '导 出';
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-// 清除文件缓存
-const ClearFiles = () => {
-	console.log('uploadEle.value=>', uploadEle.value);
-	if (uploadEle.value != null) {
-		state.isTips = false;
-		state.ruleForm.path = '';
-		uploadEle.value.clearFiles();
-	}
-};
-
-// 导出
-const onSubmit = () => {
-    ElMessage.success('导出成功,请留意浏览器下载列表');
-    console.log('submit succ!');
-    closeDialog();
-    emit('refresh');
-};
-
-// 上传文件成功的事件
-const handleAvatarSuccess = (res: any, file: any) => {
-	console.log('res=>', res);
-	console.log('file=>', file);
-	state.ruleForm.path = res.data.file;
-	state.fileUrl = res.data.url;
-	state.isTips = true;
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-.down-a{
-    text-decoration: none;
-	color: #FFFFFF;
-}
-
-.tips {
-	font-size: 12px;
-	line-height: 1.2;
-	color: #666;
-}
-
-.two {
-	margin: 8px 0px;
-}
-
-.download-file {
-	margin-top: 10px;
-	a {
-		text-decoration: none;
-		color: #409eff;
-	}
-}
-
-.avatar-uploader .avatar {
-	width: 178px;
-	height: 178px;
-	display: block;
-}
-
-.avatar-uploader .el-upload {
-	border: 1px dashed var(--el-border-color);
-	border-radius: 6px;
-	cursor: pointer;
-	position: relative;
-	overflow: hidden;
-	transition: var(--el-transition-duration-fast);
-}
-
-.avatar-uploader .el-upload:hover {
-	border-color: var(--el-color-primary);
-}
-
-.el-icon.avatar-uploader-icon {
-	font-size: 28px;
-	color: #8c939d;
-	width: 178px;
-	height: 178px;
-	text-align: center;
-}
-</style>

+ 0 - 198
h5/src/views/underlying/department/import.vue

@@ -1,198 +0,0 @@
-<template>
-	<div class="system-edit-user-container">
-		<el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="800px" draggable>
-			<div>第一步:请点击下面的链接下载Excel模板,并按照模板填写信息。</div>
-			<el-button class="download-file" key="primary" type="default">
-				<a :href="state.download_file_url" target="target" download>下载模板</a>
-			</el-button>
-			<div class="two">第二步:导入Excel模板文件。</div>
-			<el-form :model="state.ruleForm" ref="refForm">
-				<el-form-item label="文件" prop="path" :rules="[{ required: true, message: '请上传文件' }]">
-					<el-upload
-						ref="uploadEle"
-						class="upload-demo"
-						drag
-						:action="state.uploadUrl"
-						:limit="1"
-						method="post"
-						:on-success="handleAvatarSuccess"
-						:on-remove="ClearFiles"
-					>
-						<el-icon class="el-icon--upload">
-							<upload-filled />
-						</el-icon>
-						<div class="el-upload__text">拖拽文件或者 <em>点击上传</em></div>
-						<template #tip>
-							<div class="el-upload__tip" v-if="state.isTips">已上传文件到:{{ state.fileUrl }},请点击导入按钮开始导入</div>
-						</template>
-					</el-upload>
-				</el-form-item>
-			</el-form>
-
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary" @click="onSubmit(refForm)">{{ state.dialog.submitTxt }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup name="payrollModuleAttendanceImport">
-import { reactive, ref } from 'vue';
-import { ElMessageBox, ElMessage } from 'element-plus';
-import type { ElForm, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
-import { UploadFilled } from '@element-plus/icons-vue';
-type FormInstance = InstanceType<typeof ElForm>;
-import Department from '/@/api/department/department.ts';
-import config from '/@/config.ts';
-
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-const deptDialogFormRef = ref();
-
-const upload = ref<UploadInstance>();
-const refForm = ref<FormInstance>();
-const uploadEle = ref<any>(null);
-const state = reactive<any>({
-	productOptions: [],
-	ruleForm: {
-		path: '',
-	},
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-	isTips: false,
-	fileUrl: '',
-	uploadUrl: config.host + '/admin/upload/file',
-	download_file_url: config.file + '/static/admin.xlsx',
-});
-
-// 打开弹窗
-const openDialog = () => {
-	state.ruleForm = {
-		path: '',
-	};
-	ClearFiles();
-	state.dialog.isShowDialog = true;
-    state.dialog.title = '导入员工035';
-    state.dialog.submitTxt = '导 入';
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-// 清除文件缓存
-const ClearFiles = () => {
-	console.log('uploadEle.value=>', uploadEle.value);
-	if (uploadEle.value != null) {
-		state.isTips = false;
-		state.ruleForm.path = '';
-		uploadEle.value.clearFiles();
-	}
-};
-
-// 新增
-const onSubmit = (formEl: FormInstance | undefined) => {
-	console.log('state.ruleForm.path', state.ruleForm.path);
-	console.log('onSubmit formEl', formEl);
-	if (!state.ruleForm.path) {
-		ElMessage.error('请先上传');
-		return;
-	}
-	if (!formEl) return;
-	formEl.validate(async (valid) => {
-		console.log('valid', valid);
-		if (valid) {
-			let res: any = null;
-			res = await Department.import(state.ruleForm);
-			if (res.code != 0) {
-				closeDialog();
-				ElMessage.error(res.msg);
-				return;
-			}
-			state.isTips = false;
-			state.ruleForm.path = '';
-			uploadEle.value.clearFiles();
-			ElMessage.success(res.msg);
-			console.log('submit succ!');
-			closeDialog();
-			emit('refresh');
-		} else {
-			ElMessage.error('导入失败,请检查表格是否正确');
-			console.log('error submit!');
-			return false;
-		}
-	});
-};
-
-// 上传文件成功的事件
-const handleAvatarSuccess = (res: any, file: any) => {
-	console.log('res=>', res);
-	console.log('file=>', file);
-	state.ruleForm.path = res.data.file;
-	state.fileUrl = res.data.url;
-	state.isTips = true;
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-.tips {
-	font-size: 12px;
-	line-height: 1.2;
-	color: #666;
-}
-
-.two {
-	margin: 8px 0px;
-}
-
-.download-file {
-	margin-top: 10px;
-	a {
-		text-decoration: none;
-		color: #409eff;
-	}
-}
-
-.avatar-uploader .avatar {
-	width: 178px;
-	height: 178px;
-	display: block;
-}
-
-.avatar-uploader .el-upload {
-	border: 1px dashed var(--el-border-color);
-	border-radius: 6px;
-	cursor: pointer;
-	position: relative;
-	overflow: hidden;
-	transition: var(--el-transition-duration-fast);
-}
-
-.avatar-uploader .el-upload:hover {
-	border-color: var(--el-color-primary);
-}
-
-.el-icon.avatar-uploader-icon {
-	font-size: 28px;
-	color: #8c939d;
-	width: 178px;
-	height: 178px;
-	text-align: center;
-}
-</style>

+ 0 - 641
h5/src/views/underlying/department/index.vue

@@ -1,641 +0,0 @@
-<template>
-    <div>
-        <el-card class="box-card">
-            <template #header>
-                <div class="card-header">
-                    <div class="system-menu-search">
-                        <el-input size="default" v-model="state.param2.keyword" placeholder="请输入关键词" style="max-width: 180px"> </el-input>
-                        <el-button size="default" type="primary" class="ml10" @click="getTableData()">
-                            <el-icon>
-                                <ele-Search />
-                            </el-icon>
-                            查询
-                        </el-button>
-                    </div>
-                    <div>
-                        <el-button type="primary" @click="onOpenAddEmployee('add')">新增员工</el-button>
-                        <el-button type="primary" @click="pass()">审核</el-button>
-                        <el-button type="danger" @click="repass()">反审核</el-button>
-                        <el-button type="success" @click="importExcel()">导入</el-button>
-                        <el-button type="success" @click="exportExcel()">
-                            导出
-                            <!-- <a :href="state.download_file_url" target="target" download>导出</a> -->
-                        </el-button>
-                        <el-button type="danger" @click="del()">删除</el-button>
-                    </div>
-                </div>
-            </template>
-
-            <el-row>
-                <el-col :span="6">
-                    <div class="card-header ml5 mr5 mt5 mb5">
-                        <span class="dept-all" @click="deptAll()">全部部门</span>
-                        <el-button link type="primary" @click="onOpenAddDept('add')">添加</el-button>
-                    </div>
-                    <el-tree :data="state.data" :props="defaultProps" @node-click="handleNodeClick" :draggable="false">
-                        <template #default="{ node, data }">
-                            <span class="custom-tree-node">
-                                <span>{{ node.label }}</span>
-                                <span>
-                                    <a class="a1" @click="onOpenEditDept('edit',data)"> 编辑 </a>
-                                    <a class="a2" @click="remove(node, data)"> 删除 </a>
-                                </span>
-                            </span>
-                        </template>
-                    </el-tree>
-                </el-col>
-                <el-col :span="18">
-                    <el-table
-                        ref="multipleTableRef"
-                        :data="state.tableData"
-                        style="width: 100%"
-                        @selection-change="handleSelectionChange"
-                    >
-                        <el-table-column type="selection" width="55" />
-                        <el-table-column type="index" label="序号" width="60" />
-                        <el-table-column property="name" label="员工姓名" />
-                        <el-table-column property="id_card" label="证件号码" />
-                        <el-table-column property="department.name" label="部门" />
-                        <el-table-column property="phone" label="电话" width="120" />
-                
-                        <el-table-column property="valid" label="状态" width="90">
-                            <template #default="scope">
-                                <el-button link type="danger" size="default" v-if="scope.row.valid == 0">禁用</el-button>
-                                <el-button link type="primary" size="default" v-if="scope.row.valid == 1">启用</el-button>
-                            </template>
-                        </el-table-column>
-                        
-                        <el-table-column label="审核状态" width="120">
-                            <template #default="scope">
-                                <el-button link type="danger" v-if="scope.row.is_pass==-1">审核不通过</el-button>
-                                <el-button link type="info" v-if="scope.row.is_pass==0">待审核</el-button>
-                                <el-button link type="success" v-if="scope.row.is_pass==1">审核通过</el-button>
-                            </template>
-                        </el-table-column>
-
-                        <el-table-column fixed="right" label="操作" width="160">
-                            <template #default="scope">
-                                <div class="disflex">
-                                    <!--  :disabled="scope.row.is_pass==1" -->
-                                    <el-button link type="primary" size="small" @click="onOpenEditEmployee('edit',scope.row)" :disabled="scope.row.is_pass==1">编辑</el-button>
-                                    <el-button link type="primary" size="small" @click="onOpenDetail(scope.row.id)">详情</el-button>
-                                    <el-button link type="primary" size="small">
-                                        <el-dropdown @command="handleCommand">
-                                            <span class="el-dropdown-link">
-                                                <span class="dropdown-text">更多</span>
-                                                <el-icon class="el-icon--right">
-                                                    <arrow-down />
-                                                </el-icon>
-                                            </span>
-                                            <template #dropdown>
-                                                <el-dropdown-menu>
-                                                    <el-dropdown-item command="取消审核" @click="rePassOne(scope.row)">取消审核</el-dropdown-item>
-                                                    <!-- <el-dropdown-item command="工资设置">工资设置</el-dropdown-item> -->
-                                                    <el-dropdown-item command="重置登录密码" @click="onOpenResetPassword(scope.row)">重置登录密码</el-dropdown-item>
-                                                    <!-- <el-dropdown-item command="查看计件">查看计件</el-dropdown-item> -->
-                                                    <el-dropdown-item command="查看员工" @click="onOpenDetail(scope.row.id)">查看员工</el-dropdown-item>
-                                                </el-dropdown-menu>
-                                            </template>
-                                        </el-dropdown>
-                                    </el-button>
-                                </div>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-
-                    <el-pagination
-                        @size-change="onHandleSizeChange"
-                        @current-change="onHandleCurrentChange"
-                        class="mt15"
-                        :pager-count="5"
-                        :page-sizes="[10, 20, 30]"
-                        v-model:current-page="state.param2.page"
-                        background
-                        v-model:page-size="state.param2.list_rows"
-                        layout="total, sizes, prev, pager, next, jumper"
-                        :total="state.total"
-                    >
-                    </el-pagination>
-                </el-col>
-            </el-row>
-        </el-card>
-		<DeptEditDialog ref="deptEditDialogRef" @refresh="getTableData()" />
-		<DeptDialog ref="deptDialogRef" @refresh="getTableData()" />
-        <ResetPasswordDialog ref="resetPasswordDialogRef" @refresh="getTableData()" />
-        <DetailDialog ref="detailDialogRef" @refresh="getTableData()" />
-        <ImportExcelDialog ref="importExcelDialogRef" @refresh="getTableData()" />
-        <ExportExcelDialog ref="exportExcelDialogRef" @refresh="getTableData()" />
-    </div>
-</template>
-
-<script lang="ts" setup name="underlyingDepartment">
-    import { ref, reactive, onMounted, defineAsyncComponent } from 'vue';
-    import { ElTable, ElMessage, ElMessageBox } from 'element-plus';
-    import { ArrowDown, Download } from '@element-plus/icons-vue';
-    import type Node from 'element-plus/es/components/tree/src/model/node';
-    import Department from '/@/api/department/department.ts';
-    import config from '/@/config.ts';
-    
-    const DeptEditDialog = defineAsyncComponent(() => import('/@/views/underlying/department/departEdit.vue'));
-    const deptEditDialogRef = ref();
-    // 打开新增部门弹窗
-    const onOpenAddDept = (type: string) => {
-        deptEditDialogRef.value.openDialog(type);
-    };
-    const onOpenEditDept = (type: string, data: Tree) => {
-        deptEditDialogRef.value.openDialog(type, data);
-    }
-
-    const DeptDialog = defineAsyncComponent(() => import('/@/views/underlying/department/edit.vue'));
-    const deptDialogRef = ref();
-    // 打开新增员工弹窗
-    const onOpenAddEmployee = (type: string) => {
-        deptDialogRef.value.openDialog(type);
-    };
-    // 打开编辑员工弹窗
-    const onOpenEditEmployee = (type: string, row: any) => {
-        row = JSON.parse(JSON.stringify(row));
-        console.log('row',row);
-        deptDialogRef.value.openDialog(type, row);
-    };
-
-    const DetailDialog = defineAsyncComponent(() => import('/@/views/underlying/department/detail.vue'));
-    const detailDialogRef = ref();
-    // 打开详情弹窗
-    const onOpenDetail = (id: number) => {
-        detailDialogRef.value.openDialog(id);
-    };
-
-    interface Tree {
-        label: string
-        name: string
-        children?: Tree[]
-        department_id: number
-        leader_id: number
-        valid: number
-    }
-    const handleNodeClick = (data: Tree) => {
-        console.log(data);
-        state.param2.department_id = JSON.parse(JSON.stringify(data)).id;
-        console.log('state.param2.department_id',state.param2.department_id);
-        getAdminList();
-    }
-    const data: Tree[] = [
-        {
-            label: '研发部 1',
-            name: '研发部 1',
-            department_id: 1,
-            leader_id: 1,
-            valid: 1,
-            children: [
-                {
-                    label: '研发部 1-1',
-                    name: '研发部 1-1',
-                    department_id: 1,
-                    leader_id: 1,
-                    valid: 1,
-                    children: [
-                        {
-                            label: '研发部 1-1-1',
-                            name: '研发部 1-1-1',
-                            department_id: 1,
-                            leader_id: 1,
-                            valid: 1,
-                        },
-                    ],
-                },
-            ],
-        },
-        {
-            label: '运营部 2',
-            name: '运营部 2',
-            department_id: 1,
-            leader_id: 1,
-            valid: 1,
-            children: [
-                {
-                    label: '运营部 2-1',
-                    name: '运营部 2-1',
-                    department_id: 1,
-                    leader_id: 1,
-                    valid: 1,
-                    children: [
-                        {
-                            label: '运营部 2-1-1',
-                            name: '运营部 2-1-1',
-                            department_id: 1,
-                            leader_id: 1,
-                            valid: 1,
-                        },
-                    ],
-                },
-                {
-                    label: '运营部 2-2',
-                    name: '运营部 2-2',
-                    department_id: 1,
-                    leader_id: 1,
-                    valid: 1,
-                    children: [
-                        {
-                            label: '运营部 2-2-1',
-                            name: '运营部 2-2-1',
-                            department_id: 1,
-                            leader_id: 1,
-                            valid: 1,
-                        },
-                    ],
-                },
-            ],
-        },
-        {
-            label: '生产部 3',
-            name: '生产部 3',
-            department_id: 1,
-            leader_id: 1,
-            valid: 1,
-            children: [
-                {
-                    label: '生产部 3-1',
-                    name: '生产部 3-1',
-                    department_id: 1,
-                    leader_id: 1,
-                    valid: 1,
-                    children: [
-                        {
-                            label: '生产部 3-1-1',
-                            name: '生产部 3-1-1',
-                            department_id: 1,
-                            leader_id: 1,
-                            valid: 1,
-                        },
-                    ],
-                },
-                {
-                    label: '生产部 3-2',
-                    name: '生产部 3-2',
-                    department_id: 1,
-                    leader_id: 1,
-                    valid: 1,
-                    children: [
-                        {
-                            label: '生产部 3-2-1',
-                            name: '生产部 3-2-1',
-                            department_id: 1,
-                            leader_id: 1,
-                            valid: 1,
-                        },
-                    ],
-                },
-            ],
-        },
-    ]
-    const defaultProps = {
-        children: 'children',
-        label: 'label',
-    }
-
-    interface User {
-        id: number
-        head_img: string
-		gender: number
-		name: string
-		department_id: number
-		id_card: string
-		age: number
-		phone: string
-		valid: number
-        role_id: number
-        create_time: string
-        update_time: string
-        is_pass: number
-        pass_time: string
-    }
-    const multipleTableRef = ref<InstanceType<typeof ElTable>>()
-    const multipleSelection = ref<User[]>([])
-    const toggleSelection = (rows?: User[]) => {
-        if (rows) {
-            rows.forEach((row) => {
-                // TODO: improvement typing when refactor table
-                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
-                // @ts-expect-error
-                multipleTableRef.value!.toggleRowSelection(row, undefined)
-            })
-        } else {
-            multipleTableRef.value!.clearSelection()
-        }
-    }
-    const handleSelectionChange = (val: User[]) => {
-        multipleSelection.value = val
-        console.log('multipleSelection',multipleSelection.value);
-    }
-
-    const ResetPasswordDialog = defineAsyncComponent(() => import('/@/views/underlying/department/resetPassword.vue'));
-    const resetPasswordDialogRef = ref();
-    const onOpenResetPassword = (row:any) => {
-        resetPasswordDialogRef.value.openDialog(row);
-    }
-    const handleCommand = (command: string) => {
-        console.log('command',command);
-    }
-    const del = () => {
-        console.log('multipleSelection.value',multipleSelection.value);
-        if(multipleSelection.value.length==0){
-            return ElMessage.warning("请选择要操作的列表");
-        }
-        let name = [];
-        let noName = [];
-        state.ids = [];
-        for(let i=0;i<multipleSelection.value.length;i++){
-            if(multipleSelection.value[i].is_pass==1){
-                noName.push(multipleSelection.value[i].name);
-            }else{
-                name.push(multipleSelection.value[i].name);
-                state.ids.push(multipleSelection.value[i].id);
-            }
-        }
-        if(noName.length>0){
-            return ElMessage.warning(`员工名称:“${noName}”不允许删除,请先反审核再操作`);
-        }
-        ElMessageBox.confirm(`此操作将永久删除员工名称:“${name}”,是否继续?`, '提示', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'warning',
-        })
-        .then(() => {
-            console.log('ids',JSON.stringify(state.ids).split('[')[1].split(']')[0]);
-            delOnce('del',JSON.stringify(state.ids).split('[')[1].split(']')[0]);
-            // getTableData();
-            // ElMessage.success('删除成功');
-        })
-        .catch(() => {});
-    }
-    const remove = (node: Node, data: Tree) => {
-        console.log('node', node);
-        console.log('data', data);
-        ElMessageBox.confirm(`此操作将永久删除部门名称:“${data.name}”,是否继续?`, '提示', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'warning',
-        })
-        .then(() => {
-            delOnce('remove',data.id);
-            // getTableData();
-            // ElMessage.success('删除成功');
-        })
-        .catch(() => {});
-        // ElMessage(`click on 删除 ${data.name}`);
-    }
-    const delOnce = async(type: string, ids: number | string) => {
-        let res: any = null;
-        if(type=='del'){
-            res = await Department.delAdmin(ids);
-            if(res.code != 0){
-                return ElMessage.error(res.msg);
-            }
-        }else if(type=='remove'){
-            res = await Department.del(ids);
-            if(res.code != 0){
-                return ElMessage.error(res.msg);
-            }
-        }else{
-            return ElMessage.warning("操作有误");
-        }
-        getTableData();
-        ElMessage.success(res.msg);
-    }
-
-    const pass = () => {
-        console.log('multipleSelection.value',multipleSelection.value.length);
-        if(multipleSelection.value.length==0){
-            return ElMessage.warning("请选择要操作的列表");
-        }
-        let name = [];
-        let noName= [];
-        state.ids = [];
-        for(let i=0;i<multipleSelection.value.length;i++){
-            if(multipleSelection.value[i].is_pass==1){
-                noName.push(multipleSelection.value[i].name);
-            }else{
-                name.push(multipleSelection.value[i].name);
-                state.ids.push(multipleSelection.value[i].id);
-            }
-        }
-        if(noName.length>0){
-            return ElMessage.warning(`员工名称:“${noName}”已审核通过,无需重复操作`);
-        }
-        ElMessageBox.confirm(`此操作将审核:“${name}”,是否继续?`, '提示', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'warning',
-        })
-        .then(() => {
-            console.log('ids',JSON.stringify(state.ids).split('[')[1].split(']')[0]);
-            requestPass('pass',JSON.stringify(state.ids).split('[')[1].split(']')[0]);
-            // getTableData();
-            // ElMessage.success('删除成功');
-        })
-        .catch(() => {});
-    }
-    const repass = () => {
-        console.log('multipleSelection.value',multipleSelection.value.length);
-        if(multipleSelection.value.length==0){
-            return ElMessage.warning("请选择要操作的列表");
-        }
-        let name = [];
-        let noName= [];
-        state.ids = [];
-        for(let i=0;i<multipleSelection.value.length;i++){
-            if(multipleSelection.value[i].is_pass==0){
-                noName.push(multipleSelection.value[i].name);
-            }else{
-                name.push(multipleSelection.value[i].name);
-                state.ids.push(multipleSelection.value[i].id);
-            }
-        }
-        if(noName.length>0){
-            return ElMessage.warning(`员工名称:“${noName}”已处于反审核状态,无需重复操作`);
-        }
-        ElMessageBox.confirm(`此操作将反审核:“${name}”,是否继续?`, '提示', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'warning',
-        })
-        .then(() => {
-            console.log('ids',JSON.stringify(state.ids).split('[')[1].split(']')[0]);
-            requestPass('rePass',JSON.stringify(state.ids).split('[')[1].split(']')[0]);
-            // getTableData();
-            // ElMessage.success('删除成功');
-        })
-        .catch(() => {});
-    }
-    const requestPass = async(type: string, ids: number | string) => {
-        let res: any = null;
-        if(type=='pass'){
-            res = await Department.passAdmin(ids);
-            if(res.code != 0){
-                return ElMessage.error(res.msg);
-            }
-        }else if(type=='rePass'){
-            res = await Department.rePassAdmin(ids);
-            if(res.code != 0){
-                return ElMessage.error(res.msg);
-            }
-        }else{
-            return ElMessage.warning("操作有误");
-        }
-        getTableData();
-        ElMessage.success(res.msg);
-    }
-    const rePassOne = (row:any) => {
-        if(row.is_pass==0){
-            return ElMessage.warning("该记录已处于反审核状态,无需重复操作");
-        }
-        ElMessageBox.confirm(`此操作将反审核:“${row.name}”,是否继续?`, '提示', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'warning',
-        })
-        .then(() => {
-            requestPass('rePass',row.id);
-        })
-        .catch(() => {});
-    }
-
-    const ImportExcelDialog = defineAsyncComponent(() => import('/@/views/underlying/department/import.vue'));
-    const importExcelDialogRef = ref();
-    const importExcel = () => {
-        importExcelDialogRef.value.openDialog();
-    }
-
-    const ExportExcelDialog = defineAsyncComponent(() => import('/@/views/underlying/department/export.vue'));
-    const exportExcelDialogRef = ref();
-    const exportExcel = async() => {
-        let res = await Department.export();
-        if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-        state.download_file_url = config.file +'/'+ res.data.path;
-        console.log('state.download_file_url',state.download_file_url);
-        exportExcelDialogRef.value.openDialog(state.download_file_url);
-    }
-
-    const deptAll = () => {
-        state.param2 = {
-            keyword: '',
-            page: 1,
-            list_rows: 10,
-            department_id: 0,
-        };
-        getTableData();
-    }
-
-    const state = reactive({
-        tableData: [],
-        total: 0,
-        loading: false,
-        param1: {
-            keyword: '',
-        },
-        param2: {
-            keyword: '',
-            page: 1,
-            list_rows: 10,
-            department_id: 0,
-        },
-        ids:<any> [],
-        data: [],
-        download_file_url: '',
-    });
-    const initDept = async() => {
-        let res = await Department.init();
-        if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-    }
-    const getDeptList = async() => {
-        let res = await Department.list(state.param1);
-        if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-        state.data = res.data;
-        getAdminList();
-    }
-    const getAdminList = async() => {
-        console.log("getAdminList");
-        let res = await Department.listAdmin(state.param2);
-        if(res.code != 0){
-            return ElMessage.error(res.msg);
-        }
-        state.tableData = res.data.data;
-        state.total = res.data.total;
-    }
-    // 初始化表格数据
-    const getTableData = () => {
-        getDeptList();
-        state.loading = true;
-        setTimeout(() => {
-            state.loading = false;
-        }, 500);
-    };
-    // 分页改变
-    const onHandleSizeChange = (val: number) => {
-        state.param2.list_rows = val;
-        getTableData();
-    };
-    // 分页改变
-    const onHandleCurrentChange = (val: number) => {
-        state.param2.page = val;
-        getTableData();
-    };
-    // 页面加载时
-    onMounted(() => {
-        initDept();
-        getTableData();
-    });
-</script>
-
-<style lang="scss" scoped>
-    .card-header {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        .dept-all{
-            cursor: pointer;
-        }
-        .dept-all:hover{
-            cursor: pointer;
-            color: #409EFF;
-        }
-    }
-    .box-card {
-        margin: 10px;
-    }
-    .disflex{
-        display: flex;
-    }
-    .example-showcase .el-dropdown-link {
-        cursor: pointer;
-        color: var(--el-color-primary);
-        display: flex;
-        align-items: center;
-    }
-    .dropdown-text{
-        color: #409EFF;
-        font-size: 12px;
-    }
-    .custom-tree-node {
-        flex: 1;
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        font-size: 14px;
-        padding-right: 8px;
-        .a1{
-            color: #409EFF;
-        }
-        .a2{
-            color: #F56C6C;
-            margin-left: 8px
-        }
-    }
-</style>

+ 0 - 136
h5/src/views/underlying/department/resetPassword.vue

@@ -1,136 +0,0 @@
-<template>
-    <div>
-        <el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px">
-			<el-form ref="deptDialogFormRef" :model="state.ruleForm" size="default" label-width="90px">
-				<el-row :gutter="35">
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="员工姓名">
-							<el-input v-model="state.name" type="text" placeholder="员工姓名" clearable :disabled="true"></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="设置密码">
-							<el-input v-model="state.ruleForm.password" type="password" show-password placeholder="请设置密码" clearable></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-						<el-form-item label="确认密码">
-							<el-input v-model="state.ruleForm.rePassword" type="password" show-password placeholder="请确认密码" clearable></el-input>
-						</el-form-item>
-					</el-col>
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-    </div>
-</template>
-
-<script setup lang="ts" name="underlyingDeptDialog">
-import { reactive, ref } from 'vue';
-import { ElMessage } from 'element-plus';
-import ruleReg from '/@/utils/ruleReg.ts';
-import Department from '/@/api/department/department.ts';
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['refresh']);
-
-// 定义变量内容
-const deptDialogFormRef = ref();
-const state = reactive({
-	ruleForm: {
-        id: 0,
-		password: '',
-		rePassword: '',
-	},
-	options: [], // 单位类型
-	dialog: {
-		isShowDialog: false,
-		type: '',
-		title: '',
-		submitTxt: '',
-	},
-    name: '',
-});
-// 打开弹窗
-const openDialog = (row: any) => {
-    state.name = row.name;
-    state.ruleForm = {
-        id: row.id,
-		password: '',
-		rePassword: '',
-	},
-    console.log('id',state.ruleForm.id);
-    state.dialog.title = '重置密码034';
-    state.dialog.submitTxt = '确定';
-	state.dialog.isShowDialog = true;
-	getMenuData();
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialog.isShowDialog = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-// 提交
-const onSubmit = async() => {
-    if(!ruleReg.emptyReg(state.ruleForm.password) || !ruleReg.emptyReg(state.ruleForm.rePassword)){
-        return ElMessage.warning("密码不能为空");
-    }
-    if(state.ruleForm.password!=state.ruleForm.rePassword){
-        return ElMessage.warning("两次输入的密码不一致");
-    }
-    let res = await Department.resetPassword(state.ruleForm);
-    if(res.code != 0){
-        ElMessage.error(res.msg);
-    }
-    ElMessage.success(res.msg);
-	closeDialog();
-	emit('refresh');
-	// if (state.dialog.type === 'add') { }
-};
-// 初始化部门数据
-const getMenuData = () => {
-    state.options = [
-        {
-            label: '长度单位',
-            value: '长度单位',
-            disabled: false,
-        },
-        {
-            label: '面积单位',
-            value: '面积单位',
-            disabled: false,
-        },
-        {
-            label: '体积单位',
-            value: '体积单位',
-            disabled: false,
-        },
-        {
-            label: '容积单位',
-            value: '容积单位',
-            disabled: false,
-        },
-        {
-            label: '质量单位',
-            value: '质量单位',
-            disabled: false,
-        },
-    ];
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>
-
-<style lang="scss" scoped>
-
-</style>