From bdf3026858cbe53ca31861d9e3cb073469d0992e Mon Sep 17 00:00:00 2001
From: mg <maokecheng@163.com>
Date: 星期二, 01 十一月 2022 16:30:54 +0800
Subject: [PATCH] 新增短信页面和短信模板页面

---
 src/views/operate/sms/smsIndex/index.vue                            |   30 
 src/views/systemSetting/device/grid/components/header/index.vue     |  110 ++
 src/views/operate/sms/smsTemplate/index.vue                         |   52 
 src/views/systemSetting/device/grid/components/createUser/index.vue |  555 +++++++++++++
 src/views/systemSetting/device/grid/index.vue                       |   50 +
 src/views/operate/rectification/taskList/index.vue                  |   44 
 src/views/systemSetting/device/grid/components/myView/index.vue     |  202 ++++
 src/views/systemSetting/device/grid/components/main/index.vue       |  508 ++++++++++++
 src/router/index.js                                                 |    4 
 src/views/systemSetting/device/grid/components/password/index.vue   |  145 +++
 src/views/operate/sms/smsTemplate/createTemplate/index.vue          |  432 ++++++++++
 src/views/systemSetting/device/grid/components/updateUser/index.vue |  291 +++++++
 12 files changed, 2,366 insertions(+), 57 deletions(-)

diff --git a/src/router/index.js b/src/router/index.js
index 38af357..0c4f355 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -276,8 +276,8 @@
                 component: () => import('@/views/operate/sms/smsIndex'),
               },
               {
-                path: 'smstemplate',
-                name: 'smstemplate',
+                path: 'smsTemplate',
+                name: 'smsTemplate',
                 component: () => import('@/views/operate/sms/smsTemplate'),
               },
             ]
