李林
2024-03-07 fa65e938ddb5c206be73ce5dc7f51437d6396e05
完成客户管理
已修改3个文件
已删除6个文件
已添加1个文件
1472 ■■■■ 文件已修改
src/assets/api/controller.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tool/value-table.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/custom_manage.vue 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/data-comparison.vue 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/fans-submit.vue 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/finance-submit.vue 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/product-count.vue 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/product-enum.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/registrant-count.vue 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/js/menu.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -30,6 +30,9 @@
    selectPowerByRoleId: "/role/selectPowerByRoleId", //通过角色id查询权限列表
    upRole: "/role/upRole", //修改角色
    getUserMenu: "/user/getUserMenu", //获取用户枚举
    selectCustomPageList: "/user/selectCustomPageList", //获取客户列表
    delCustomById: "/user/delCustomById", //删除客户信息
    addCustom: "/user/addCustom", //新增客户信息
}
const dataReporting = {
src/components/tool/value-table.vue
@@ -68,7 +68,7 @@
                        <span v-else>{{scope.row[a.label]}}</span>
                    </template>
                </el-table-column>
                <el-table-column fixed="right" align="center" label="操作" :width="60 + data.do.length * 40"
                <el-table-column fixed="right" align="center" label="操作" :width="getWidth()"
                    v-if="data.do.length > 0">
                    <template slot-scope="scope">
                        <el-button v-for="(a, ai) in data.do" :key="ai" :type="a.type"
@@ -711,6 +711,13 @@
          this.$emit(val.method,row)
        }
      },
            getWidth(){
                let count = 0
                this.data.do.forEach(a=>{
                    count += a.font.length
                })
                return count * 15 + 60 + 'px'
            }
        }
    }
</script>
src/components/view/custom_manage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,313 @@
<style scoped>
    .title {
        height: 60px;
        line-height: 60px;
    }
    .search {
        background-color: #fff;
        height: 80px;
        display: flex;
        align-items: center;
    }
    .search_thing {
        width: 350px;
        display: flex;
        align-items: center;
    }
    .search_label {
        width: 110px;
        font-size: 14px;
        text-align: right;
    }
    .search_input {
        width: calc(100% - 110px);
    }
    .table {
        margin-top: 10px;
        background-color: #fff;
        width: calc(100% - 40px);
        height: calc(100% - 60px - 80px - 10px - 40px);
        padding: 20px;
    }
</style>
<template>
    <div class="custom_manage">
        <div>
            <el-row class="title">
                <el-col :span="12" style="padding-left: 20px;">客户管理</el-col>
                <el-col :span="12" style="text-align: right;">
                    <el-button size="medium" type="primary" @click="addDia = true" v-if="addPower">新增</el-button>
                </el-col>
            </el-row>
        </div>
        <div class="search">
            <div class="search_thing">
                <div class="search_label">客户名称:</div>
                <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                        v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing">
                <div class="search_label">账号状态:</div>
                <div class="search_input">
                    <el-select size="small" v-model="componentData.entity.state" style="width: 100%;" @change="refreshTable()">
                        <el-option label="全部" :value="null"></el-option>
                        <el-option label="启用" :value="1"></el-option>
                        <el-option label="停用" :value="0"></el-option>
                    </el-select>
                </div>
            </div>
            <div class="search_thing" style="padding-left: 30px;">
                <el-button size="small" @click="refresh()">重 ç½®</el-button>
                <el-button size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
            </div>
        </div>
        <div class="table">
            <ValueTable ref="ValueTable" :url="$api.user.selectCustomPageList" :delUrl="$api.user.delCustomById"
                :componentData="componentData" :key="upIndex" />
        </div>
        <el-dialog title="新增客户" :visible.sync="addDia" width="450px">
            <div style="margin-bottom: 15px;">
                <el-row style="line-height: 50px;">
                    <el-col :span="7" style="text-align: right;padding-right: 8px;">
                        <span class="required-span">* </span>客户名称:</el-col>
                    <el-col :span="15">
                        <el-input v-model="user.name" readonly size="small">
                            <template slot="append"><el-button slot="append" icon="el-icon-search"
                                    @click="selectUserDia = true"></el-button></template>
                        </el-input>
                    </el-col>
                </el-row>
                <el-row style="line-height: 50px;">
                    <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>客户账户:</el-col>
                    <el-col :span="15">
                        <el-input v-model="user.account" readonly size="small"></el-input>
                    </el-col>
                </el-row>
                <el-row style="line-height: 50px;">
                    <el-col :span="7" style="text-align: right;padding-right: 8px;">电子邮箱:</el-col>
                    <el-col :span="15">
                        <el-input v-model="user.email" size="small" clearable></el-input>
                    </el-col>
                </el-row>
                <el-row style="line-height: 50px;">
                    <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>电话号码:</el-col>
                    <el-col :span="15">
                        <el-input v-model="user.phone" size="small" clearable></el-input>
                    </el-col>
                </el-row>
                <el-row style="line-height: 50px;">
                    <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>客户单位:</el-col>
                    <el-col :span="15">
                        <el-input v-model="user.company" size="small" clearable></el-input>
                    </el-col>
                </el-row>
                <el-row style="margin-top: 15px;">
                    <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>单位地址:</el-col>
                    <el-col :span="15">
                        <el-input type="textarea" v-model="user.address" size="small" clearable :autosize="{minRows: 2, maxRows: 4}"></el-input>
                    </el-col>
                </el-row>
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button @click="addDia = false">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="customAdd" :loading="loading">ç¡® å®š</el-button>
            </span>
        </el-dialog>
        <el-dialog title="选择用户" :visible.sync="selectUserDia" width="70%">
            <div class="body" style="height: 60vh;" v-if="selectUserDia">
                <ValueTable ref="ValueTable2" :url="$api.user.selectUserList" :componentData="componentData2" />
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button @click="selectUserDia = false">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="selectUser">ç¡® å®š</el-button>
            </span>
        </el-dialog>
    </div>
