From f232edec5b983e7662dc58554eb0df0bc8439642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=97=E6=B5=94?= <2919054393@qq.com> Date: Wed, 23 Jul 2025 15:27:47 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=88=E7=94=A8=E6=88=B7=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=89=EF=BC=9A=E5=AE=8C=E5=96=84=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD=E5=92=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Confirm.vue | 79 ++++++++++++++++++++++ src/components/DataTable.vue | 55 +++++++++++++-- src/components/UserFormModal.vue | 111 +++++++++++++++++++++++++++++++ src/directives/money.js | 28 ++++++++ src/main.js | 5 ++ src/plugins/confirm.js | 28 ++++++++ src/request/api.js | 13 +++- src/views/layout/Users.vue | 95 ++++++++++++++++++-------- 8 files changed, 381 insertions(+), 33 deletions(-) create mode 100644 src/components/Confirm.vue create mode 100644 src/components/UserFormModal.vue create mode 100644 src/directives/money.js create mode 100644 src/plugins/confirm.js diff --git a/src/components/Confirm.vue b/src/components/Confirm.vue new file mode 100644 index 0000000..9bbeeb5 --- /dev/null +++ b/src/components/Confirm.vue @@ -0,0 +1,79 @@ + + + + + + \ No newline at end of file diff --git a/src/components/DataTable.vue b/src/components/DataTable.vue index f4c2985..c71c594 100644 --- a/src/components/DataTable.vue +++ b/src/components/DataTable.vue @@ -8,17 +8,17 @@
-
+ 条数据
-
@@ -37,7 +37,28 @@ - {{ item[header.value] }} +
+ {{ item[header.value] }} +
+
+ {{ item[header.value] ? '禁用' : '正常'}} +
+
+ + {{ objItem[header.child] }} + +
+
+ {{ item[header.value].toFixed(2) }} +
+
+ {{ formatDateTime(item[header.value]) }} +
+ + + + + @@ -51,8 +72,7 @@
-
Showing 1 to 10 of 57 - entries
+
正在展示 {{ (currentPageIndex * pageSize) - (pageSize - 1) }} 到 {{ currentPageIndex * pageSize }} 条数据 总计 {{dataCount}} 条
@@ -163,6 +183,29 @@ export default { } //渲染尾页 this.pageBtn.push({text: `${this.pageCount}`, index: this.pageCount}) + }, + formatDateTime(str){ + if (!str) return '-'; + + const date = new Date(str); + if (isNaN(date)) return '-'; // 防止 Safari 报 Invalid Date + + const pad = n => n.toString().padStart(2, '0'); + + const Y = date.getFullYear(); + const M = pad(date.getMonth() + 1); + const D = pad(date.getDate()); + const h = pad(date.getHours()); + const m = pad(date.getMinutes()); + const s = pad(date.getSeconds()); + + return `${Y}-${M}-${D} ${h}:${m}:${s}`; + }, + modify(id){ + this.$emit('dataModify',id) + }, + deleteData(id){ + this.$emit('dataDelete',id) } }, watch: { diff --git a/src/components/UserFormModal.vue b/src/components/UserFormModal.vue new file mode 100644 index 0000000..eaef9c8 --- /dev/null +++ b/src/components/UserFormModal.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/src/directives/money.js b/src/directives/money.js new file mode 100644 index 0000000..c7dc9ff --- /dev/null +++ b/src/directives/money.js @@ -0,0 +1,28 @@ +export default { + bind(el) { + const handler = function (e) { + let val = e.target.value; + + // 只允许输入数字和一个小数点 + val = val + .replace(/[^\d.]/g, '') // 移除非数字和点 + .replace(/^\./g, '') // 不能以点开头 + .replace(/\.{2,}/g, '.') // 多个点只留一个 + .replace('.', '#') // 临时标记第一个点 + .replace(/\./g, '') // 移除其他点 + .replace('#', '.') // 还原第一个点 + .replace(/^0+(\d)/, '$1') // 去掉前导 0 + .replace(/^(\d+\.\d{0,2}).*/, '$1') // 最多两位小数 + + e.target.value = val + el.dispatchEvent(new Event('input')) // 手动触发 v-model 更新 + } + + el.__moneyInputHandler__ = handler + el.addEventListener('input', handler) + }, + unbind(el) { + el.removeEventListener('input', el.__moneyInputHandler__) + delete el.__moneyInputHandler__ + } +} diff --git a/src/main.js b/src/main.js index 3198bef..3f76338 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,8 @@ import router from './router' import store from './store' import api from './request/api' import Alert from '@/plugins/alert' +import Confirm from '@/plugins/confirm' +import MoneyDirective from '@/directives/money' import 'jquery' import 'bootstrap/dist/js/bootstrap.bundle.min.js' import 'bootstrap/dist/css/bootstrap.min.css' @@ -18,6 +20,9 @@ Vue.config.productionTip = false //挂载后端请求函数到全局 Vue.prototype.$api = api Vue.use(Alert) +Vue.use(Confirm) + +Vue.directive('money',MoneyDirective) /** * 初始化系统 diff --git a/src/plugins/confirm.js b/src/plugins/confirm.js new file mode 100644 index 0000000..ba98112 --- /dev/null +++ b/src/plugins/confirm.js @@ -0,0 +1,28 @@ +import Confirm from "@/components/Confirm.vue" +import Vue from "vue" + +const ConfirmConstructor = Vue.extend(Confirm) + +function showConfirm(title,message,btnTxt){ + const instance = new ConfirmConstructor({ + propsData:{title,message,btnTxt} + }) + + const vm = instance.$mount() + document.body.appendChild(vm.$el) + return instance.open().then(result => { + cleanup() + return result + }) + + function cleanup() { + document.body.removeChild(vm.$el) + instance.$destroy() + } +} + +export default { + install(){ + Vue.prototype.$confirm = showConfirm + } +} \ No newline at end of file diff --git a/src/request/api.js b/src/request/api.js index 2b61f9d..8cd9c44 100644 --- a/src/request/api.js +++ b/src/request/api.js @@ -20,6 +20,14 @@ const getUserList = async (pageIndex,pageSize,desc) => await request.get(`/api/A //获取用户数量 const getUserCount = async () => await request.get('/api/Admin/UserCount') +//删除用户 +const deleteUser = async (id) => await request.delete(`/api/Admin/DeleteUser?userId=${id}`) + +//获取指定用户信息 +const getUserInfoById = async (id) => await request.get(`/api/Admin/UserInfo?userId=${id}`) + +//更新用户信息 +const updateUserInfo = async (id,param) => await request.post(`/api/Admin/UpdateUser?userId=${id}`,param) export default { login, register, @@ -27,5 +35,8 @@ export default { getAllConfig, getUserInfo, getUserList, - getUserCount + getUserCount, + deleteUser, + getUserInfoById, + updateUserInfo } \ No newline at end of file diff --git a/src/views/layout/Users.vue b/src/views/layout/Users.vue index 440b289..e047220 100644 --- a/src/views/layout/Users.vue +++ b/src/views/layout/Users.vue @@ -1,53 +1,96 @@