diff --git a/src/views/operate/rectification/taskList/index.vue b/src/views/operate/rectification/taskList/index.vue
index 2861eba..bc326e6 100644
--- a/src/views/operate/rectification/taskList/index.vue
+++ b/src/views/operate/rectification/taskList/index.vue
@@ -112,15 +112,41 @@
     methods: {
         // 鑾峰彇鎺ュ彛鍒楄〃
         getUserList() {
-            const that = this;
-            // const { currentPage, pageSize, search } = this;
-            this.dialogCreate = false;
-            this.$axios.get("sccg/system/portal/thirdApp/search").then(res => {
-                const { code, data } = res;
-                if (code == 200) {
-                    this.tableData = data;
-                }
-            })
+            // const that = this;
+            // // const { currentPage, pageSize, search } = this;
+            // this.dialogCreate = false;
+            // this.$axios.get("/sccg/task/list").then(res => {
+            //     const { code, data } = res;
+            //     if (code == 200) {
+            //         this.tableData = data;
+            //     }
+            // })
+
+            // let arr = [];
+            // const { currentPage, pageSize,context,messageStatus,messageKind } = this;
+            // await this.$axios({
+            //     method: 'post',
+            //     url: '/sccg/task/list',
+            //     data: {
+            //         body: "",
+            //         channelCode: messageKind === '00' ?'':messageKind,
+            //         createUser: '',
+            //         current: currentPage,
+            //         head: context,
+            //         messageType: "",
+            //         pageSize: pageSize,
+            //         randomCode: "",
+            //         remark: "",
+            //         sendTime: "",
+            //         status: messageStatus === 2 ? '':messageStatus,
+            //         targetFrom: "",
+            //         targetTo: ""
+            //     }
+            // })
+            //     .then(res => {
+            //         this.tableData = res.data;
+            //     })
+            // return arr;
         },
         // 璁剧疆琛ㄦ牸鏂戦┈绾�
         tableRowClassName({ row, rowIndex }) {
diff --git a/src/views/operate/sms/smsIndex/index.vue b/src/views/operate/sms/smsIndex/index.vue
index e753649..f511252 100644
--- a/src/views/operate/sms/smsIndex/index.vue
+++ b/src/views/operate/sms/smsIndex/index.vue
@@ -11,19 +11,19 @@
                     <el-input placeholder="娑堟伅鏍囬" v-model="context"></el-input>
                 </div>
                 <div class="message-status">
-                    <span>娑堟伅鐘舵��:</span>
-                    <el-select v-model="messageStatus" placeholder="璇烽�夋嫨娑堟伅鐘舵��">
+                    <span>鐭俊鍥炴墽:</span>
+                    <el-select v-model="messageStatus" placeholder="璇烽�夋嫨">
                         <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value">
                         </el-option>
                     </el-select>
                 </div>
-                <div class="message-kind">
+                <!-- <div class="message-kind">
                     <span>娑堟伅鍒嗙被:</span>
                     <el-select v-model="messageKind" placeholder="璇烽�夋嫨娑堟伅鍒嗙被">
                         <el-option v-for="item in kindList" :key="item.id" :label="item.columnName" :value="item.id">
                         </el-option>
                     </el-select>
-                </div>
+                </div> -->
                 <div class="find">
                     <el-button type="primary" icon="el-icon-search" @click="handleSearch">鏌ヨ</el-button>
                     <el-button icon="el-icon-delete-solid" @click="handleReset">閲嶇疆</el-button>
@@ -48,31 +48,24 @@
                     </el-table-column>
                     <el-table-column prop="head" label="鏍囬" min-width="10">
                     </el-table-column>
-                    <el-table-column prop="updateTime" label="淇敼鏃堕棿" min-width="10">
+                    <el-table-column prop="updateTime" label="鍙戦�佹椂闂�" min-width="10">
                         <template slot-scope="scope">
                             <span>{{changeTime(scope.row)}}</span>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="targetFrom" label="鍙戝竷浜哄憳" min-width="15">
-                    </el-table-column>
-                    <el-table-column prop="channelCode" label="娑堟伅鍒嗙被" min-width="10">
-                        <template slot-scope="scope">
-                            <span>{{scope.row.channelCode === '01' ? '绔欏唴淇�':scope.row.channelCode
-                            ==='02'?"閭欢":'鐭俊'}}</span>
-                        </template>
+                    <el-table-column prop="targetFrom" label="鍙戦�佽处鍙�" min-width="15">
                     </el-table-column>
                     <el-table-column prop="status" label="鍙戝竷鐘舵��" min-width="5">
                         <template slot-scope="scope">
-                            {{scope.row.status === 0 ? '鏈彂甯�' :'宸插彂甯�'}}
+                            {{scope.row.status === 0 ? '鍙戦�佸け璐�' :'鍙戦�佹垚鍔�'}}
                         </template>
                     </el-table-column>
                     <el-table-column prop="operation" label="鎿嶄綔" min-width="15">
                         <template slot-scope="scope">
                             <div class="operation">
-                                <el-link icon="el-icon-view" :underline="false" @click="handleView(scope.row)">鏌ョ湅</el-link>
-                                <el-link icon="el-icon-edit" class="leftPx" :underline="false" @click="handleEdit(scope.row)">缂栬緫</el-link>
                                 <el-link class="leftPx" icon="el-icon-delete-solid" :underline="false"
                                     @click="handleDelete([scope.row.id])">鍒犻櫎</el-link>
+                                <el-link icon="el-icon-edit" class="leftPx" :underline="false" @click="handleEdit(scope.row)">閲嶆柊鍙戦��</el-link>
                             </div>
                         </template>
                     </el-table-column>
@@ -121,6 +114,7 @@
     </div>
 </template>
 <script>
+import helper from '@/utils/mydate'
 export default {
     components: {
         // MyView, MyCreate,MyEdit
@@ -167,11 +161,11 @@
                     value: 2,
                 },
                 {
-                    label: '鏈彂甯�',
+                    label: '鍙戦�佸け璐�',
                     value: 0,
                 },
                 {
-                    label: '宸插彂甯�',
+                    label: '鍙戦�佹垚鍔�',
                     value: 1,
                 }
             ],
@@ -257,7 +251,7 @@
                 url: 'sccg/message/list',
                 data: {
                     body: "",
-                    channelCode: messageKind === '00' ?'':messageKind,
+                    channelCode: '03',
                     createUser: '',
                     current: currentPage,
                     head: context,
diff --git a/src/views/operate/sms/smsTemplate/createTemplate/index.vue b/src/views/operate/sms/smsTemplate/createTemplate/index.vue
new file mode 100644
index 0000000..5720e60
--- /dev/null
+++ b/src/views/operate/sms/smsTemplate/createTemplate/index.vue
@@ -0,0 +1,432 @@
+<template>
+    <div class="createUser">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="role" :rules="createRoleRules"
+                    label-position="right">
+                    <!-- 娑堟伅鏍忕洰 -->
+                    <el-form-item class="optionItem" label="妯℃澘绫诲瀷:" prop="messageType">
+                        <div class="message-item">
+                            <div class="message-item__left">
+                                <el-select v-model="role.messageType" placeholder="璇烽�夋嫨">
+                                    <el-option v-for="item in colList" :key="item.id" :label="item.columnName"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </div>                       
+                        </div>
+                    </el-form-item>
+                    <!-- 娑堟伅鏍囬 -->
+                    <el-form-item class="optionItems" label="娑堟伅鏍囬:" prop="head">
+                        <div class="message-item__left">
+                            <el-input v-model="role.head" placeholder="璇烽�夋嫨娑堟伅鏍囬"></el-input>
+                        </div>
+                    </el-form-item>
+                    <!-- 鎺ユ敹瀵硅薄 -->
+                    <!-- <el-form-item class="optionItem" label="鎺ユ敹瀵硅薄:" prop="targetTo">
+                        <div class="message-item__left">
+                            <el-select v-model="role.targetTo" placeholder="璇烽�夋嫨鎺ユ敹瀵硅薄" >
+                                <el-option :value="role.targetTo">
+                                    <el-tree ref="tree" :data="departList" :props="defaultProps" show-checkbox
+                                        @check="handleCheck" default-expand-all node-key="id">
+                                    </el-tree>
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </el-form-item> -->
+                    <!-- 娑堟伅鍐呭 -->
+                    <el-form-item class="optionItem" label="娑堟伅鍐呭:" prop="body">
+                        <MyEditor ref="edit" @getMyBody="getMyBody"></MyEditor>
+                        <!-- <el-input type="textarea" v-model="role.description" placeholder="璇疯緭鍏ユ弿杩板唴瀹�200瀛椾互鍐�"></el-input> -->
+                    </el-form-item>
+                    <!-- 鎻愰啋鏂瑰紡 -->
+                    <!-- <el-form-item class="optionItem" label="鎻愰啋鏂瑰紡:" prop="channelCode">
+                        <el-radio-group v-model="role.channelCode">
+                            <el-radio label="01">绔欏唴淇�</el-radio>
+                            <el-radio label="02">閭欢</el-radio>
+                            <el-radio label="03">鐭俊</el-radio>
+                        </el-radio-group>
+                        <span class="message-tip">(鐭俊鍙敤鏁�: 1000鏉�)</span>
+                    </el-form-item> -->
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" @click.native.prevent="handleSubmit(0)" class="btn save">淇濆瓨
+                            </el-button>
+                            <!-- <el-button type="primary" @click.native.prevent="handleSubmit(1)" class="btn submit">鍙戝竷
+                            </el-button>
+                            <el-button type="primary" @click.native.prevent="handleView" class="btn submit">棰勮
+                            </el-button> -->
+                            <el-button class="btn cancel" @click.native.prevent="handleReset">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+                <!-- 鏂板鏍忕洰 -->
+                <el-dialog title="娣诲姞鏍忕洰" :visible.sync="dialogCreate" v-if="dialogCreate" width="60%"
+                    :before-close="handleConfirmClose" append-to-body>
+                    <MyColumnAdd @closeDialog="closeDialog"></MyColumnAdd>
+                </el-dialog>
+                <!-- 棰勮娑堟伅 -->
+                <el-dialog title="娑堟伅棰勮" :visible.sync="dialogView" v-if="dialogView" width="60%"
+                    :before-close="handleConfirmClose" append-to-body>
+                    <MyColView  :info="info" @closeDialog="closeDialog"></MyColView>
+                </el-dialog>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+import MyEditor from '@/components/edit'
+export default {
+    components: { MyEditor, },
+    data() {
+        const validateNickname = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇峰~鍐欐秷鎭爮鐩�"));
+            } else {
+                callback();
+            }
+        };
+        const validatePass = (rule, value, callback) => {
+            if (!value) {
+                callback();
+            } else {
+                callback();
+            }
+        };
+        const validateTruename = (rule, value, callback) => {
+            if (value.length !== 0) {
+                callback();
+            } else {
+                callback(new Error('璇烽�夋嫨鎺ユ敹瀵硅薄'));
+            }
+        };
+        return {
+            role: {
+                messageType: '',
+                head: '',
+                targetTo: '',
+                targetFrom: null,
+                body: '',
+                channelCode: '01',
+            },
+            createRoleRules: {
+                messageType: [
+                    { required: true, trigger: "blur", validator: validateNickname },
+                ],
+                head: [
+                    { required: false, trigger: "blur", validator: validatePass },
+                ],
+                targetTo: [
+                    { required: false, trigger: "blur", validator: validateTruename },
+                ],
+            },
+            colList: [],
+            departList: [],
+            typeList: [],
+            dialogCreate: false,
+            dialogView: false,
+            defaultProps: {
+                children: 'children',
+                label: 'departName',
+                // disabled: function (data, node) {
+                //     if (data.createTime) {
+                //         return !data.leaf
+                //     }
+                // }
+            },
+            checkedList: [],
+            tempNameArr:[],
+            info:{},
+            sendUser:""
+        }
+    },
+    created() {
+        this.setColumnList();
+        this.setDepartList();
+        this.getLoginUserInfo();
+    },
+    methods: {
+        // 鍏抽棴寮圭獥
+        handleConfirmClose(done) {
+            this.$confirm('纭鍏抽棴?')
+                .then(_ => {
+                    done();
+                })
+        },
+        // 璁剧疆鏍忕洰
+        async setColumnList() {
+            this.colList = [{"id":"1","columnName":"楠岃瘉鐮佹ā鏉�"},{"id":"2","columnName":"娲诲姩妯℃澘"}];
+        },
+        // 鑾峰彇鏍忕洰
+        async getColumnList() {
+            let arr;
+            await this.$axios({
+                method: 'get',
+                url: 'sccg/message_column/getAllColumn'
+            })
+                .then(res => {
+                    console.log(res);
+                    arr = res.data;
+                })
+            return arr;
+        },
+        // 鍏抽棴寮圭獥
+        closeDialog({ flag, index }) {
+            this.dialogCreate = flag;
+            if (index === 1) {
+                // 閲嶆柊璁剧疆鏍忕洰
+                this.setColumnList();
+            }
+        },
+        // 鑾峰彇閮ㄩ棬鏍�
+        async getDepartList() {
+            let arr
+            await this.$axios({
+                method: 'get',
+                url: 'sccg/depart/tree'
+            })
+                .then(res => {
+                    arr = res.data
+                })
+            return arr;
+        },
+        // 璁剧疆閮ㄩ棬鏍�
+        async setDepartList() {
+            this.departList = await this.filterDepartList();
+        },
+        // 澶勭悊閮ㄩ棬鏍�
+        async filterDepartList() {
+            let arr = await this.getDepartList();
+            const { setChildren } = this;
+            // console.log(setChildren);
+            arr.forEach(item => {
+                setChildren(item);
+            })
+            return arr;
+        },
+        // 閫掑綊children
+        setChildren(obj) {
+            if (obj.children !== null) {
+                if (obj.children.length !== 0) {
+                    obj.children.forEach(item => {
+                        return this.setChildren(item);
+                    })
+                }
+            } else {
+                if (obj.userInfoDTOS.length !== 0) {
+                    obj.children = [];
+                    obj.userInfoDTOS.forEach(item => {
+                        obj.children.push({ id: item.userId, departName: item.username })
+                    })
+                }
+            }
+        },
+        // 閫変腑id
+        handleCheck(data, node) {
+            let arr = [],nameArr = []
+            console.log(node.checkedNodes)
+            node.checkedNodes.forEach(item => {
+                if(!item.hasOwnProperty('departType')){
+                    arr.push(item.id)
+                    nameArr.push(item.departName)
+                }
+            })
+            this.checkedList = arr
+            this.tempNameArr = nameArr
+            console.log(this.tempNameArr)
+            this.role.targetTo = arr.length + '浜�'
+        },
+        // 鏂板缓/淇濆瓨娑堟伅(1:鏂板缓,0淇濆瓨娑堟伅)
+        handleSubmit(mystatus) {
+            this.$refs.user.validate((valid) => {
+                if (valid) {
+                    const { role, checkedList } = this;
+                    console.log(checkedList);
+                    this.$axios({
+                        method: 'post',
+                        url: 'sccg/message_sms_template/addSmsTemplate',
+                        data: {
+                            body: role.body,
+                            channelCode: `${role.channelCode}`,
+                            title: role.head,
+                            type: role.messageType,
+                            sendTime: new Date(),
+                            targetTo: checkedList.join(','),
+                            targetFrom: `${role.targetFrom}`,
+                            status: mystatus,
+                        }
+                    })
+                        .then(res => {
+                            if (res.code === 200) {
+                                this.$message({
+                                    type: 'success',
+                                    message: mystatus === 1 ? '鍙戦�佹垚鍔�' : '淇濆瓨鎴愬姛',
+                                })
+                                this.$emit('closeMyDialog', { flag: false, index: 1 });
+                            }
+                        })
+                } else {
+                    return false;
+                }
+            })
+        },
+        // 鑾峰緱娑堟伅浣�
+        getMyBody(obj) {
+            console.log(obj);
+            this.role.body = obj;
+        },
+        // 閲嶇疆琛ㄥ崟
+        handleReset() {
+            this.$refs.edit.editor.txt.clear();
+            // this.$refs.edit.wangEditor.txt.html('<p><br></p>') 
+            this.setDepartList();
+            this.$refs.user.resetFields();
+        },
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅
+        getLoginUserInfo() {
+            const name = sessionStorage.getItem('name');
+            this.$axios({
+                method: 'get',
+                url: 'sccg/admin/info?name=' + name,
+            })
+                .then(res => {
+                    this.role.targetFrom = res.data.userId
+                    this.sendUser = res.data.username
+                })
+        },
+        // 娑堟伅棰勮
+        handleView() {
+            this.$refs.user.validate((valid) => {
+                if (valid) {
+                    const { role,getColText,tempNameArr,sendUser } = this
+                    this.dialogView = true;
+                    let info = {}
+                    // 鑾峰緱鏍忕洰娑堟伅
+                    info.channelCode = role.channelCode === '01'? '绔欏唴淇�': role.channelCode === '02' ? '閭欢':'鐭俊'
+                    info.messageType = getColText(role.messageType)
+                    info.body = role.body
+                    info.head = role.head
+                    info.targetTo = tempNameArr
+                    info.targetFrom = sendUser
+                    this.info = info
+                } else {
+                    return false
+                }
+            })
+        },
+        // 鑾峰緱鏍忕洰娑堟伅
+        getColText(id){
+            console.log(id)
+            const {colList} = this
+            let str = ''
+            colList.forEach(item=>{
+                item.id === id ? str = item.columnName : '' 
+            })
+            return str
+        }
+    },
+    props: ['closeMyDialog']
+}
+</script>
+<style lang="scss" scoped>
+.createUser {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+            &:deep(.el-dialog__title) {
+                color: #4b9bb7;
+            }
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                width: 400px;
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .message-item__left {
+                width: 400px;
+            }
+
+            .message-add {
+                &:hover {
+                    cursor: pointer;
+                }
+            }
+
+            .el-form-item__content :deep(.el-select) {
+                width: 400px;
+            }
+
+            :deep(.el-input) {
+                width: 400px;
+            }
+
+            .message-item {
+                display: flex;
+
+                span {
+                    margin-left: 20px;
+                    color: #4b9bb7;
+                }
+            }
+
+            .message-tip {
+                margin-left: 20px;
+            }
+
+            :deep(.el-input--suffix) {
+                width: 400px;
+            }
+
+            &::v-deep .el-textarea__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+            .optionBtn {
+                display: flex;
+                margin-top: 20px;
+
+                .btn {
+                    padding: 12px 50px;
+                }
+            }
+
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/operate/sms/smsTemplate/index.vue b/src/views/operate/sms/smsTemplate/index.vue
index e753649..b63c1a6 100644
--- a/src/views/operate/sms/smsTemplate/index.vue
+++ b/src/views/operate/sms/smsTemplate/index.vue
@@ -11,19 +11,19 @@
                     <el-input placeholder="娑堟伅鏍囬" v-model="context"></el-input>
                 </div>
                 <div class="message-status">
-                    <span>娑堟伅鐘舵��:</span>
-                    <el-select v-model="messageStatus" placeholder="璇烽�夋嫨娑堟伅鐘舵��">
+                    <span>妯℃澘绫诲瀷:</span>
+                    <el-select v-model="messageStatus" placeholder="璇烽�夋嫨">
                         <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value">
                         </el-option>
                     </el-select>
                 </div>
-                <div class="message-kind">
+                <!-- <div class="message-kind">
                     <span>娑堟伅鍒嗙被:</span>
                     <el-select v-model="messageKind" placeholder="璇烽�夋嫨娑堟伅鍒嗙被">
                         <el-option v-for="item in kindList" :key="item.id" :label="item.columnName" :value="item.id">
                         </el-option>
                     </el-select>
-                </div>
+                </div> -->
                 <div class="find">
                     <el-button type="primary" icon="el-icon-search" @click="handleSearch">鏌ヨ</el-button>
                     <el-button icon="el-icon-delete-solid" @click="handleReset">閲嶇疆</el-button>
@@ -46,26 +46,26 @@
                     <el-table-column label="ID" min-width="5">
                         <template slot-scope="scope">{{ scope.row.id }}</template>
                     </el-table-column>
-                    <el-table-column prop="head" label="鏍囬" min-width="10">
+                    <el-table-column prop="title" label="鏍囬" min-width="10">
                     </el-table-column>
-                    <el-table-column prop="updateTime" label="淇敼鏃堕棿" min-width="10">
+                    <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="10">
                         <template slot-scope="scope">
                             <span>{{changeTime(scope.row)}}</span>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="targetFrom" label="鍙戝竷浜哄憳" min-width="15">
-                    </el-table-column>
-                    <el-table-column prop="channelCode" label="娑堟伅鍒嗙被" min-width="10">
+                    <!-- <el-table-column prop="targetFrom" label="鍙戝竷浜哄憳" min-width="15">
+                    </el-table-column> -->
+                    <el-table-column prop="type" label="妯℃澘绫诲瀷" min-width="10">
                         <template slot-scope="scope">
-                            <span>{{scope.row.channelCode === '01' ? '绔欏唴淇�':scope.row.channelCode
-                            ==='02'?"閭欢":'鐭俊'}}</span>
+                            <span>{{scope.row.type === 1 ? '楠岃瘉鐮佹ā鏉�':scope.row.type
+                            ===2?"娲诲姩妯℃澘":'鍏朵粬妯℃澘'}}</span>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="status" label="鍙戝竷鐘舵��" min-width="5">
+                    <!-- <el-table-column prop="status" label="鍙戝竷鐘舵��" min-width="5">
                         <template slot-scope="scope">
                             {{scope.row.status === 0 ? '鏈彂甯�' :'宸插彂甯�'}}
                         </template>
-                    </el-table-column>
+                    </el-table-column> -->
                     <el-table-column prop="operation" label="鎿嶄綔" min-width="15">
                         <template slot-scope="scope">
                             <div class="operation">
@@ -78,10 +78,10 @@
                     </el-table-column>
                 </el-table>
                 <!-- 鏂板缓娑堟伅 -->
-                <!-- <el-dialog title="鏂板缓娑堟伅" :visible.sync="dialogCreate" v-if="dialogCreate" width="80%"
+                <el-dialog title="鏂板缓鐭俊妯℃澘" :visible.sync="dialogCreate" v-if="dialogCreate" width="80%"
                     :before-close="handleConfirmClose">
                     <MyCreate @closeMyDialog="closeDialog"></MyCreate>
-                </el-dialog> -->
+                </el-dialog>
                 <!-- 娑堟伅璇︽儏 -->
                 <!-- <el-dialog title="娑堟伅璇︽儏" :visible.sync="dialogView" v-if="dialogView" width="45%"
                     :before-close="handleClose">
@@ -121,9 +121,11 @@
     </div>
 </template>
 <script>
+import helper from '@/utils/mydate'
+import MyCreate from './createTemplate'
 export default {
     components: {
-        // MyView, MyCreate,MyEdit
+         MyCreate,
     },
     data() {
         return {
@@ -159,20 +161,20 @@
                 }
             ],
             tempList: [],
-            messageStatus: 2,
+            messageStatus: 0,
             messageKind: '00',
             statusList: [
                 {
                     label: '鍏ㄩ儴',
-                    value: 2,
-                },
-                {
-                    label: '鏈彂甯�',
                     value: 0,
                 },
                 {
-                    label: '宸插彂甯�',
+                    label: '楠岃瘉鐮佹ā鏉�',
                     value: 1,
+                },
+                {
+                    label: '娲诲姩妯℃澘',
+                    value: 2,
                 }
             ],
             kindList: [
@@ -254,19 +256,19 @@
             const { currentPage, pageSize,context,messageStatus,messageKind } = this;
             await this.$axios({
                 method: 'post',
-                url: 'sccg/message/list',
+                url: 'sccg/message_sms_template/list',
                 data: {
                     body: "",
                     channelCode: messageKind === '00' ?'':messageKind,
                     createUser: '',
                     current: currentPage,
-                    head: context,
+                    title: context,
                     messageType: "",
                     pageSize: pageSize,
                     randomCode: "",
                     remark: "",
                     sendTime: "",
-                    status: messageStatus === 2 ? '':messageStatus,
+                    type: messageStatus === 0 ? '':messageStatus,
                     targetFrom: "",
                     targetTo: ""
                 }
diff --git a/src/views/systemSetting/device/grid/components/createUser/index.vue b/src/views/systemSetting/device/grid/components/createUser/index.vue
new file mode 100644
index 0000000..274dda7
--- /dev/null
+++ b/src/views/systemSetting/device/grid/components/createUser/index.vue
@@ -0,0 +1,555 @@
+<template>
+    <div class="createUser">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="user" :rules="createUserRules"
+                    label-position="right">
+                    <!-- 鐢ㄦ埛鍚嶇О -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鐢ㄦ埛鍚嶇О:" prop="username">
+                                <el-input v-model="user.username" placeholder="濉啓鐢ㄦ埛鍚嶇О" autoComplete="new-username">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 鐢ㄦ埛瀵嗙爜 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItems" label="鐢ㄦ埛瀵嗙爜:" prop="password">
+                                <el-input v-model="user.password" type="password" autoComplete="new-password"
+                                    placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                        <!-- 閲嶆柊杈撳叆瀵嗙爜鍗充负淇敼锛屽瘑鐮佹湁鏁堟湡榛樿涓�3涓湀 -->
+                    </div>
+                    <!-- 鎵�灞炵敤鎴峰鍚� -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鎵�灞炵敤鎴峰鍚�:" prop="nickName">
+                                <el-input v-model="user.nickName" placeholder="璇峰~鍐欑敤鎴峰鍚�"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 鎬у埆 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鎬у埆:" prop="sex">
+                                <el-radio-group v-model="user.sex">
+                                    <el-radio :label="1">鐢�</el-radio>
+                                    <el-radio :label="0">濂�</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 鏄惁鍏氬憳 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鏄惁鍏氬憳:" prop="isDy">
+                                <el-radio-group v-model="user.isDy">
+                                    <el-radio :label="1">鏄�</el-radio>
+                                    <el-radio :label="0">鍚�</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 鎵�灞炴墜鏈哄彿鐮� -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鎵�灞炴墜鏈哄彿鐮�:" prop="mobile">
+                                <el-input v-model="user.mobile" maxlength="11" placeholder="璇峰~鍐欐墜鏈哄彿鐮�"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 閭鍦板潃 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="閭鍦板潃:" prop="email">
+                                <el-input v-model="user.email" placeholder="璇峰~鍐欓偖绠卞湴鍧�"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 閫夋嫨瑙掕壊 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="閫夋嫨瑙掕壊:" prop="role">
+                                <el-select v-model="user.role" placeholder="璇烽�夋嫨鎵�灞炶鑹�" multiple collapse-tags>
+                                    <el-option v-for="item in roleList" :key="item.id" :label="item.name"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 鐢ㄦ埛绫诲瀷 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鐢ㄦ埛绫诲瀷:" prop="userType">
+                                <el-select v-model="user.userType" placeholder="璇烽�夋嫨鐢ㄦ埛绫诲瀷">
+                                    <el-option v-for="item in typeList" :key="item.id" :label="item.name"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 搴ф満/鍒嗘満 -->
+                    <div class="user-item sp-item">
+                        <div class="item-left">
+                            <el-form-item label="搴ф満/鍒嗘満:" prop="zjarea">
+                                <el-input v-model="user.zjarea" placeholder="鐢佃瘽鍖哄彿">
+                                </el-input>
+                            </el-form-item>
+                            <el-form-item prop="zjnumber" class="left-px">
+                                <el-input v-model="user.zjnumber" placeholder="鐢佃瘽鍙风爜">
+                                </el-input>
+                            </el-form-item>
+                            <el-form-item prop="zjother" class="left-px">
+                                <el-input v-model="user.zjother" placeholder="鍒嗘満鍙风爜">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 鎵�灞為儴闂� -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="鎵�灞為儴闂�:" prop="departmentId">
+                                <el-select v-model="user.departmentId" placeholder="璇烽�夋嫨鎵�灞為儴闂�" @change="getDepartName">
+                                    <el-option :value="mylabel">
+                                        <el-tree ref="tree" :check-strictly="true" :data="departList"
+                                            :props="defaultProps" show-checkbox @check-change="handleCheck"
+                                            default-expand-all node-key="id">
+                                        </el-tree>
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 褰撳墠鑱屽姟 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="褰撳墠鑱屽姟:" prop="jobTitle">
+                                <el-input v-model="user.jobTitle" placeholder="璇疯緭鍏ュ綋鍓嶈亴鍔�"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 濉啓鎵�灞瀖ac鍦板潃 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="濉啓鎵�灞瀖ac鍦板潃:" prop="mac">
+                                <el-input v-model="user.mac" placeholder="璇峰~鍐欐墍灞瀖ac鍦板潃"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <!-- 濉啓鎵�灞瀒p鍦板潃 -->
+                    <div class="user-item">
+                        <div class="item-left">
+                            <el-form-item class="optionItem" label="濉啓鎵�灞瀒p鍦板潃:" prop="ip">
+                                <el-input v-model="user.ip" placeholder="璇峰~鍐欐墍灞瀒p鍦板潃"></el-input>
+                            </el-form-item>
+                        </div>
+                        <div class="item-right"></div>
+                    </div>
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                            <el-button class="btn reset" @click.native.prevent="resetForm">閲嶇疆</el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+import { getTypeList } from '@/utils/helper'
+export default {
+    data() {
+        const validateNickname = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鎵�灞炲鍚嶄笉鑳戒负绌�"));
+            } else {
+                callback();
+            }
+        };
+        const validatePass = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖"));
+            } else {
+                const rep = /^\w+$/;
+                if (!rep.test(value)) {
+                    callback(new Error("瀵嗙爜鍙兘鏄互鏁板瓧銆�26涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎缁勬垚鐨勫瓧绗︿覆"));
+                } else {
+                    callback();
+                }
+            }
+        };
+        const validateTruename = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鐢ㄦ埛濮撳悕涓嶈兘涓虹┖"));
+            } else {
+                callback();
+            }
+        };
+        const validatePhone = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鎵嬫満鍙风爜涓嶈兘涓虹┖"));
+            } else {
+                const rep = /(^1[3|4|5|7|8|9]\d{9}$)|(^09\d{8}$)/
+                if (!rep.test(value)) {
+                    callback("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+                } else {
+                    callback();
+                }
+            }
+        };
+        const validateMail = (rule, value, callback) => {
+            if (value) {
+                const rep = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
+                if (!rep.test(value)) {
+                    callback(new Error("璇疯緭鍏ユ纭殑閭"))
+                } else {
+                    callback();
+                }
+            } else {
+                callback();
+            }
+        };
+        const validateRole = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鎵�灞炶鑹蹭笉鑳戒负绌�"));
+            } else {
+                callback()
+            }
+        };
+        const validateType = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鐢ㄦ埛绫诲瀷涓嶈兘涓虹┖"));
+            } else {
+                callback()
+            }
+        };
+        const validateDepartment = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("璇烽�夋嫨鐢ㄦ埛閮ㄩ棬"));
+            } else {
+                callback()
+            }
+        };
+        const validateWork = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error("鐢ㄦ埛褰撳墠鑱屽姟涓嶈兘涓虹┖"));
+            } else {
+                callback();
+            }
+        };
+        const validateMac = (rule, value, callback) => {
+            if (value) {
+                callback();
+            } else {
+                callback()
+            }
+        };
+        const validateIp = (rule, value, callback) => {
+            if (value) {
+                callback();
+            } else {
+                callback()
+            }
+        };
+        return {
+            user: {
+                nickName: '',
+                password: '',
+                username: '',
+                sex: 1,
+                isDy: 0,
+                mobile: '',
+                email: '',
+                role: null,
+                userType: null,
+                zjarea: '',
+                zjnumber: '',
+                zjother: '',
+                departmentId: null,
+                jobTitle: null,
+                mac: '',
+                ip: '',
+            },
+            createUserRules: {
+                nickName: [
+                    { required: true, trigger: "blur", validator: validateNickname },
+                ],
+                password: [
+                    { required: true, trigger: "blur", validator: validatePass },
+                ],
+                username: [
+                    { required: true, trigger: "blur", validator: validateTruename },
+                ],
+                sex: [
+                    { required: true, trigger: "blur" },
+                ],
+                isDy: [
+                    { required: true, trigger: "blur" },
+                ],
+                mobile: [
+                    { required: true, trigger: "blur", validator: validatePhone },
+                ],
+                email: [
+                    { required: true, trigger: "blur", validator: validateMail },
+                ],
+                role: [
+                    { required: true, trigger: "change", validator: validateRole },
+                ],
+                userType: [
+                    { required: true, trigger: "change", validator: validateType },
+                ],
+                zj: [
+                    { required: false, trigger: "blur" },
+                ],
+                departmentId: [
+                    { required: true, trigger: "change", validator: validateDepartment },
+                ],
+                jobTitle: [
+                    { required: true, trigger: "blur", validator: validateWork },
+                ],
+                mac: [
+                    { required: false, trigger: "blur", validator: validateMac },
+                ],
+                ip: [
+                    { required: false, trigger: "blur", validator: validateIp },
+                ],
+            },
+            roleList: [
+
+            ],
+            typeList: [
+
+            ],
+            departList: [],
+            mylabel: '',
+            defaultProps: {
+                children: 'children',
+                label: 'departName',
+                disabled: (data, node) => {
+                    if (node.level === 1 && node.childNodes.length !== 0) {
+                        return !data.leaf
+                    }
+                }
+            },
+            selectOrg: {
+                orgsid: []
+            },
+        }
+    },
+    created() {
+        // 鑾峰彇瑙掕壊鍒楄〃
+        this.getRoleList();
+        // 鑾峰彇鐢ㄦ埛绫诲瀷
+        this.getUserTypeList();
+        // 鑾峰彇閮ㄩ棬
+        this.getDepartList();
+    },
+    methods: {
+        // 鎻愪氦娉ㄥ唽
+        handleUser() {
+            this.$refs['user'].validate((valid) => {
+                console.log(valid);
+                if (valid) {
+                    const { user, selectOrg } = this;
+                    console.log(user);
+                    this.$axios.post('sccg/admin/register', {
+                        departmentId: selectOrg.orgsid[0],
+                        email: user.email,
+                        icon: '',
+                        isDy: `${user.isDy}`,
+                        jobTitle: user.jobTitle,
+                        mobile: user.mobile,
+                        note: '',
+                        roleIds: user.role,
+                        // nickName: user.nickName,
+                        sex: `${user.sex}`,
+                        password: user.password,
+                        userType: user.userType,
+                        username: user.username,
+                        zj: user.zjarea + `${user.zjnumber}` + user.zjother,
+                        nickName: user.nickName
+                        // departName:user.departName,
+                    }).then(res => {
+                        if (res.code === 200) {
+                            console.log(1);
+                            this.$message({
+                                type: 'success',
+                                message: res.message,
+                            })
+                            this.$emit('sendDialog', { flag: false });
+                        } else if (res.code === 500 && res.message === "鎿嶄綔澶辫触") {
+                            this.$message({
+                                type: 'warning',
+                                message: '璇ョ敤鎴峰凡娉ㄥ唽'
+                            })
+                        } else {
+                            this.$message({
+                                type: 'warning',
+                                message: res.message
+                            })
+                        }
+                    })
+                } else {
+                    return false
+                }
+            })
+        },
+        // 鑾峰彇瑙掕壊鍒楄〃
+        getRoleList() {
+            this.$axios({
+                method: 'get',
+                url: 'sccg/role/listAll',
+            })
+                .then(res => {
+                    this.roleList = res.data;
+                })
+        },
+        // 閲嶇疆琛ㄥ崟
+        resetForm() {
+            this.$refs['user'].resetFields();
+        },
+        // 鑾峰緱閮ㄩ棬鍚嶇О
+        getDepartName(data) {
+            this.departList.forEach(item => {
+                if (item.id === data) {
+                    this.user.departName = item.departName
+                }
+            })
+        },
+        // 鑾峰彇鐢ㄦ埛绫诲瀷
+        async getUserTypeList() {
+            this.typeList = await getTypeList(1, '07');
+        },
+        // 鑾峰彇閮ㄩ棬鏍�
+        getDepartList() {
+            this.$axios({
+                method: 'get',
+                url: 'sccg/depart/tree'
+            })
+                .then(res => {
+                    this.departList = res.data;
+                })
+        },
+        handleCheck(data, checked) {
+            this.user.departmentId = data.departName;
+            // 鑾峰彇褰撳墠閫夋嫨鐨刬d鍦ㄦ暟缁勪腑鐨勭储寮�
+            const indexs = this.selectOrg.orgsid.indexOf(data.id)
+            // 濡傛灉涓嶅瓨鍦ㄦ暟缁勪腑锛屽苟涓旀暟缁勪腑宸茬粡鏈変竴涓猧d骞朵笖checked涓簍rue鐨勬椂鍊欙紝浠h〃涓嶈兘鍐嶆閫夋嫨銆�
+            if (indexs < 0 && this.selectOrg.orgsid.length === 1 && checked) {
+                this.$message({
+                    message: '鍙兘閫夋嫨涓�涓儴闂紒',
+                    type: 'warning',
+                    showClose: true
+                })
+                // 璁剧疆宸查�夋嫨鐨勮妭鐐逛负false 寰堥噸瑕�
+                this.$refs.tree.setChecked(data, false)
+            } else if (this.selectOrg.orgsid.length === 0 && checked) {
+                // 鍙戠幇鏁扮粍涓虹┖ 骞朵笖鏄凡閫夋嫨
+                // 闃叉鏁扮粍鏈夊�硷紝棣栧厛娓呯┖锛屽啀push
+                this.selectOrg.orgsid = []
+                this.selectOrg.orgsid.push(data.id)
+            } else if (
+                indexs >= 0 &&
+                this.selectOrg.orgsid.length === 1 &&
+                !checked
+            ) {
+                // 鍐嶆鐩存帴杩涜璧嬪�间负绌烘搷浣�
+                this.selectOrg.orgsid = []
+                this.user.departmentId = '';
+            }
+        },
+    },
+    props: ['sendDialog']
+}
+</script>
+<style lang="scss" scoped>
+.createUser {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+        padding-top: 20px;
+
+        .mainContent {
+            display: flex;
+            // justify-content: center;
+            margin-top: 50px;
+            width: 100%;
+            &::v-deep .el-form-item__label {
+                color: #4b9bb7;
+            }
+
+            &::v-deep .el-input__inner {
+                background-color: #09152f;
+                border: 1px solid #17324c;
+            }
+
+            .el-form-item__content {
+                width: 400px;
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .sp-item {
+                .item-left{
+                    display: flex;
+                }
+            }
+
+            .user-item {
+                display: flex;
+                justify-content: space-between;
+                .item-left {
+                    width: 500px;
+                }
+                .item-right {
+                    line-height: 40px;
+                    color: #4b9bb7;
+                    font-size: 12px;
+                    // margin-left: 16px;
+                }
+
+                .left-px :deep(.el-form-item__content) {
+                    margin-left: 0px !important;
+                }
+            }
+
+            .optionBtn {
+                display: flex;
+                margin-top: 20px;
+
+                .btn {
+                    padding: 12px 50px;
+                }
+            }
+
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/systemSetting/device/grid/components/header/index.vue b/src/views/systemSetting/device/grid/components/header/index.vue
new file mode 100644
index 0000000..d5e5dea
--- /dev/null
+++ b/src/views/systemSetting/device/grid/components/header/index.vue
@@ -0,0 +1,110 @@
+<template>
+    <header>
+        <div class="headerContent">
+            <div class="search">
+                <span>绛涢�夋潯浠�:</span>
+                <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="search"></el-input>
+                <div class="findBtn">
+                    <el-button type="primary" @click="setSearch">鏌ヨ</el-button>
+                </div>
+            </div>
+            <div class="addUser">
+                <!-- :before-close="handleClose" -->
+                <el-button class="addBtn" type="primary" @click="dialogCreate = true">娣诲姞鐢ㄦ埛</el-button>
+                <el-dialog :visible.sync="dialogCreate" title="鏂板璐︽埛" width="60%" v-if="dialogCreate"
+                    :before-close="handleClose">
+                    <createUser @sendDialog="sendDialog" />
+                </el-dialog>
+            </div>
+        </div>
+    </header>
+</template>
+<script>
+import createUser from "../createUser";
+export default {
+    components: {
+        createUser,
+    },
+    data() {
+        return {
+            dialogCreate: false,
+            search: '',
+        }
+    },
+    methods: {
+        setSearch() {
+            this.$emit('getSearch', { text: this.search })
+        },
+        sendDialog(flag) {
+            console.log(flag);
+            this.dialogCreate = flag.flag;
+            this.$emit('setDialog', { flag: true })
+        },
+        handleClose(done) {
+            this.$confirm('纭鍏抽棴锛�')
+                .then(_ => {
+                    this.dialogCreate = false;
+                    done();
+                })
+                .catch(_ => { });
+        }
+    },
+    props: ['setDialog', 'getSearch', 'flag'],
+}
+</script>
+<style lang="scss" scoped>
+header {
+    background-color: #09152f;
+    border: 1pox solid #fff;
+
+    .headerContent {
+        padding: 0 40px;
+        display: flex;
+        line-height: 100px;
+        justify-content: space-between;
+        align-items: center;
+
+        .search {
+            display: flex;
+            justify-content: flex-start;
+
+            span {
+                flex: 1;
+            }
+
+            .el-input {
+                flex: 2;
+                color: #1d3f57;
+
+                &::v-deep .el-input__inner {
+                    background-color: #09152f;
+                    border: 1px solid #17324c;
+                }
+            }
+
+        }
+
+        .findBtn {
+            line-height: 100px;
+            margin-left: 15px;
+            display: flex;
+            align-items: center;
+            margin-top: -2px;
+
+            .el-button {
+                padding: 12px 25px;
+                border-radius: 20px;
+            }
+        }
+
+        .addBtn {
+            background-color: #eb5d01;
+            border: none;
+            border-radius: 20px;
+            padding: 12px 30px;
+        }
+
+
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/systemSetting/device/grid/components/main/index.vue b/src/views/systemSetting/device/grid/components/main/index.vue
new file mode 100644
index 0000000..4ccec1b
--- /dev/null
+++ b/src/views/systemSetting/device/grid/components/main/index.vue
@@ -0,0 +1,508 @@
+<template>
+    <main>
+        <div class="mainContent">
+            <!-- 鏁版嵁灞曠ず -->
+            <el-table ref="multipleTable"
+                :header-cell-style="{background:'#06122c','font-size':'12px',color:'#4b9bb7','font-weight':'650','line-height':'45px'}"
+                :data="tableData" style="width: 100%" :row-class-name="tableRowClassName"
+                @selection-change="tableChange">
+                <el-table-column type="selection" min-width="5">
+                </el-table-column>
+                <el-table-column label="鐢ㄦ埛ID" min-width="6">
+                    <template slot-scope="scope">{{ scope.row.id }}</template>
+                </el-table-column>
+                <el-table-column prop="nickName" label="鐢ㄦ埛鍚嶇О" min-width="10">
+                </el-table-column>
+                <el-table-column prop="username" label="鎵�灞炲鍚�" min-width="8">
+                </el-table-column>
+                <el-table-column prop="mobile" label="鑱旂郴鏂瑰紡" min-width="7">
+                </el-table-column>
+                <el-table-column prop="note" label="鎵�灞炶鑹�" min-width="8">
+                    <template slot-scope="scope">
+                        <span>{{filterRole(scope.row.roles)}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="departName" label="鎵�灞為儴闂�" min-width="8">
+                </el-table-column>
+                <el-table-column prop="jobTitle" label="鎵�灞炶亴鍔�" min-width="8">
+                </el-table-column>
+                <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="10">
+                    <template slot-scope="scope">
+                        <span>{{changeTime(scope.row)}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="status" label="鍚敤" min-width="5">
+                    <template slot-scope="scope">
+                        <!-- @change="handleChangeStatus(scope.row)" -->
+                        <el-switch class="switchStyle" v-model="scope.row.status"
+                            active-color="#3fef9a" inactive-color="#000212" disabled>
+                        </el-switch>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="operation" label="鎿嶄綔" min-width="20">
+                    <template slot-scope="scope">
+                        <div class="operation">
+                            <span @click="handleChangeRole(scope.row,'role')">淇敼瑙掕壊</span>
+                            <span class="line">|</span>
+                            <span @click="handleFind(scope.row)">鏌ョ湅</span>
+                            <span class="line">|</span>
+                            <span @click="handleChangeRole(scope.row,'password')">淇敼瀵嗙爜</span>
+                            <span class="line">|</span>
+                            <span @click="handleDelete(scope.row)">鍒犻櫎</span>
+                            <span class="line">|</span>
+                            <span @click="handleChangeRole(scope.row,'depart')">淇敼閮ㄩ棬</span>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <!-- 鏌ョ湅椤甸潰 -->
+            <el-dialog :visible.sync="dialogView" width="45%" v-if="dialogView"
+                title="鏌ョ湅鐢ㄦ埛淇℃伅">
+                <MyView :userInfo=userInfo></MyView>
+            </el-dialog>
+            <!-- 淇敼椤甸潰 -->
+            <el-dialog :visible.sync="dialogUpdate" width="45%" v-if="dialogUpdate"
+                :title="updateFlag ? flag.role ? '淇敼鐢ㄦ埛瑙掕壊淇℃伅' : flag.depart ? '淇敼鐢ㄦ埛閮ㄩ棬淇℃伅': '淇敼鐢ㄦ埛瀵嗙爜' :''"
+                :before-close="handleClose">
+                <updateUser :updateFlag="updateFlag" :userInfo=userInfo :flag=flag @closeDialog="closeDialog"
+                    :getUserList="getUserList" v-if="!flag.password" />
+                <MyPwd v-else :userInfo=userInfo @closeDialog="closeDialog"></MyPwd>
+            </el-dialog>
+            <!-- tools -->
+            <div class="tools">
+                <div class="funs">
+                    <div class="funsItem funs-sp">
+                        <el-checkbox v-model="all" @change="selectAll()">鍏ㄩ��</el-checkbox>
+                    </div>
+                    <div class="funsItem funs-sp">
+                        <el-checkbox v-model="unsame" @change="disSame(tableData)">鍙嶉��</el-checkbox>
+                    </div>
+                    <div class="funsItem">
+                        <el-select v-model="myIdx" placeholder="鎵归噺鎿嶄綔" @change="selectChange">
+                            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"
+                                :disabled="item.disabled">
+                            </el-option>
+                        </el-select>
+                    </div>
+                </div>
+                <div class="pagination">
+                    <el-pagination background :current-page="currentPage" layout="prev, pager, next" :total="totalNum"
+                        :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev"
+                        @next-click="handleNext">
+                    </el-pagination>
+                </div>
+            </div>
+        </div>
+    </main>
+</template>
+<script>
+import helper from '@/utils/mydate'
+import updateUser from '../updateUser';
+import MyPwd from '../password'
+import MyView from '../myView'
+export default {
+    components: {
+        updateUser, MyPwd,MyView
+    },
+    data() {
+        return {
+            tableData: [],
+            search: "",
+            dialogUpdate: false,
+            dialogView:false,
+            updateFlag: false,
+            userInfo: '',
+            totalNum: 0,
+            pageSize: 10,
+            currentPage: 1,
+            renderFlag: false,
+            flag: {
+                role: false,
+                password: false,
+                depart: false,
+            },
+            all: false,
+            unsame: false,
+            myIdx: 0,
+            preMyIdx: 0,
+            options: [
+                {
+                    value: 0,
+                    label: '鎵归噺鎿嶄綔',
+                    disabled: true,
+                },
+                {
+                    value: 1,
+                    label: '鎵归噺鍚敤',
+                },
+                {
+                    value: 2,
+                    label: '鎵归噺绂佺敤',
+                },
+                {
+                    value: 3,
+                    label: '鎵归噺鍒犻櫎',
+                }
+            ],
+            tempList: []
+        }
+    },
+    created() {
+        this.getUserList();
+    },
+    methods: {
+        async selectChange(list) {
+            console.log(this.tempList);
+            if (this.tempList.length !== 0) {
+                this.preMyIdx = list;
+                if (list === 3) {
+                    await this.mulDelte(this.tempList);
+                } else if (list === 2) {
+                    await this.mulUpdateStatus(this.tempList, 0);
+                } else {
+                    await this.mulUpdateStatus(this.tempList, 1);
+                }
+                this.myIdx = 0;
+            } else {
+                this.myIdx = this.preMyIdx;
+                this.$message({
+                    type: 'warning',
+                    message: '鎮ㄨ繕娌¢�変腑浠讳綍鏁版嵁',
+                })
+            }
+        },
+        tableChange(list) {
+            this.tempList = [];
+            list.forEach(item => {
+                this.tempList.push(item.id);
+            })
+            if (list.length === this.tableData.length) {
+                this.all = true;
+            } else {
+                this.all = false
+            }
+        },
+        // 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅
+        mulDelte(idArr) {
+            console.log(idArr);
+            this.$confirm("鎮ㄧ‘瀹氳杩涜鎵归噺鍒犻櫎鐢ㄦ埛鍚�?")
+                .then(_ => {
+                    this.$axios({
+                        method: 'post',
+                        url: 'sccg/admin/deleteBatch?ids=' + idArr,
+                    })
+                        .then(res => {
+                            if (res.code === 200) {
+                                this.$message({
+                                    type: 'success',
+                                    message: '鍒犻櫎鐢ㄦ埛淇℃伅鎴愬姛',
+                                })
+                                this.getUserList();
+                            } else {
+                                this.$message({
+                                    type: 'error',
+                                    message: res.message
+                                })
+                            }
+                            console.log(res);
+                        })
+                })
+                .catch(err => { console.log(err) })
+        },
+        // 鎵归噺淇敼璐﹀彿
+        mulUpdateStatus(idArr, flag) {
+            console.log(flag);
+            this.$confirm(flag === 1 ? "鎮ㄧ‘瀹氳杩涜鎵归噺鍚敤鐢ㄦ埛鍚�?" : '鎮ㄧ‘瀹氳杩涜鎵归噺绂佺敤鐢ㄦ埛鍚�?')
+                .then(_ => {
+                    this.$axios({
+                        method: 'post',
+                        url: 'sccg/admin/updateStatusBatch?ids=' + idArr + '&status=' + flag,
+                    })
+                        .then(res => {
+                            if (res.code === 200) {
+                                this.$message({
+                                    type: 'success',
+                                    message: '鏇存敼鐢ㄦ埛鐘舵�佹垚鍔�',
+                                })
+                                this.getUserList();
+                            } else {
+                                this.$message({
+                                    type: 'error',
+                                    message: res.message
+                                })
+                            }
+                            console.log(res);
+                        })
+                })
+                .catch(err => { console.log(err) })
+        },
+        changeTime({ createTime }) {
+            return helper(createTime);
+        },
+        selectAll() {
+            this.$refs.multipleTable.toggleAllSelection();
+        },
+        disSame(list) {
+            list.forEach(row => {
+                this.$refs.multipleTable.toggleRowSelection(row)
+            })
+        },
+        // 鍒犻櫎鐢ㄦ埛
+        handleDelete({ id }) {
+            this.$confirm('纭鍒犻櫎锛�').then(_ => {
+                this.$axios({
+                    method: 'post',
+                    url: 'sccg/admin/delete/' + id,
+                }).then(res => {
+                    console.log(res);
+                    this.$message({
+                        message: res.message,
+                        type: 'success'
+                    })
+                    this.getUserList();
+                })
+            }).catch(_ => { })
+        },
+        closeDialog({ flag }) {
+            this.dialogUpdate = flag;
+            this.getUserList();
+        },
+        handleClose(done) {
+            if (this.updateFlag) {
+                this.$confirm('纭鍏抽棴锛�')
+                    .then(_ => {
+                        this.dialogUpdate = false;
+                        this.updateFlag = false;
+                        done();
+                    })
+                    .catch(_ => { });
+            }else{
+                done();
+            }
+        },
+        // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+        changeCurrentPage(page) {
+            this.currentPage = page;
+            this.getUserList();
+        },
+        // 涓婁竴椤电偣鍑讳簨浠�
+        handlePrev(page) {
+            this.currentPage = page;
+            this.getUserList();
+        },
+        // 涓嬩竴椤电偣鍑讳簨浠�
+        handleNext(page) {
+            this.currentPage = page;
+            this.getUserList();
+        },
+        // 淇敼瑙掕壊
+        handleChangeRole(obj, mykey) {
+            this.dialogUpdate = true;
+            this.updateFlag = true;
+            for (let key in this.flag) {
+                if (key == mykey) {
+                    this.flag[key] = true;
+                } else {
+                    this.flag[key] = false;
+                }
+            }
+            this.userInfo = obj;
+        },
+        // 淇敼鐢ㄦ埛鐘舵��
+        handleChangeStatus(obj) {
+            let { id, status } = obj;
+            status == true ? status = 1 : status = 0;
+            this.$axios.post(`sccg/admin/updateStatus/` + id + '?status=' + status).then(res => {
+                console.log(res);
+            })
+        },
+        // 鑾峰彇鐢ㄦ埛鍒楄〃
+        getUserList() {
+            const that = this;
+            const { currentPage, pageSize, search } = this;
+            // 鑾峰彇鎵�鏈夌敤鎴蜂俊鎭�佺敤鎴锋煡璇�(鏆傛椂鏀寔鐢佃瘽鍙风爜)
+            this.$axios.get(`sccg/admin/list?keyword=${search}&current=${currentPage}&pageSize=${pageSize}`).then(res => {
+                if (res.code === 200) {
+                    res.data.records.forEach(item => {
+                        item.status == 1 ? item.status = true : item.status = false;
+                    })
+                    that.totalNum = res.data.total;
+                    that.tableData = res.data.records;
+                    this.renderFlag = true;
+                }
+            })
+        },
+        // 鏌ョ湅鐢ㄦ埛淇℃伅(涓嶅彲淇敼)
+        handleFind(rowData) {
+            this.dialogView = true;
+            this.userInfo = rowData;
+        },
+        // 璁剧疆琛ㄦ牸鏂戦┈绾�
+        tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 == 0) {
+                return 'warning-row';
+            } else {
+                return 'success-row';
+            }
+            return '';
+        },
+        // 澶勭悊鐢ㄦ埛鎵�灞炶鑹�
+        filterRole(arr){
+            let str = '';
+            if(arr.length === 0){
+                return;
+            }
+            arr.forEach((item,index)=>{
+                if(item!==null){
+                    if(index<arr.length-1){
+                        str+=item.name +',';
+                    }else{
+                        str+=item.name;
+                    }
+                }
+            })
+            return str;
+        }
+    },
+    props: ['refresh', 'keyword', 'resetFresh'],
+    watch: {
+        refresh: {
+            handler(newValue, oldValue) {
+                if (newValue == true) {
+                    this.search = '';
+                    if (this.keyword != '') {
+                        this.search = this.keyword;
+                    }
+                    this.currentPage = 1;
+                    this.getUserList();
+                    this.$emit('resetFresh', { flag: false })
+                }
+            },
+            immediate: true
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+main {
+    background-color: #09152f;
+    margin-top: 20px;
+    padding-bottom: 50px;
+    border: 1pox solid #fff;
+
+    .mainTitle {
+        line-height:60px;
+    }
+
+    .tools {
+        display : flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 0 20px;
+
+        .funs {
+            display: flex;
+            .funs-sp{
+                border: 1px solid #17324c;
+            }
+            .funsItem {
+                line-height: 28px;
+                display: flex;
+                align-items: center;
+                border-radius: 4px;
+                font-size: 12px;
+                margin-left: 10px;
+
+                .el-checkbox {
+                    width: 80px;
+                    padding: 0 10px;
+                }
+
+                .el-select {
+                    width: 120px;
+                }
+
+                &::v-deep .el-input__inner {
+                    border: none;
+                    background-color: #09152f;
+                }
+
+                &:hover {
+                    border: 1px solid #4b9bb7;
+                }
+
+                &:hover .el-checkbox {
+                    color: #4b9bb7;
+                }
+            }
+
+        }
+
+        .pagination {
+            margin-top: 50px;
+            display: flex;
+            line-height: 50px;
+            justify-content: center;
+
+            .el-pagination {
+
+                &::v-deep li,
+                &::v-deep .btn-prev,
+                &::v-deep .btn-next {
+                    background-color: #071f39;
+                    color: #4b9bb7;
+                }
+
+                &::v-deep .active {
+                    background-color: #409eff;
+                    color: #fff;
+                }
+            }
+        }
+    }
+
+    .el-table {
+        color: #4b9bb7;
+        font-size: 10px;
+        .operation {
+            display: flex;
+            font-size: 10px;
+            .line {
+                padding: 0 1px;
+            }
+
+            span:hover {
+                cursor: pointer;
+            }
+        }
+    }
+    // &::v-deep .switchStyle .el-switch__label {
+    //     position: absolute;
+    //     display: none;
+    //     color: #fff;
+    // }
+
+    // &::v-deep .el-switch__core {
+    //     background-color: rgba(166, 166, 166, 1);
+    // }
+
+    // &::v-deep .switchStyle .el-switch__label--left {
+    //     z-index: 9;
+    //     left: 20px;
+    // }
+
+    // &::v-deep .switchStyle .el-switch__label--right {
+    //     z-index: 9;
+    //     left: 4px;
+    // }
+
+    // &::v-deep .switchStyle .el-switch__label.is-active {
+    //     display: block;
+    // }
+
+    // &::v-deep .switchStyle.el-switch .el-switch__core,
+    // &::v-deep .el-switch .el-switch__label {
+    //     width: 56px !important;
+    // }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/systemSetting/device/grid/components/myView/index.vue b/src/views/systemSetting/device/grid/components/myView/index.vue
new file mode 100644
index 0000000..8608360
--- /dev/null
+++ b/src/views/systemSetting/device/grid/components/myView/index.vue
@@ -0,0 +1,202 @@
+<template>
+    <div class="updateUser">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="user" :rules="createUserRules"
+                    label-position="right">
+                    <!-- 鐢ㄦ埛鍚嶇О -->
+                    <el-form-item class="optionItem" label="鐢ㄦ埛鍚嶇О:" prop="username">
+                        <el-input v-model="user.username" placeholder="濉啓鐢ㄦ埛鍚嶇О" disabled></el-input>
+                    </el-form-item>
+                    <!-- 鐢ㄦ埛瀵嗙爜 -->
+                    <el-form-item class="optionItems" label="鐢ㄦ埛瀵嗙爜:" prop="password">
+                        <el-input v-model="user.password" type="password" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�" disabled>
+                        </el-input>
+                    </el-form-item>
+                    <!-- 鎵�灞炵敤鎴峰鍚� -->
+                    <el-form-item class="optionItem" label="鎵�灞炵敤鎴峰鍚�:" prop="nickName">
+                        <el-input v-model="user.nickName" placeholder="璇峰~鍐欑敤鎴峰鍚�" disabled></el-input>
+                    </el-form-item>
+                    <!-- 鎬у埆 -->
+                    <el-form-item class="optionItem" label="鎬у埆:" prop="sex">
+                        <el-radio-group v-model="user.sex" disabled>
+                            <el-radio :label="1">鐢�</el-radio>
+                            <el-radio :label="0">濂�</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                    <!-- 鏄惁鍏氬憳 -->
+                    <el-form-item class="optionItem" label="鏄惁鍏氬憳:" prop="isDy">
+                        <el-radio-group v-model="user.isDy" disabled>
+                            <el-radio :label="1">鏄�</el-radio>
+                            <el-radio :label="0">鍚�</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                    <!-- 鎵�灞炴墜鏈哄彿鐮� -->
+                    <el-form-item class="optionItem" label="鎵�灞炴墜鏈哄彿鐮�:" prop="mobile">
+                        <el-input v-model="user.mobile" placeholder="璇峰~鍐欐墜鏈哄彿鐮�" disabled></el-input>
+                    </el-form-item>
+                    <!-- 閭鍦板潃 -->
+                    <el-form-item class="optionItem" label="閭鍦板潃:" prop="email">
+                        <el-input v-model="user.email" placeholder="璇峰~鍐欓偖绠卞湴鍧�" disabled></el-input>
+                    </el-form-item>
+                    <!-- 閫夋嫨瑙掕壊 -->
+                    <el-form-item class="optionItem" label="閫夋嫨瑙掕壊:" prop="role">
+                        <el-select v-model="user.role" placeholder="璇烽�夋嫨鎵�灞炶鑹�" multiple collapse-tags
+                        disabled>
+                            <el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 鐢ㄦ埛绫诲瀷 -->
+                    <el-form-item class="optionItem" label="鐢ㄦ埛绫诲瀷:" prop="userType">
+                        <el-select v-model="user.userType" placeholder="璇烽�夋嫨鐢ㄦ埛绫诲瀷" disabled>
+                            <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 鎵�灞為儴闂� -->
+                    <el-form-item class="optionItem" label="鎵�灞為儴闂�:" prop="departmentId">
+                        <el-input  v-model="user.departName"></el-input>
+                    </el-form-item>
+                    <!-- 褰撳墠鑱屽姟 -->
+                    <el-form-item class="optionItem" label="褰撳墠鑱屽姟:" prop="jobTitle">
+                        <el-input v-model="user.jobTitle" placeholder="璇疯緭鍏ュ綋鍓嶈亴鍔�" disabled></el-input>
+                    </el-form-item>
+                    <!-- 濉啓鎵�灞瀖ac鍦板潃 -->
+                    <el-form-item class="optionItem" label="濉啓鎵�灞瀖ac鍦板潃:" prop="mac">
+                        <el-input v-model="user.mac" placeholder="璇峰~鍐欐墍灞瀖ac鍦板潃" disabled></el-input>
+                    </el-form-item>
+                    <!-- 濉啓鎵�灞瀒p鍦板潃 -->
+                    <el-form-item class="optionItem" label="濉啓鎵�灞瀒p鍦板潃:" prop="ip">
+                        <el-input v-model="user.ip" placeholder="璇峰~鍐欐墍灞瀒p鍦板潃" disabled></el-input>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            user: {
+            },
+            createUserRules: {
+            },
+            roleList: [
+               
+            ],
+            typeList: [],
+            departList: [],
+        }
+    },
+    created() {
+        const that = this;
+        this.user = JSON.parse(JSON.stringify(that.userInfo));
+        this.user.departName  = this.user.departName ? this.user.departName : '鏆傛棤鎵�灞為儴闂�'
+        // 鑾峰彇鎵�鏈夎鑹插垪琛�
+        this.getRoleList();
+        // 鑾峰彇褰撳墠鐢ㄦ埛瑙掕壊鍒楄〃
+        this.getUserRole(this.user.id)
+        // 鑾峰彇鍏ㄩ儴閮ㄩ棬鍒楄〃
+        this.$axios.get('/sccg/depart/tree').then(res => {
+            this.departList = res.data;
+        })
+    },
+    methods: {
+        // 鑾峰彇瑙掕壊鍒楄〃
+        getRoleList() {
+            this.$axios({
+                method: 'get',
+                url: 'sccg/role/listAll',
+            })
+                .then(res => {
+                    this.roleList = res.data;
+                })
+        },
+        // 鑾峰彇鐢ㄦ埛鐨勮鑹插垪琛�
+        getUserRole(id) {
+            this.$axios({
+                method: 'get',
+                url: `sccg/admin/role/${id}`
+            })
+                .then(res => {
+                    const arr = [];
+                    res.data.forEach(item => {
+                        arr.push(item.id);
+                    })
+                    this.user.role = arr;
+                })
+        },
+    },
+    props: ['userInfo']
+}
+</script>
+<style lang="scss" scoped>
+.updateUser {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    :deep(.el-tag) {
+        background-color: #09152f;
+    }
+
+    .el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
+        background-color: #09152f;
+        color: #4b9bb7;
+    }
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+            .optionBtn {
+                display: flex;
+                margin-top: 20px;
+
+                .btn {
+                    padding: 12px 50px;
+                }
+            }
+
+        }
+    }
+}
+
+.updateUser::v-deep .el-form-item__label {
+    color: #4b9bb7;
+}
+
+.updateUser::v-deep .el-input__inner {
+    background-color: #09152f;
+    border: 1px solid #17324c;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/systemSetting/device/grid/components/password/index.vue b/src/views/systemSetting/device/grid/components/password/index.vue
new file mode 100644
index 0000000..90e5ed3
--- /dev/null
+++ b/src/views/systemSetting/device/grid/components/password/index.vue
@@ -0,0 +1,145 @@
+<template>
+    <div class="password">
+        <el-form ref="pwd" label-width="140px" autoComplete="on" :model="user" :rules="passrules">
+            <!-- 鍒濆瀵嗙爜 -->
+            <el-form-item class="optionItem" label="鍒濆瀵嗙爜:" prop="password">
+                <el-input v-model="user.password" type="password" placeholder="璇峰~鍐欏垵濮嬪瘑鐮�"></el-input>
+            </el-form-item>
+            <!-- 鏂板瘑鐮� -->
+            <el-form-item class="optionItem" label="鏂板瘑鐮�:" prop="newPwd">
+                <el-input v-model="user.newPwd" type="password" placeholder="璇峰~鍐欐柊瀵嗙爜"></el-input>
+            </el-form-item>
+            <!-- 鏂板瘑鐮� -->
+            <el-form-item class="optionItem" label="纭鏂板瘑鐮�:" prop="secondPwd">
+                <el-input v-model="user.secondPwd" type="password" placeholder="纭鎮ㄧ殑鏂板瘑鐮�"></el-input>
+            </el-form-item>
+
+        </el-form>
+        <div class="pwd-footer">
+            <el-button @click="resetForm">鍙栨秷</el-button>
+            <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        const checkPwd = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error('鍒濆瀵嗙爜涓嶈兘涓虹┖'))
+            } else {
+                callback();
+            }
+        }
+        const checkNewPwd = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error('鏂板瘑鐮佷笉鑳戒负绌�'))
+            }else if(value === this.user.password){
+                callback(new Error('鏂板瘑鐮佷笉鑳藉拰鏃у瘑鐮佷竴鏍�'))
+            } else {
+                callback();
+            }
+        }
+        const checkSame = (rule, value, callback) => {
+            if (!value) {
+                callback(new Error('纭瀵嗙爜涓嶈兘涓虹┖'))
+            } else if (value !== this.user.newPwd) {
+                console.log(111);
+                callback(new Error('鎮ㄨ緭鍏ョ殑涓ゆ瀵嗙爜缁撴灉涓嶅悓'));
+            } else {
+
+                callback();
+            }
+        }
+        return {
+            user: {
+                password: '',
+                secondPwd: '',
+                newPwd: '',
+            },
+            passrules: {
+                password: [
+                    {
+                        required: true,
+                        trigger: 'blur',
+                        validator: checkPwd
+                    },
+                ],
+                secondPwd: [
+                    {
+                        required: true,
+                        trigger: 'blur',
+                        validator: checkSame
+                    }
+                ],
+                newPwd: [
+                    {
+                        required: true,
+                        trigger: 'blur',
+                        validator: checkNewPwd
+                    }
+                ]
+            }
+        }
+    },
+    props: ['userInfo', 'closeDialog'],
+    created() {
+
+    },
+    methods: {
+        // 鎻愪氦
+        handleSubmit() {
+            const { userInfo,user } = this;
+            this.$refs.pwd.validate((valid) => {
+                if (valid) {
+                    this.$axios({
+                        method:'post',
+                        url:'sccg/admin/updatePassword',
+                        data:{
+                            newPassword:user.newPwd,
+                            oldPassword:user.password,
+                            username:userInfo.username
+                        }
+                    })
+                    .then(res=>{
+                        if(res.code === 200){
+                            this.$emit('closeDialog',{flag:false});
+                            this.$message({
+                                type:'success',
+                                message:'瀵嗙爜淇敼鎴愬姛'
+                            })
+                        }else{
+                            this.$message({
+                                type:'warning',
+                                message:res.message
+                            })
+                        }
+                    })
+                } else {
+                    return false;
+                }
+            })
+        },
+        // 娓呯┖琛ㄥ崟
+        resetForm() {
+            this.$refs.pwd.resetFields();
+            this.$emit('closeDialog',{flag:false});
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.password {
+    padding: 50px 100px;
+
+    ::v-deep .el-input__inner {
+        background-color: #09152f;
+        border: 1px solid #17324c;
+    }
+
+    .pwd-footer {
+        display: flex;
+        justify-content: center;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/systemSetting/device/grid/components/updateUser/index.vue b/src/views/systemSetting/device/grid/components/updateUser/index.vue
new file mode 100644
index 0000000..80a74ab
--- /dev/null
+++ b/src/views/systemSetting/device/grid/components/updateUser/index.vue
@@ -0,0 +1,291 @@
+<template>
+    <div class="updateUser">
+        <main>
+            <div class="mainContent">
+                <el-form ref="user" label-width="140px" autoComplete="on" :model="user" :rules="createUserRules"
+                    label-position="right">
+                    <!-- 閫夋嫨瑙掕壊 -->
+                    <el-form-item class="optionItem" label="閫夋嫨瑙掕壊:" prop="role" v-if="flag.role">
+                        <el-select v-model="user.role" placeholder="璇烽�夋嫨鎵�灞炶鑹�" multiple collapse-tags>
+                            <el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <!-- 鎵�灞為儴闂� -->
+                    <el-form-item class="optionItem" label="鎵�灞為儴闂�:" prop="departmentId" v-else>
+                        <el-select v-model="user.departName" placeholder="璇烽�夋嫨鎵�灞為儴闂�" :disabled="!flag.depart">
+                            <el-option :value="mylabel">
+                                <el-tree ref="tree" :check-strictly="true" :data="departList" :props="defaultProps"
+                                    show-checkbox @check-change="handleCheck"
+                                    :default-checked-keys="[selectOrg.orgsid[0],]" default-expand-all node-key="id">
+                                </el-tree>
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item>
+                        <div class="optionBtn">
+                            <el-button type="primary" class="btn submit" @click.native.prevent="handleUser">鎻愪氦
+                            </el-button>
+                        </div>
+                    </el-form-item>
+                </el-form>
+
+            </div>
+        </main>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            user: {
+            },
+            createUserRules: {
+            },
+            roleList: [
+
+            ],
+            departList: [],
+            mylabel: "",
+            defaultProps: {
+                children: "children",
+                label: "departName",
+            },
+            selectOrg: {
+                orgsid: [],
+            },
+            tempName: '',
+            tempRole: []
+        }
+    },
+    created() {
+        this.user = JSON.parse(JSON.stringify(this.userInfo));
+        this.tempName = this.user.departName;
+        this.selectOrg.orgsid.push(this.user.departmentId);
+        // 鑾峰彇鎵�鏈夎鑹插垪琛�
+        this.getRoleList();
+        // 鑾峰彇褰撳墠鐢ㄦ埛瑙掕壊鍒楄〃
+        this.getUserRole(this.user.id)
+        // 鑾峰彇鍏ㄩ儴閮ㄩ棬鍒楄〃
+        this.$axios.get('/sccg/depart/tree').then(res => {
+            this.departList = res.data;
+        })
+    },
+    methods: {
+        // 淇敼閮ㄩ棬
+        changeDepart(data) {
+            this.departList.forEach(item => {
+                if (item.id === data) {
+                    this.user.departName = item.departName;
+                }
+            })
+        },
+        // 淇敼鐢ㄦ埛淇℃伅
+        handleUser() {
+            const { flag, user, tempName, selectOrg, tempRole, isArraySame } = this;
+            let umsDepartManage={userId:user.id,departId:selectOrg.orgsid[0]}
+            this.$refs.user.validate((valid) => {
+                if (valid) {
+                    user.isDy = `${user.isDy}`;
+                    if (flag.depart) {
+                        if (tempName === user.departName) {
+                            this.$message({
+                                type: 'warning',
+                                message: '鎮ㄧ殑閮ㄩ棬杩樻湭鏇存敼'
+                            })
+                        } else {
+                            if (user.departName) {
+                                this.$axios({
+                                    method: 'put',
+                                    url: `/sccg/depart/user_update_depart?userId=`+user.id+'&departId='+selectOrg.orgsid[0]
+                                })
+                                    .then(res => {
+                                        this.$message({
+                                            type: res.code === 200 ? 'success' : 'warning',
+                                            message: res.message,
+                                        })
+                                        this.getUserList();
+                                        this.$emit('closeDialog', { flag: false });
+                                    })
+                            } else {
+                                this.$message({
+                                    type: 'warning',
+                                    message: '鐢ㄦ埛閮ㄩ棬涓嶈兘涓虹┖'
+                                })
+                            }
+                        }
+
+                    } else {
+                        if (user.role.length === 0) {
+                            this.$message({
+                                type: 'warning',
+                                message: '鐢ㄦ埛瑙掕壊涓嶈兘涓虹┖',
+                            })
+                        }
+                        else if (isArraySame(tempRole, user.role) && tempRole.length === user.role.length) {
+                            this.$message({
+                                type: 'warning',
+                                message: '鎮ㄨ繕鏈洿鏀硅鑹�',
+                            })
+                        }
+                        else {
+                            this.$axios({
+                                method: 'post',
+                                url: 'sccg/admin/role/update?adminId=' + user.id + '&roleIds=' + user.role,
+                            })
+                                .then(res => {
+                                    this.$message({
+                                        type: res.code === 200 ? 'success' : 'warning',
+                                        message: res.message,
+                                    })
+                                    this.getUserList();
+                                    this.$emit('closeDialog', { flag: false });
+                                })
+                        }
+                    }
+                } else {
+                    return false;
+                }
+            })
+        },
+        // 鑾峰彇瑙掕壊鍒楄〃
+        getRoleList() {
+            this.$axios({
+                method: 'get',
+                url: 'sccg/role/listAll',
+            })
+                .then(res => {
+                    this.roleList = res.data;
+                })
+        },
+        // 鑾峰彇鐢ㄦ埛鐨勮鑹插垪琛�
+        getUserRole(id) {
+            this.$axios({
+                method: 'get',
+                url: `sccg/admin/role/${id}`
+            })
+                .then(res => {
+                    const arr = [];
+                    res.data.forEach(item => {
+                        arr.push(item.id);
+                    })
+                    this.user.role = arr;
+                    this.tempRole = arr;
+                })
+        },
+        // 閮ㄩ棬淇敼
+        handleCheck(data, checked) {
+            console.log(this.selectOrg.orgsid[0])
+            this.user.departName = data.departName;
+            // 鑾峰彇褰撳墠閫夋嫨鐨刬d鍦ㄦ暟缁勪腑鐨勭储寮�
+            const indexs = this.selectOrg.orgsid.indexOf(data.id);
+            // 濡傛灉涓嶅瓨鍦ㄦ暟缁勪腑锛屽苟涓旀暟缁勪腑宸茬粡鏈変竴涓猧d骞朵笖checked涓簍rue鐨勬椂鍊欙紝浠h〃涓嶈兘鍐嶆閫夋嫨銆�
+            if (indexs < 0 && this.selectOrg.orgsid.length === 1 && checked) {
+                this.$message({
+                    message: "鍙兘閫夋嫨涓�涓儴闂紒",
+                    type: "warning",
+                    showClose: true,
+                });
+                // 璁剧疆宸查�夋嫨鐨勮妭鐐逛负false 寰堥噸瑕�
+                this.$refs.tree.setChecked(data, false);
+            } else if (this.selectOrg.orgsid.length === 0 && checked) {
+                // 鍙戠幇鏁扮粍涓虹┖ 骞朵笖鏄凡閫夋嫨
+                // 闃叉鏁扮粍鏈夊�硷紝棣栧厛娓呯┖锛屽啀push
+                this.selectOrg.orgsid = [];
+                this.selectOrg.orgsid.push(data.id);
+            } else if (
+                indexs >= 0 &&
+                this.selectOrg.orgsid.length === 1 &&
+                !checked
+            ) {
+                // 鍐嶆鐩存帴杩涜璧嬪�间负绌烘搷浣�
+                this.selectOrg.orgsid = [];
+                this.user.departName = ''
+            }
+        },
+        // 鍒ゆ柇鏁扮粍鏄惁鐩哥瓑
+        isArraySame(arr1, arr2) {
+            let flag = true
+            arr1.sort((a, b) => a - b)
+            arr2.sort((a, b) => a - b)
+            arr1.forEach(item => {
+                arr2.forEach(child => {
+                    if (item !== child) {
+                        flag = false
+                    }
+                })
+            })
+            return flag
+        }
+    },
+    props: ['userInfo', 'flag', 'closeDialog', 'getUserList']
+}
+</script>
+<style lang="scss" scoped>
+.updateUser {
+    border-radius: 1px;
+    background-color: #09152f;
+
+    :deep(.el-tag) {
+        background-color: #09152f;
+    }
+
+    .el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
+        background-color: #09152f;
+        color: #4b9bb7;
+    }
+
+    main {
+        text-align: left;
+        padding: 0 55px;
+        background-color: #09152f;
+        padding-bottom: 50px;
+
+        .mainContent {
+            display: flex;
+            justify-content: center;
+            padding-top: 50px;
+
+            .el-form-item__content {
+                width: 400px;
+
+                .el-select {
+                    width: 100%;
+                }
+            }
+
+            .optionHandleSp {
+                display: flex;
+
+                .areaNumber,
+                .moreNumber {
+                    flex: 1;
+                }
+
+                .telNumber {
+                    flex: 2;
+                }
+            }
+
+            .optionBtn {
+                display: flex;
+                margin-top: 20px;
+
+                .btn {
+                    padding: 12px 50px;
+                }
+            }
+
+        }
+    }
+}
+
+.updateUser::v-deep .el-form-item__label {
+    color: #4b9bb7;
+}
+
+.updateUser::v-deep .el-input__inner {
+    background-color: #09152f;
+    border: 1px solid #17324c;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/systemSetting/device/grid/index.vue b/src/views/systemSetting/device/grid/index.vue
index 2baad4a..4faf378 100644
--- a/src/views/systemSetting/device/grid/index.vue
+++ b/src/views/systemSetting/device/grid/index.vue
@@ -1,5 +1,49 @@
 <template>
-    <div class="grid">
-      222
+    <div class="userList">
+        <myHeader @setDialog="changeDialog" @getSearch="getSearch"></myHeader>
+        <myMain :refresh="isFresh" :keyword="keyword" @resetFresh="resetFresh" />
     </div>
-</template>
\ No newline at end of file
+</template>
+<script>
+import myHeader from "./components/header"
+import myMain from "./components/main"
+export default {
+    components: {
+        myHeader,
+        myMain
+    },
+    data() {
+        return {
+            isFresh: false,
+            keyword: '',
+        }
+    },
+    created(){
+        
+    },
+    methods: {
+        // 鑾峰彇鎼滅储杩斿洖缁撴灉
+        getSearch({ text }) {
+            this.keyword = text;
+            this.isFresh = true;
+        },
+        // 鑾峰彇鍒锋柊缁撴灉
+        changeDialog({ flag }) {
+            console.log(flag);
+            this.isFresh = flag;
+        },
+        // 閲嶇疆isFresh
+        resetFresh({ flag }) {
+            this.isFresh = flag;
+            console.log(this.isFresh);
+        },
+    }
+}
+</script>
+<style lang="scss" scoped>
+.userList {
+    text-align: left;
+    margin: 10px 20px;
+    color: #4b9bb7;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.8.0