</template>
<script>
    import ValueTable from '../tool/value-table.vue'
    export default {
        components: {
            ValueTable
        },
        data() {
            return {
                componentData: {
                    entity: {
                        name: null,
                        state: null,
                        orderBy: {
                            field: 'id',
                            order: 'asc'
                        }
                    },
                    isIndex: true,
                    showSelect: false,
                    select: false,
                    do: [{
                        font: '委托记录',
                        type: 'text',
                        method: 'entrust'
                    }, {
                        font: '协议记录',
                        type: 'text',
                        method: 'protocol'
                    }, {
                        id: 'delete',
                        font: '删除',
                        type: 'text',
                        method: 'doDiy'
                    }],
                    tagField: {
                        state: {
                            select: [{
                                value: 1,
                                type: 'success',
                                label: '启用'
                            }, {
                                value: 0,
                                type: 'danger',
                                label: '停用'
                            }]
                        }
                    },
                    selectField: {
                        state: {
                            select: [{
                                value: 1,
                                type: 'success',
                                label: '启用'
                            }, {
                                value: 0,
                                type: 'danger',
                                label: '停用'
                            }]
                        }
                    },
                    requiredAdd: [],
                    requiredUp: []
                },
                entityCopy: {},
                upIndex: 0,
                addDia: false,
                addPower: true,
                addDia: false,
                user: {
                    name: null
                },
                selectUserDia: false,
                loading: false,
                componentData2: {
                    entity: {
                        isCustom: 0,
                        orderBy: {
                            field: 'id',
                            order: 'asc'
                        }
                    },
                    isIndex: true,
                    showSelect: true,
                    select: false,
                    do: [],
                    tagField: {},
                    selectField: {},
                }
            }
        },
        mounted() {
            this.entityCopy = this.HaveJson(this.componentData.entity)
            this.getPower()
        },
        methods: {
            refreshTable() {
                this.$refs['ValueTable'].selectList()
            },
            refresh() {
                this.componentData.entity = this.HaveJson(this.entityCopy)
                this.upIndex++
            },
            customAdd() {
                if (this.user.name == '' || this.user.name == null) {
                    this.$message.error('请填写客户名称')
                    return
                }
                if (this.user.account == '' || this.user.account == null) {
                    this.$message.error('请填写客户账户')
                    return
                }
                if (this.user.phone == '' || this.user.phone == null) {
                    this.$message.error('请填写电话号码')
                    return
                }
                if (this.user.company == '' || this.user.company == null) {
                    this.$message.error('请填写客户单位')
                    return
                }
                if (this.user.address == '' || this.user.address == null) {
                    this.$message.error('请填写单位地址')
                    return
                }
                this.loading = true
                this.$axios.post(this.$api.user.addCustom, this.user, {
                    headers: {
                        'Content-Type': 'application/json'
                    }
                }).then(res => {
                    if (res.code == 201) return
                    this.$message.success('添加成功')
                    this.refreshTable()
                    this.loading = false
                    this.addDia = false
                })
            },
            // æƒé™åˆ†é…
            getPower() {
                let power = JSON.parse(sessionStorage.getItem('power'))
                let up = false
                let del = false
                let add = false
                for (var i = 0; i < power.length; i++) {
                    if (power[i].menuMethod == 'delCustomById') {
                        del = true
                    }
                    if (power[i].menuMethod == 'addCustom') {
                        add = true
                    }
                }
                if (!del) {
                    this.componentData.do.splice(2, 1)
                }
                this.addPower = add
            },
            entrust(data) {
            },
            protocol(data) {
            },
            selectUser() {
                let selects = this.$refs.ValueTable2.multipleSelection
                if (selects.length == 0) {
                    this.$message.error('未选择数据')
                    return
                }
                delete selects['orderBy']
                delete selects['updateUser']
                delete selects['updateTime']
                this.user = selects
                this.selectUserDia = false
            }
        }
    }
</script>
src/components/view/data-comparison.vue
ÎļþÒÑɾ³ý
src/components/view/fans-submit.vue
ÎļþÒÑɾ³ý
src/components/view/finance-submit.vue
ÎļþÒÑɾ³ý
src/components/view/product-count.vue
ÎļþÒÑɾ³ý
src/components/view/product-enum.vue
ÎļþÒÑɾ³ý
src/components/view/registrant-count.vue
ÎļþÒÑɾ³ý
static/js/menu.js
@@ -177,8 +177,8 @@
        }, {
            v: "客户管理",
            i: "el-icon-s-tools",
            u: "",
            p: ""
            u: "custom_manage",
            p: "selectCustomPageList"
        }, {
            v: "系统日志",
            i: "el-icon-s-tools",