最新2025-06-25

This commit is contained in:
lcc
2025-06-25 23:49:46 +08:00
parent 67f4a52f4a
commit 690cc945a7
7 changed files with 144 additions and 223 deletions
+2 -2
View File
@@ -19,7 +19,7 @@ export async function pageUsers(params) {
* @param data 用户信息
*/
export async function addUser(data) {
const res = await request.post('/organization/user/user', data);
const res = await request.post('/organization/user', data);
if (res.data.code === 0) {
return res.data.message;
}
@@ -31,7 +31,7 @@ export async function addUser(data) {
* @param data 用户信息
*/
export async function updateUser(data) {
const res = await request.put('/organization/user/user', data);
const res = await request.put('/organization/user', data);
if (res.data.code === 0) {
return res.data.message;
}
@@ -10,40 +10,22 @@
@update:visible="updateVisible"
>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="一级佣金:" prop="brokerage1">
<el-form-item label="线索总佣金:" prop="brokerage1">
<el-input
clearable
type="number"
v-model="form.brokerage1"
placeholder="请输入一级佣金"
v-model="form.cluesCommission"
placeholder="请输入线索总佣金"
/>
</el-form-item>
<el-form-item label="二级佣金:" prop="brokerage2">
<el-form-item label="订单总佣金:" prop="brokerage2">
<el-input
clearable
type="number"
v-model="form.brokerage2"
placeholder="请输入二级佣金"
v-model="form.orderCommission"
placeholder="请输入订单总佣金"
/>
</el-form-item>
<div style="display: none">
<el-form-item label="三级级佣金:" prop="">
<el-input
clearable
type="number"
v-model="form.brokerage3"
placeholder="请输入三级级佣金"
/>
</el-form-item>
<el-form-item label="四级佣金:" prop="">
<el-input
clearable
type="number"
v-model="form.brokerage4"
placeholder="请输入四级佣金"
/>
</el-form-item>
</div>
</el-form>
<template v-slot:footer>
<el-button @click="updateVisible(false)">取消</el-button>
@@ -67,10 +49,8 @@
data() {
const defaultForm = {
id: null,
brokerage1: '',
brokerage2: '',
brokerage3: '',
brokerage4: ''
cluesCommission: '',
orderCommission: ''
};
return {
editVersion: false,
@@ -79,17 +59,17 @@
form: { ...defaultForm },
// 表单验证规则
rules: {
brokerage1: [
cluesCommission: [
{
required: true,
message: '请输入一级佣金',
message: '请输入线索总佣金',
trigger: 'blur'
}
],
brokerage2: [
orderCommission: [
{
required: true,
message: '请输入二级佣金',
message: '请输入订单总佣金',
trigger: 'blur'
}
]
@@ -31,6 +31,9 @@
:multiple="true"
/>
</el-form-item>
<el-form-item label="来源:" prop="cfId" v-if="form.level < 2">
<el-input clearable v-model="form.cfId" />
</el-form-item>
<el-form-item label="备注:" prop="meta">
<el-input
:rows="4"
@@ -75,7 +78,9 @@
parentId: '',
title: '',
logo: [],
remark: ''
remark: '',
cfId: '',
level: 0
};
return {
defaultForm,
@@ -10,86 +10,32 @@
@update:visible="updateVisible"
>
<el-form ref="form" :model="form" :rules="rules" label-width="82px">
<el-row :gutter="15">
<el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
<el-form-item label="用户账号:" prop="username">
<el-input
clearable
:maxlength="20"
:disabled="isUpdate"
v-model="form.username"
placeholder="请输入用户账号"
/>
</el-form-item>
<el-form-item label="用户名:" prop="nickname">
<el-input
clearable
:maxlength="20"
v-model="form.nickname"
placeholder="请输入用户名"
/>
</el-form-item>
<el-form-item label="性别:" prop="sex">
<el-select
clearable
class="ele-block"
v-model="form.sex"
placeholder="请选择性别"
>
<el-option label="男" value="1" />
<el-option label="女" value="2" />
</el-select>
</el-form-item>
<el-form-item label="角色:" prop="roleIds">
<role-select v-model="form.roleIds" />
</el-form-item>
<el-form-item label="邮箱:" prop="email">
<el-input
clearable
:maxlength="100"
v-model="form.email"
placeholder="请输入邮箱"
/>
</el-form-item>
</el-col>
<el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
<el-form-item label="手机号:" prop="phone">
<el-input
clearable
:maxlength="11"
v-model="form.phone"
placeholder="请输入手机号"
/>
</el-form-item>
<el-form-item label="出生日期:" prop="birthday">
<el-date-picker
type="date"
class="ele-fluid"
v-model="form.birthday"
value-format="yyyy-MM-dd"
placeholder="请选择出生日期"
/>
</el-form-item>
<el-form-item v-if="!isUpdate" label="登录密码:" prop="password">
<el-input
show-password
:maxlength="20"
v-model="form.password"
placeholder="请输入登录密码"
/>
</el-form-item>
<el-form-item label="个人简介:">
<el-input
:rows="4"
clearable
type="textarea"
:maxlength="200"
v-model="form.introduction"
placeholder="请输入个人简介"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="用户账号:" prop="username">
<el-input
clearable
:maxlength="20"
v-model="form.username"
placeholder="请输入用户账号"
/>
</el-form-item>
<el-form-item label="手机号:" prop="mobile">
<el-input
clearable
:maxlength="11"
v-model="form.mobile"
placeholder="请输入手机号"
/>
</el-form-item>
<el-form-item label="角色类型:" prop="roleIds">
<el-select v-model="form.groupType" clearable>
<el-option
v-for="(item, index) in groupList"
:value="index"
:key="index"
:label="item"
/>
</el-select>
</el-form-item>
</el-form>
<template v-slot:footer>
<el-button @click="updateVisible(false)">取消</el-button>
@@ -101,12 +47,11 @@
</template>
<script>
import { emailReg, phoneReg } from 'ele-admin';
import RoleSelect from './role-select.vue';
import { addUser, updateUser, checkExistence } from '@/api/system/user';
import { phoneReg } from 'ele-admin';
import { groupTypeUsers, updateUser } from '@/api/organization/user';
export default {
components: { RoleSelect },
components: {},
props: {
// 弹窗是否打开
visible: Boolean,
@@ -115,16 +60,10 @@
},
data() {
const defaultForm = {
userId: null,
id: null,
username: '',
nickname: '',
sex: null,
roleIds: [],
email: '',
phone: '',
birthday: '',
password: '',
introduction: ''
mobile: '',
groupType: ''
};
return {
defaultForm,
@@ -136,57 +75,10 @@
{
required: true,
trigger: 'blur',
validator: (_rule, value, callback) => {
if (!value) {
return callback(new Error('请输入用户账号'));
}
checkExistence('username', value, this.data?.username)
.then(() => {
callback(new Error('账号已经存在'));
})
.catch(() => {
callback();
});
}
message: '请输入用户名'
}
],
nickname: [
{
required: true,
message: '请输入用户名',
trigger: 'blur'
}
],
sex: [
{
required: true,
message: '请选择性别',
trigger: 'blur'
}
],
roleIds: [
{
required: true,
message: '请选择角色',
trigger: 'blur'
}
],
email: [
{
pattern: emailReg,
message: '邮箱格式不正确',
trigger: 'blur'
}
],
password: [
{
required: true,
pattern: /^[\S]{5,18}$/,
message: '密码必须为5-18位非空白字符',
trigger: 'blur'
}
],
phone: [
mobile: [
{
pattern: phoneReg,
message: '手机号格式不正确',
@@ -197,7 +89,8 @@
// 提交状态
loading: false,
// 是否是修改
isUpdate: false
isUpdate: false,
groupList: []
};
},
computed: {
@@ -206,7 +99,19 @@
return this.$store.state.theme.styleResponsive;
}
},
created() {
this.getGroupTypeList();
},
methods: {
getGroupTypeList() {
groupTypeUsers()
.then((data) => {
this.groupList = data;
})
.catch((e) => {
this.$message.error(e.message);
});
},
/* 保存编辑 */
save() {
this.$refs.form.validate((valid) => {
@@ -215,12 +120,9 @@
}
this.loading = true;
const data = {
...this.form,
roles: this.form.roleIds.map((d) => {
return { roleId: d };
})
...this.form
};
const saveOrUpdate = this.isUpdate ? updateUser : addUser;
const saveOrUpdate = this.isUpdate ? updateUser : updateUser;
saveOrUpdate(data)
.then((msg) => {
this.loading = false;
@@ -244,9 +146,7 @@
if (visible) {
if (this.data) {
this.$util.assignObject(this.form, {
...this.data,
roleIds: this.data.roles.map((d) => d.roleId),
password: ''
...this.data
});
this.isUpdate = true;
} else {
@@ -20,31 +20,32 @@
<el-col v-bind="styleResponsive ? { lg: 12, md: 12 } : { span: 12 }">
<el-form-item label="机构团队:">
<el-row>
<el-col :span="12" style="padding-right: 5px">
<el-select
value=""
v-model="where.orgId"
clearable
@change="changeOrg"
>
<el-option
v-for="item in orgList"
:value="item.id"
:key="item.id"
:label="item.title"
/>
</el-select>
</el-col>
<el-col :span="12" style="padding-right: 5px">
<el-select value="" v-model="where.teamId" clearable>
<el-option
v-for="item in teamList"
:value="item.id"
:key="item.id"
:label="item.title"
/>
</el-select>
</el-col>
<el-select
value=""
v-model="where.orgId"
clearable
@change="changeOrg"
>
<el-option
v-for="item in orgList"
:value="item.id"
:key="item.id"
:label="item.title"
/>
</el-select>
<el-select
value=""
v-model="where.teamId"
clearable
style="margin-left: 5px"
>
<el-option
v-for="item in teamList"
:value="item.id"
:key="item.id"
:label="item.title"
/>
</el-select>
</el-row>
</el-form-item>
</el-col>
@@ -60,6 +60,14 @@
</template>
<!-- 操作列 -->
<template v-slot:action="{ row }">
<el-link
type="primary"
:underline="false"
icon="el-icon-edit"
@click="openEdit(row)"
>
修改
</el-link>
<el-popconfirm
class="ele-action"
title="确定要删除此用户吗?"
@@ -74,6 +82,8 @@
</template>
</ele-pro-table>
</el-card>
<!-- 编辑弹窗 -->
<user-edit :visible.sync="showEdit" :data="current" @done="reload" />
<!-- 导入弹窗 -->
<user-import :visible.sync="showImport" @done="reload" />
</div>
@@ -82,6 +92,7 @@
<script>
import UserImport from './components/user-import.vue';
import UserSearch from './components/user-search.vue';
import UserEdit from './components/user-edit.vue';
import {
pageUsers,
removeUser,
@@ -92,6 +103,7 @@
export default {
name: 'SystemUser',
components: {
UserEdit,
UserImport,
UserSearch
},
+35 -12
View File
@@ -63,15 +63,15 @@
</template>
<template v-slot:cityName="{ row }">
{{ row.cityName[0] }}
<el-button
<el-link
size="mini"
v-if="row.cityName.length > 1"
type="primary"
class="ele-btn-icon"
@click="showAllCityName(row)"
>
查看所有
</el-button>
查看所有>>
</el-link>
</template>
<template v-slot:timeBetween="{ row }">
<div>{{ row.timeStart.split(' ')[0] }}~</div>
@@ -125,15 +125,22 @@
</template>
</el-dialog>
<el-dialog :visible.sync="showPoster" title="分享海报" width="300px">
<div
class="dialog-content"
style="height: 60vh"
<!-- 走马灯组件实现滑动 -->
<el-carousel
:interval="5000"
arrow="always"
height="60vh"
v-if="current && current.posterBg"
>
<template v-for="(item, index) in current.posterBg">
<el-image :src="item['url']" class="table-image" :key="index" />
</template>
</div>
<el-carousel-item
v-for="(img, index) in current.posterBg"
:key="index"
>
<div class="image-container">
<el-image fit="cover" :src="img['url']" class="sliding-image" />
</div>
</el-carousel-item>
</el-carousel>
</el-dialog>
<template v-if="current"> </template>
<el-dialog-wrapper
@@ -154,7 +161,9 @@
>
<el-row style="padding-bottom: 20px">
<template v-for="(item, index) in cityNames">
<el-tag :key="index" type="info">{{ item }}</el-tag>
<el-tag :key="index" type="info" style="margin-bottom: 10px">{{
item
}}</el-tag>
</template>
</el-row>
</ele-modal>
@@ -193,7 +202,7 @@
prop: 'cityName',
label: '推广范围',
showOverflowTooltip: true,
minWidth: 80,
minWidth: 170,
slot: 'cityName'
},
{
@@ -319,4 +328,18 @@
.el-dialog__body {
padding: 0;
}
/* 容器确保图片居中 */
.image-container {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
/* 图片样式 */
.sliding-image {
max-width: 100%;
height: 100%;
display: block;
margin: 0 auto;
}
</style>