Browse Source

Merge branch 'master' of http://git.ius.plus/denny.zhao/VinnoManagementSystem

Jeremy 2 years ago
parent
commit
2727a04a4c

+ 57 - 0
VinnoManagementSystem/src/api/wing/user.js

@@ -0,0 +1,57 @@
+import http from "@/utils/request"
+import common from "@/utils/common"
+
+export default {
+    fetchUserList: {
+		method: 'GetUserPagesAsync',
+		name: "用户列表",
+		post: async function (params) {            
+            var queryType = params.queryType == null ? '' : params.queryType
+            var queryState = params.queryState == null ? '' : params.queryState
+            var data = {
+                'PageIndex': params.page,
+                'PageSize': params.pageSize,
+                'QueryType': queryType,
+                'Keyword': params.keyword,
+                'QueryState': queryState
+            }
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+	},
+    modifyUserPassword: {
+		method: 'ResetUserPassword',
+		name: "重置用户密码",
+		post: async function (req) {            
+            var data = {
+                'UserCode': req.code, 
+                'PassWord': req.password
+            }
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+	},
+    userDetailInfo: {
+		method: 'FindUserByCode',
+		name: "用户详情",
+		post: async function (code) {            
+            var data = {
+                'UserCode': code, 
+            }
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+	},
+}

+ 22 - 1
VinnoManagementSystem/src/locales/lang/en.js

@@ -12,6 +12,8 @@ export default {
 	rejected: "Rejected",
 	version: "Version",
 	more: "More",
+	yes: "Yes",
+	no: "No",
 	login: {
 		slogan: 'High performance / delicate / grace',
 		describe: 'Vue3 + element plus based front-end solutions in the background.',
@@ -64,10 +66,29 @@ export default {
 		authorityName: "Authority Name",
 		uniqueCode: "Unique Code",
 		uniqueCodeTip: "The system is unique and cannot be repeated, otherwise the permission will be invalid.",
+		userStatus: "User Status",
+		authenticationState: "Authentication State",
+		userStatusPlaceholder: "Please Choose User Status",		
+		nonactivated: "Nonactivated",
 		authorityNameRequire: "Please input authority name",
 		uniqueCodeRequire: "Please input unique code",
 		frontAuthority: "Front Authority",
 		selectItem: "Please select the menu on the left to operate",
+		activated: "Activated",
+		uncertified: "Uncertified",
+		waitcertified: "Wait Certified",
+		rejected: "Rejected",
+		certified: "Certified",
+		registerTime: "Register Time",
+		certificationAudit: "Certification audit",
+		rejectReason: "Reject Reason",
+		inputRejectReason: "Input RejectReason",
+		rejectReasonRequired: "RejectReason Required",
+		auditText: "Approved or not",
+		doctorLicense: "Doctor's license",
+		cardFront: "Card Front",
+		cardreverse: "Card Reverse",
+		applyRoleName: "Apply Role",
 	},
 	dialogBox: {
 		confirmWarningText:"Confirm whether to ",
@@ -134,7 +155,7 @@ export default {
 		queryType1: "Admin Name",
 		assignAdmin: "Assign Admin",
 		confirmDelete: "Are You Sure To Del This Organization ?",
-		confirmDelete2: "There has users or devices in the current organization. Are you sure to delete this Organization",
+		confirmDelete2: "There has users or devices in the current organization. Are you sure to delete this Organization?",
 		frontOrganization: "Front Organization",
 		approveOrgMsg: "Are You Sure To Approve This Organization?",
 		orgNameRequire: "Please input Organization Name",

+ 40 - 19
VinnoManagementSystem/src/locales/lang/zh-cn.js

@@ -12,18 +12,20 @@ export default {
 	rejected: "审核不通过",
 	version: "版本",
 	more: "更多",
+	yes: "是",
+	no: "否",
 	login: {
 		slogan: '高性能 / 精致 / 优雅',
-		describe: '基于Vue3 + Element-Plus 的中后台前端解决方案',
+		describe: '基于Vue3 + Element-Plus 的中后台前端解决方案',
 		signInTitle: '杏聆荟管理后台',
-		rememberMe: '记住',
+		rememberMe: '记住密码',
 		forgetPassword: '忘记密码',
 		signIn: '登录',
 		signInOther: '其他登录方式',
 		userPlaceholder: '用户名 / 手机 / 邮箱',
 		userError: '请输入用户名',
 		PWPlaceholder: '请输入密码',
-		PWError: '请输入密码',
+		PWError: '请输入密码',
 		admin: '管理员',
 		copyright: "©2019-2022 Vinno Corporation. All rights reserved.",
 		loginError: '登录失败',
@@ -33,13 +35,13 @@ export default {
 		loginResult: "登录成功",
 		addPassword: "新增密码",
 		editPassword: "修改密码",
-		inputAdminCode: "请输入用户编码",
+		inputAdminCode: '请输入用户编码',
 		inputAdminOldPwd: "请输入旧密码",
-		inputAdminPwd: "请输入登录密码",
-		inputPwdValidate: "密码必须是由4-20位字母+数字组合",
-		againInputPwd: "请再次输入密码",
-		pwdDiff: "两次输入密码不一致",
-		adminOldPwd: "旧密码",
+		inputAdminPwd: '请输入登录密码',
+		inputPwdValidate: "密码必须是由4-20位字数字组合",
+		againInputPwd: '请再次输入密码',
+		pwdDiff: '两次输入密码不一致',
+		adminOldPwd: '旧密码',
 		newAdminPwd: "登录密码",
 		confirmAdminPwd: "确认密码",
 		loginOutConfirmTitle: "退出当前用户?"
@@ -47,11 +49,11 @@ export default {
 	dialogBox: {
 		confirmWarningText: "确认是否",
 		confirmWarningTitle: "提示",
-		confirmWarningButtonText: "退 出",
-		cancelButtonText: "取 消",
-		confirmButtonText: "确 认",
-		saveButtonText: "保 存",
-		clearButtonText: "清 空",
+		confirmWarningButtonText: '退 出',
+		cancelButtonText: '取 消',
+		confirmButtonText: '确 认',
+		saveButtonText: '保 存',
+		clearButtonText: '清 除',
 		confirm: "确定",
 		addTitle: "新增",
 		shareTitle: "分配",
@@ -59,7 +61,7 @@ export default {
 		removeTitle: "移除",
 		detailTitle: "查看详情",
 		confirmDeleteText: "确定删除吗?",
-		searchButtonText: "搜 索"
+		searchButtonText: '搜索'
 	},
 	response: {
 		operateSuccess: "操作成功",
@@ -68,11 +70,11 @@ export default {
 		operateEditButton: "编辑",
 		operateDeleteButton: "删除",
 		deleteSuccess: "删除成功",
-		keywordLabel: "关键字",
+		keywordLabel: '关键字',
 		description: "描述"
 	},
 	user: {
-		dynamic: '近期动',
+		dynamic: '近期动',
 		info: '个人信息',
 		settings: '设置',
 		nightmode: "黑夜模式",
@@ -81,12 +83,31 @@ export default {
 		language_msg: '翻译进行中,暂翻译了本视图的文本',
 		personSetting: '个人设置',
 		modifyPwd: '修改密码',
-		loginOut: '退出登',
-		userName: "用户名",
+		loginOut: '退出登',
+		userName: '用户名',
 		fullName: "用户姓名",
 		phone: "手机号",
 		email: "邮箱",
 		hospitalName: "所在医院",
+		userStatus: "用户状态",
+		authenticationState: "认证状",
+		userStatusPlaceholder: "请选择用户状",
+		nonactivated: "未激",
+		activated: "已激",
+		uncertified: "未认",
+		waitcertified: "待审",
+		rejected: "已拒",
+		certified: "已认",
+		registerTime: "注册时间",
+		certificationAudit: "认证审核",
+		rejectReason: "拒绝原因",
+		inputRejectReason: "请输入拒绝原因",
+		rejectReasonRequired: "拒绝原因必填",
+		auditText: "是否审核通过",
+		doctorLicense: "医师执照",
+		cardFront: "身份证正面",
+		cardreverse: "身份证反面",
+		applyRoleName: "申请角色",
 		assignUser: "分配负责人",
 		authorityName: "权限名称",
 		uniqueCode: "权限唯一码",

+ 12 - 12
VinnoManagementSystem/src/views/deviceManage/deviceList.vue

@@ -14,18 +14,18 @@
 		<el-main class="nopadding">
 			<scTable ref="table" :apiObj="apiObj" @selection-change="selectionChange" stripe border>
                 <el-table-column type="selection" width="50"></el-table-column>
-				<el-table-column label="#" type="index" width="40"></el-table-column>
-				<el-table-column :label="$t('device.deviceID')" prop="DeviceCode" width="150"></el-table-column>
-				<el-table-column :label="$t('device.deviceName')" prop="Name" width="120"></el-table-column>
-				<el-table-column :label="$t('device.deviceTypeName')" prop="DeviceTypeName" width="100"></el-table-column>
-                <el-table-column :label="$t('device.deviceModelName')" prop="DeviceModelName" width="120"></el-table-column>
-                <el-table-column :label="$t('response.description')" prop="Description" width="150"></el-table-column>
-                <el-table-column :label="$t('device.deviceCode')" prop="ShortCode" width="120"></el-table-column>
-                <el-table-column :label="$t('device.searchHosptial')" prop="HospitalName" width="150"></el-table-column>
-                <el-table-column :label="$t('device.departmentColumnTitle')" prop="DepartmentName" width="150"></el-table-column>
-                <el-table-column :label="$t('device.deviceBelongUser')" prop="DirectorName" width="130"></el-table-column>
-                <el-table-column :label="$t('device.searchAdmin')" prop="AdminName" width="130"></el-table-column>
-                <el-table-column :label="$t('device.shareUserCount')" prop="ShareUserNum" width="110"></el-table-column>
+				<el-table-column label="#" type="index" width="40" align="center" ></el-table-column>
+				<el-table-column :label="$t('device.deviceID')" prop="DeviceCode" width="150" align="center" ></el-table-column>
+				<el-table-column :label="$t('device.deviceName')" prop="Name" width="120" align="center" ></el-table-column>
+				<el-table-column :label="$t('device.deviceTypeName')" prop="DeviceTypeName" width="100" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.deviceModelName')" prop="DeviceModelName" width="120" align="center" ></el-table-column>
+                <el-table-column :label="$t('response.description')" prop="Description" width="150" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.deviceCode')" prop="ShortCode" width="120" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.searchHosptial')" prop="HospitalName" width="150" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.departmentColumnTitle')" prop="DepartmentName" width="150" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.deviceBelongUser')" prop="DirectorName" width="130" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.searchAdmin')" prop="AdminName" width="130" align="center" ></el-table-column>
+                <el-table-column :label="$t('device.shareUserCount')" prop="ShareUserNum" width="110" align="center" ></el-table-column>
 				<el-table-column :label="$t('response.operateColumnTitle')" fixed="right" align="center" width="150">
 					<template #default="scope">
 						<el-icon :size="30" :title="$t('edit')" color="#409EFC" class="tableOperateIcon" @click="table_edit(scope.row, scope.$index)"><sc-icon-operate-edit /></el-icon>

+ 3 - 3
VinnoManagementSystem/src/views/deviceManage/deviceTypeList.vue

@@ -20,9 +20,9 @@
 		</el-header>
 		<el-main class="nopadding">
 			<scTable ref="table" :apiObj="apiObj" stripe>
-				<el-table-column label="#" type="index" width="50"></el-table-column>
-				<el-table-column :label="$t('device.deviceTypeCode')" prop="DictionaryCode" width="250"></el-table-column>
-				<el-table-column :label="$t('device.deviceTypeName')" prop="Value" width="250"></el-table-column>
+				<el-table-column label="#" type="index" width="50" align="center" ></el-table-column>
+				<el-table-column :label="$t('device.deviceTypeCode')" prop="DictionaryCode" width="250" align="center" ></el-table-column>
+				<el-table-column :label="$t('device.deviceTypeName')" prop="Value" width="250" align="center" ></el-table-column>
 				<el-table-column :label="$t('device.deviceModel')" align="center">
 					<template #default="scope">
 					<span>{{ dictionaryList_string(scope.row.DictionaryList) }}</span>

+ 99 - 0
VinnoManagementSystem/src/views/userManage/modifyUserPwd.vue

@@ -0,0 +1,99 @@
+<template>
+	<el-dialog :title="titleMap" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')">
+		<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="left">
+			<el-input type="hidden" v-model="form.code"></el-input>
+            <el-form-item :label="$t('login.adminOldPwd')" prop="oldPassword">
+                <el-input type="password" v-model="form.oldPassword" clearable show-password></el-input>
+            </el-form-item>
+			<el-form-item :label="$t('login.newAdminPwd')" prop="password">
+                <el-input type="password" v-model="form.password" clearable show-password></el-input>
+            </el-form-item>
+            <el-form-item :label="$t('login.confirmAdminPwd')" prop="password2">
+                <el-input type="password" v-model="form.password2" clearable show-password></el-input>
+            </el-form-item>
+		</el-form>
+		<template #footer>
+			<el-button @click="visible=false" >{{$t('dialogBox.cancelButtonText')}}</el-button>
+			<el-button type="primary" :loading="isSaveing" @click="submit()">{{$t('dialogBox.saveButtonText')}}</el-button>
+		</template>
+	</el-dialog>
+</template>
+
+<script>
+	export default {
+		emits: ['success', 'closed'],
+		data() {
+			return {
+				titleMap: this.$t('login.editPassword'),
+				visible: false,
+				isSaveing: false,
+				//表单数据
+				form: {
+					code:"",
+					oldPassword: "",
+					password: "",
+				},
+				//验证规则
+				rules: {
+					code: [
+						{required: true, message: this.$t('login.inputAdminCode')}
+					],
+                    oldPassword: [
+						{required: true, message: this.$t('login.inputAdminOldPwd')},
+					],
+					password: [
+						{required: true, message: this.$t('login.inputAdminPwd')},
+						{validator: (rule, value, callback) => {
+                            let reg= /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{4,20}$/
+                            if(!reg.test(value)){
+								callback(new Error(this.$t('login.inputPwdValidate')))
+                            }
+							else{
+                                callback()
+                            }
+						}, trigger: 'blur'}
+					],
+					password2: [
+						{required: true, message: this.$t('login.againInputPwd')},
+						{validator: (rule, value, callback) => {
+							if (value !== this.form.password) {
+								callback(new Error(this.$t('login.pwdDiff')));
+							}else{
+								callback();
+							}
+						}}
+					]
+				}
+			}
+		},
+		methods: {
+			//显示
+			open(userCode = ''){
+				this.form.code = userCode;
+				this.visible = true;
+				return this
+			},
+			//表单提交方法
+			submit(){
+				this.$refs.dialogForm.validate(async (valid) => {
+					if (valid) {
+						this.isSaveing = true;
+                        var res = await this.$API.user.modifyUserPassword.post(this.form);
+						this.isSaveing = false;
+						if(res){
+							this.visible = false;
+							this.$message.success(this.$t('response.operateSuccess'))
+						}else{
+							this.$alert(res.message, this.$t('dialogBox.confirmWarningTitle'), {type: 'error'})
+						}
+					}else{
+						return false;
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+</style>

+ 0 - 0
VinnoManagementSystem/src/views/userManage/saveUser.vue


+ 223 - 0
VinnoManagementSystem/src/views/userManage/userAudit.vue

@@ -0,0 +1,223 @@
+<template>
+	<el-dialog :title="titleMap" v-model="visible" :width="700" destroy-on-close @closed="$emit('closed')">
+		<el-form :model="form" :rules="rules" :disabled="mode=='show'"  ref="dialogForm" label-width="100px" label-position="left">
+			<el-row :gutter="15">
+				<el-col :span="12">
+					<el-form-item :label="$t('user.fullName')" prop="fullName">
+						<el-input v-model="form.fullName" disabled clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item :label="$t('user.phone')" prop="phone">
+						<el-input v-model="form.phone" disabled clearable></el-input>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="15">
+				<el-col :span="12">
+					<el-form-item :label="$t('user.email')" prop="email">
+						<el-input v-model="form.email" disabled clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item :label="$t('device.searchHosptial')" prop="hospital">
+						<el-input v-model="form.hospital" disabled clearable></el-input>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="15">
+				<el-col :span="12">
+					<el-form-item :label="$t('device.departmentColumnTitle')" prop="department">
+						<el-input v-model="form.department" disabled clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item :label="$t('user.applyRoleName')" prop="applyRoleName">
+						<el-input v-model="form.applyRoleName" disabled clearable></el-input>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="15">
+				<el-col :span="12">
+					<el-form-item :label="$t('user.cardFront')">
+						<el-image v-show="true" :src="imgurl" style="width:100%;height:135px"></el-image>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item :label="$t('user.cardreverse')">
+						<el-image v-show="true" :src="imgurl" style="width:100%;height:135px"></el-image>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="15">
+				<el-col :span="24">
+					<el-form-item :label="$t('user.doctorLicense')">
+						<el-image v-show="true" :src="imgurl" style="width:40%;height:135px"></el-image>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="15">
+				<el-col :span="24">
+					<el-form-item :label="$t('user.auditText')">
+						<el-radio-group v-model="form.applyRoleName">
+							<el-radio v-for="_item in radioList" :key="_item.value" :label="_item.value">{{_item.label}}</el-radio>
+						</el-radio-group>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="15">
+				<el-col :span="24">
+					<el-form-item :label="$t('user.rejectReason')">
+						<el-input type="textarea" v-model="form.rejectReason" :laceholder="$t('user.inputRejectReason')" clearable></el-input>
+					</el-form-item>
+				</el-col>
+			</el-row>
+		</el-form>
+		<template #footer>
+			<el-button @click="visible=false" >{{$t('dialogBox.cancelButtonText')}}</el-button>
+			<el-button type="primary" :loading="isSaveing" @click="submit()">{{$t('dialogBox.saveButtonText')}}</el-button>
+		</template>
+	</el-dialog>
+</template>
+
+<script>
+	export default {
+		emits: ['success', 'closed'],
+		data() {
+			return {
+				titleMap: this.$t('user.certificationAudit'),
+				visible: false,
+				isSaveing: false,
+				imgurl:"http://192.168.6.80:2800/img/avatar.jpg",
+				//表单数据
+				form: {
+					fullName: '',
+					phone: '',
+					email: '',
+					hospital: '',
+					department: '',
+					applyRoleName: '',
+					radio: '',
+					rejectReason: '',
+					identityApplyCode: ''
+				},
+				//审核列表
+				radioList:[
+					{ label: this.$t('yes'), value: 1 },
+					{ label: this.$t('no'), value: 2 }
+				],
+				//验证规则
+				rules: {
+					code: [
+						{required: true, message: this.$t('login.inputAdminCode')}
+					],
+                    oldPassword: [
+						{required: true, message: this.$t('login.inputAdminOldPwd')},
+					],
+					password: [
+						{required: true, message: this.$t('login.inputAdminPwd')},
+						{validator: (rule, value, callback) => {
+                            let reg= /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{4,20}$/
+                            if(!reg.test(value)){
+								callback(new Error(this.$t('login.inputPwdValidate')))
+                            }
+							else{
+                                callback()
+                            }
+						}, trigger: 'blur'}
+					],
+					password2: [
+						{required: true, message: this.$t('login.againInputPwd')},
+						{validator: (rule, value, callback) => {
+							if (value !== this.form.password) {
+								callback(new Error(this.$t('login.pwdDiff')));
+							}else{
+								callback();
+							}
+						}}
+					]
+				}
+			}
+		},
+		methods: {
+			//显示
+			open(userCode = ''){
+				this.queryUserInfo(userCode);
+				this.visible = true;
+				return this
+			},
+			//用户详情信息
+			async queryUserInfo(code){
+				this.isSaveing = true;
+				var res = await this.$API.user.userDetailInfo.post(code);
+				this.isSaveing = false;
+				if (res){
+					this.form.fullName = res.FullName;
+					this.form.phone = res.Phone
+					this.form.email = res.Email
+					this.form.hospital = res.HospitalName
+					this.form.department = res.DepartmentName
+					this.form.applyRoleName = res.IdentityApplyRoleName
+					this.form.identityApplyCode = res.IdentityApplyCode
+					if (res.IdentityCard != null && res.IdentityCard.length > 0) {
+						this.idUrl1 = res.IdentityCard[0]
+						this.idUrl1List.push(res.IdentityCard[0])
+						if (res.IdentityCard.length > 1) {
+						this.idUrl2 = res.IdentityCard[1]
+						this.idUrl2List.push(res.IdentityCard[1])
+						}
+					}
+					if (res.LicenseCard != null && res.LicenseCard.length > 0) {
+						this.licenseUrl = res.LicenseCard[0]
+						this.licenseUrlList.push(res.LicenseCard[0])
+					}
+				}
+			},
+			//表单提交方法
+			submit(){
+				this.$refs.dialogForm.validate(async (valid) => {
+					if (valid) {
+						this.isSaveing = true;
+                        var res = await this.$API.user.modifyUserPassword.post(this.form);
+						this.isSaveing = false;
+						if(res){
+							this.visible = false;
+							this.$message.success(this.$t('response.operateSuccess'))
+						}else{
+							this.$alert(res.message, this.$t('dialogBox.confirmWarningTitle'), {type: 'error'})
+						}
+					}else{
+						return false;
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+.el-dialog__header {
+    padding: var(--el-dialog-padding-primary);
+    padding-bottom: 10px;
+	border-bottom: 2px solid rgba(0,0,0,.06);
+ }
+.el-dialog__body {
+    padding: calc(var(--el-dialog-padding-primary) + 10px) var(--el-dialog-padding-primary);
+    color: var(--el-text-color-regular);
+    font-size: var(--el-dialog-content-font-size);
+    word-break: break-all;
+    padding-top: 10px;
+    padding-bottom: 10px;
+}
+.el-dialog__footer {
+    padding: var(--el-dialog-padding-primary);
+    padding-top: 10px;
+    text-align: right;
+    box-sizing: border-box;
+    border-top: 2px solid rgba(0,0,0,.06);
+}
+.el-form-item__label {
+    font-weight: bold;
+    line-height: 32px;
+}
+</style>

+ 174 - 0
VinnoManagementSystem/src/views/userManage/userList.vue

@@ -0,0 +1,174 @@
+<template>
+	<el-container>
+		<el-header>
+			<div class="left-panel">
+				<!-- <el-button type="primary" icon="el-icon-plus" @click="add"></el-button> -->
+			</div>
+			<div class="right-panel">
+				<div class="right-panel-search">
+                    <el-input v-model="search.keyword" clearable :placeholder="$t('response.searchPlaceholder')">
+                        <template #prepend>
+                            <el-select v-model="search.queryType" style="width: 100px;">
+                                <el-option :label="$t('user.userName')" value="0"></el-option>
+                                <el-option :label="$t('user.phone')" value="3"></el-option>
+                                <el-option :label="$t('user.email')" value="4"></el-option>
+                                <el-option :label="$t('user.fullName')" value="5"></el-option>
+                            </el-select>
+                        </template>
+                    </el-input>
+                    <el-select v-model="search.queryState" :placeholder="$t('user.userStatusPlaceholder')" clearable style="width:250px;">
+                        <el-option :label="$t('user.nonactivated')" value="Nonactivated"></el-option>
+                        <el-option :label="$t('user.activated')" value="Activated"></el-option>
+                    </el-select>
+					<el-button type="primary" icon="el-icon-search" @click="getList "></el-button>
+				</div>
+			</div>
+		</el-header>
+		<el-main class="nopadding">
+			<scTable ref="table" :apiObj="apiObj" stripe border>
+				<el-table-column label="#" type="index" width="50" align="center"></el-table-column>
+				<el-table-column :label="$t('user.userName')" prop="UserName" width="250" align="center" ></el-table-column>
+				<el-table-column :label="$t('user.fullName')" prop="FullName" width="180" align="center" ></el-table-column>
+				<el-table-column :label="$t('user.phone')" prop="Phone" width="150" align="center" ></el-table-column>
+                <el-table-column :label="$t('user.email')" prop="Email" width="220" align="center" ></el-table-column>
+                <el-table-column :label="$t('user.userStatus')" align="center" width="120" >
+					<template #default="scope">
+					    <span>{{ scope.row.UserState === 0 ? $t('user.nonactivated') : $t('user.activated') }}</span>
+					</template>
+				</el-table-column>
+                <el-table-column :label="$t('user.authenticationState')" align="center" width="120">
+					<template #default="scope">
+					    <span>{{ applyState_string(scope.row.ApplyState) }}</span>
+					</template>
+				</el-table-column>
+                <el-table-column :label="$t('menu.roleList')" prop="RoleName" width="120" align="center" ></el-table-column>
+                <el-table-column :label="$t('user.registerTime')" align="center">
+					<template #default="scope">
+					    <span>{{ this.$TOOL.dateFormat(new Date(scope.row.CreateTime), 'yyyy-MM-dd hh:mm:ss') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column :label="$t('response.operateColumnTitle')" fixed="right" align="center" width="140">
+					<template #default="scope">
+                        <el-icon :size="30" :title="$t('edit')" color="#409EFC" class="tableOperateIcon" @click="table_edit(scope.row, scope.$index)"><sc-icon-operate-edit /></el-icon>
+                        <el-icon :size="30" :style="visableTransfer(1, scope.row)" :title="$t('audit')" color="#409EFC" class="tableOperateIcon" @click="table_audit(scope.row, scope.$index)"><sc-icon-audit /></el-icon>
+                        <el-icon :size="30" :style="visableTransfer(0, scope.row)" :title="$t('user.modifyPwd')" color="#409EFC" class="tableOperateIcon" @click="modifyPwd(scope.row, scope.$index)"><sc-icon-password /></el-icon>
+						<!-- <el-button type="text" size="small" @click="table_edit(scope.row, scope.$index)">{{$t('response.operateEditButton')}}</el-button> -->
+					</template>
+				</el-table-column>
+
+			</scTable>
+		</el-main>
+	</el-container>
+
+	<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
+    <modifyPwd-dialog v-if="dialog.modifyPwd" ref="modifyPwdDialog" @success="handleModifyPwdSuccess" @closed="dialog.modifyPwd=false"></modifyPwd-dialog>
+	<audit-dialog v-if="dialog.audit" ref="auditDialog" @success="handleSaveSuccess" @closed="dialog.audit=false"></audit-dialog>
+</template>
+
+<script>
+	import saveDialog from './saveUser'
+    import modifyPwdDialog from './modifyUserPwd'
+    import auditDialog from './userAudit'
+
+	export default {
+		name: 'userList',
+		components: {
+			saveDialog,
+            modifyPwdDialog,
+			auditDialog
+		},
+		data() {
+			return {
+				dialog: {
+					save: false,
+                    modifyPwd: false,
+					audit: false,
+				},
+                listLoading: true,
+				apiObj: this.$API.user.fetchUserList,
+				search: {
+                    queryType: '',
+                    keyword: '',
+                    queryState: '',
+				},
+			}
+		},
+		methods: {
+			//修改密码
+			modifyPwd(row){
+				this.dialog.modifyPwd = true
+				this.$nextTick(() => {
+					this.$refs.modifyPwdDialog.open(row.UserCode);
+				})
+			},
+			//编辑
+			table_edit(row){
+				this.dialog.save = true
+				this.$nextTick(() => {
+					this.$refs.saveDialog.open('edit').setData(row)
+				})
+			},
+			//审核页面
+			table_audit(row){
+				this.dialog.audit = true
+				this.$nextTick(() => {
+					this.$refs.auditDialog.open(row.UserCode)
+				})
+			},
+			//搜索
+			async getList(){
+                this.$refs.table.upData(this.search)
+			},
+			dictionaryList_string(dictionaryList) {
+				var dictionaryStr = ''
+				for (var i = 0; i < dictionaryList.length; i++) {
+					dictionaryStr += dictionaryList[i].Value + '/'
+				}
+				dictionaryStr = dictionaryStr.substring(0, dictionaryStr.length - 1)
+				return dictionaryStr
+			},
+			//本地更新数据
+			handleSaveSuccess(){
+                this.$refs.table.refresh()
+			},
+            //修改密码
+            handleModifyPwdSuccess(){
+                //this.$refs.table.refresh()
+			},
+            //用户认证状态转换
+            applyState_string(str) {
+                if (str === 0) return this.$t('user.uncertified')
+                if (str === 1) return this.$t('user.waitcertified')
+                if (str === 2) return this.$t('user.rejected')
+                if (str === 3) return this.$t('user.certified')
+            },
+            //根据类型控制按钮显示隐藏
+            visableTransfer(type, row)
+            {
+                //类型0为密码
+                if (type === 0)
+                {
+                    if (row.Phone !='' || row.Email !='')
+                    {
+                        return "display: none !important;"
+                    }
+                }
+                else if (type === 1)
+                {
+                    if (row.ApplyState != 1)
+                    {
+                        return "display: none !important;"
+                    }
+                }
+                return ""
+            }
+		}
+	}
+</script>
+
+<style>
+.tableOperateIcon{
+	cursor:pointer;
+	margin-left:5px;
+}
+</style>