diff --git a/src/components/baseSelection/index.vue b/src/components/baseSelection/index.vue index 0f9effd..22bca04 100644 --- a/src/components/baseSelection/index.vue +++ b/src/components/baseSelection/index.vue @@ -1,11 +1,56 @@ \ No newline at end of file diff --git a/src/main.js b/src/main.js index 860014f..e500236 100644 --- a/src/main.js +++ b/src/main.js @@ -39,6 +39,7 @@ import Editor from "@/components/Editor" // drawer弹窗组件 import LeftDrawer from "@/components/LeftDrawer" import titleDivider from "@/components/titleDivider" +import baseSelection from "@/components/baseSelection" // 文件上传组件 import FileUpload from "@/components/FileUpload" // 图片上传组件 @@ -86,6 +87,7 @@ app.component('RightToolbar', RightToolbar) app.component('Editor', Editor) app.component('LeftDrawer', LeftDrawer) app.component('titleDivider', titleDivider) +app.component('baseSelection', baseSelection) app.use(VueAMap) app.use(router) app.use(store) diff --git a/src/views/index.vue b/src/views/index.vue index 541c85f..48c14ef 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -548,6 +548,7 @@ function goTarget(url) { height: 250px; } .home { + padding-top: 0; blockquote { padding: 10px 20px; margin: 0 0 20px; diff --git a/src/views/system/base/baseTable.vue b/src/views/system/base/baseTable.vue index 87ae2b0..5fc41b1 100644 --- a/src/views/system/base/baseTable.vue +++ b/src/views/system/base/baseTable.vue @@ -1,13 +1,582 @@ - + + + 新增 + + + 修改 + + + 删除 + + + 导入 + + + 导出 + + + - - \ No newline at end of file +const router = useRouter(); +const { proxy } = getCurrentInstance(); +const { sys_normal_disable, sys_user_sex } = proxy.useDict("sys_normal_disable", "sys_user_sex"); + +const userList = ref([]); +const open = ref(false); +const loading = ref(false); +const showSearch = ref(true); +const ids = ref([]); +const single = ref(true); +const multiple = ref(true); +const total = ref(0); +const title = ref(""); +const dateRange = ref([]); +const deptName = ref(""); +const deptOptions = ref(undefined); +const initPassword = ref(undefined); +const postOptions = ref([]); +const roleOptions = ref([]); +/*** 用户导入参数 */ +const upload = reactive({ + // 是否显示弹出层(用户导入) + open: false, + // 弹出层标题(用户导入) + title: "", + // 是否禁用上传 + isUploading: false, + // 是否更新已经存在的用户数据 + updateSupport: 0, + // 设置上传的请求头部 + headers: { Authorization: "Bearer " + getToken() }, + // 上传的地址 + url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData" +}); +// 列显隐信息 +const columns = ref([ + { key: 0, label: `用户编号`, visible: true }, + { key: 1, label: `用户名称`, visible: true }, + { key: 2, label: `用户昵称`, visible: true }, + { key: 3, label: `部门`, visible: true }, + { key: 4, label: `手机号码`, visible: true }, + { key: 5, label: `状态`, visible: true }, + { key: 6, label: `创建时间`, visible: true } +]); + +const data = reactive({ + form: {}, + queryParams: { + pageNum: 1, + pageSize: 10, + userName: undefined, + phonenumber: undefined, + status: undefined, + deptId: undefined + }, + rules: { + userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }], + nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }], + password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }], + email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], + phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }] + } +}); + +const { queryParams, form, rules } = toRefs(data); + +/** 通过条件过滤节点 */ +const filterNode = (value, data) => { + if (!value) return true; + return data.label.indexOf(value) !== -1; +}; +/** 根据名称筛选部门树 */ +watch(deptName, val => { + proxy.$refs["deptTreeRef"].filter(val); +}); +/** 查询用户列表 */ +function getList() { + loading.value = true; + listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => { + loading.value = false; + userList.value = res.rows; + total.value = res.total; + }); +}; +/** 节点单击事件 */ +function handleNodeClick(data) { + queryParams.value.deptId = data.id; + handleQuery(); +}; +/** 搜索按钮操作 */ +function handleQuery() { + queryParams.value.pageNum = 1; + getList(); +}; +/** 重置按钮操作 */ +function resetQuery() { + dateRange.value = []; + proxy.resetForm("queryRef"); + queryParams.value.deptId = undefined; + proxy.$refs.deptTreeRef.setCurrentKey(null); + handleQuery(); +}; +/** 删除按钮操作 */ +function handleDelete(row) { + const userIds = row.userId || ids.value; + proxy.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () { + return delUser(userIds); + }).then(() => { + getList(); + proxy.$modal.msgSuccess("删除成功"); + }).catch(() => {}); +}; +/** 导出按钮操作 */ +function handleExport() { + proxy.download("system/user/export", { + ...queryParams.value, + },`user_${new Date().getTime()}.xlsx`); +}; +/** 用户状态修改 */ +function handleStatusChange(row) { + let text = row.status === "0" ? "启用" : "停用"; + proxy.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () { + return changeUserStatus(row.userId, row.status); + }).then(() => { + proxy.$modal.msgSuccess(text + "成功"); + }).catch(function () { + row.status = row.status === "0" ? "1" : "0"; + }); +}; +/** 更多操作 */ +function handleCommand(command, row) { + switch (command) { + case "handleResetPwd": + handleResetPwd(row); + break; + case "handleAuthRole": + handleAuthRole(row); + break; + default: + break; + } +}; +/** 跳转角色分配 */ +function handleAuthRole(row) { + const userId = row.userId; + router.push("/system/user-auth/role/" + userId); +}; +/** 重置密码按钮操作 */ +function handleResetPwd(row) { + proxy.$prompt('请输入"' + row.userName + '"的新密码', "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + closeOnClickModal: false, + inputPattern: /^.{5,20}$/, + inputErrorMessage: "用户密码长度必须介于 5 和 20 之间", + inputValidator: (value) => { + if (/<|>|"|'|\||\\/.test(value)) { + return "不能包含非法字符:< > \" ' \\\ |" + } + }, + }).then(({ value }) => { + resetUserPwd(row.userId, value).then(response => { + proxy.$modal.msgSuccess("修改成功,新密码是:" + value); + }); + }).catch(() => {}); +}; +/** 选择条数 */ +function handleSelectionChange(selection) { + ids.value = selection.map(item => item.userId); + single.value = selection.length != 1; + multiple.value = !selection.length; +}; +/** 导入按钮操作 */ +function handleImport() { + upload.title = "用户导入"; + upload.open = true; +}; +/** 下载模板操作 */ +function importTemplate() { + proxy.download("system/user/importTemplate", { + }, `user_template_${new Date().getTime()}.xlsx`); +}; +/**文件上传中处理 */ +const handleFileUploadProgress = (event, file, fileList) => { + upload.isUploading = true; +}; +/** 文件上传成功处理 */ +const handleFileSuccess = (response, file, fileList) => { + upload.open = false; + upload.isUploading = false; + proxy.$refs["uploadRef"].handleRemove(file); + proxy.$alert("
" + response.msg + "
", "导入结果", { dangerouslyUseHTMLString: true }); + getList(); +}; +/** 提交上传文件 */ +function submitFileForm() { + proxy.$refs["uploadRef"].submit(); +}; +/** 重置操作表单 */ +function reset() { + form.value = { + userId: undefined, + deptId: undefined, + userName: undefined, + nickName: undefined, + password: undefined, + phonenumber: undefined, + email: undefined, + sex: undefined, + status: "0", + remark: undefined, + postIds: [], + roleIds: [] + }; + proxy.resetForm("userRef"); +}; +/** 取消按钮 */ +function cancel() { + open.value = false; + reset(); +}; +/** 新增按钮操作 */ +function handleAdd() { + reset(); + getUser().then(response => { + postOptions.value = response.posts; + roleOptions.value = response.roles; + open.value = true; + title.value = "添加用户"; + form.value.password = initPassword.value; + }); +}; +/** 修改按钮操作 */ +function handleUpdate(row) { + reset(); + const userId = row.userId || ids.value; + getUser(userId).then(response => { + form.value = response.data; + postOptions.value = response.posts; + roleOptions.value = response.roles; + form.value.postIds = response.postIds; + form.value.roleIds = response.roleIds; + open.value = true; + title.value = "修改用户"; + form.password = ""; + }); +}; +/** 提交按钮 */ +function submitForm() { + proxy.$refs["userRef"].validate(valid => { + if (valid) { + if (form.value.userId != undefined) { + updateUser(form.value).then(response => { + proxy.$modal.msgSuccess("修改成功"); + open.value = false; + getList(); + }); + } else { + addUser(form.value).then(response => { + proxy.$modal.msgSuccess("新增成功"); + open.value = false; + getList(); + }); + } + } + }); +}; + diff --git a/src/views/system/base/massifForm.vue b/src/views/system/base/massifForm.vue index ece8072..b5a1dfa 100644 --- a/src/views/system/base/massifForm.vue +++ b/src/views/system/base/massifForm.vue @@ -201,7 +201,7 @@ defineExpose({ 文件上传 - + 添加坐标点 diff --git a/src/views/system/base/massifMap.vue b/src/views/system/base/massifMap.vue index 3b29248..6185d98 100644 --- a/src/views/system/base/massifMap.vue +++ b/src/views/system/base/massifMap.vue @@ -453,7 +453,15 @@ const submitMassif = () => { return } } - polygonList.push({path: polygonTemp.value, edit: false}) + massifFormRef.value.toAdd({ + coordinateList:polygonTemp.value.map(item => { + return { + longitude: item[0], + latitude: item[1] + } + }) + }) + // polygonList.push({path: polygonTemp.value, edit: false}) polygonTemp.value = undefined createdMouse.value = false protract.value = false @@ -634,12 +642,11 @@ const toViewMassif = (row) => { + :label="{content:`${control.plantLabel?plant.title:''}`,offset:[0,0]}">