| | |
| | | |
| | | export function getStoreInfoById(id) { |
| | | return http.get('/sccg/store/storeinfo/' + id); |
| | | } |
| | | |
| | | export function getVideoPoint(params) { |
| | | return http.get('/sccg/video_point/query', params); |
| | | } |
| | |
| | | import axios from "axios"; |
| | | import http from "@/http"; |
| | | |
| | | export default { |
| | | login: (data) => axios.post('/sccg/admin/login', data), |
| | | |
| | | getMessageAuditList: (params) => { |
| | | return http.get('/sccg/message_column_set/getUserColumnSet', params); |
| | | } |
| | | }; |
| | |
| | | <!-- 消息 --> |
| | | <div class="menu-right__item btn" @mousemove="flag.message = true" @mouseleave="flag.message = false"> |
| | | <el-tooltip effect="dark" content="消息中心" placement="bottom-end" :hide-after="600"> |
| | | <el-badge :value="50" :max="99" class="item"> |
| | | <i class="el-icon-message-solid"></i> |
| | | <el-badge :value="messageCounts" class="item"> |
| | | <i @click="getMessage" class="el-icon-message-solid"></i> |
| | | </el-badge> |
| | | </el-tooltip> |
| | | <!-- 消息操作 --> |
| | |
| | | </div> |
| | | <div v-for="item in menuMessageList" :key="item.id" class="message-card__item"> |
| | | <router-link to='/home/operate/message/messageIndex'> |
| | | <span @click="" class="label">{{ item.label }}</span> |
| | | <span class="label">{{ item.columnName }}</span> |
| | | </router-link> |
| | | <span>({{ item.num }})</span> |
| | | <span>({{ item.messageNumber }})</span> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | |
| | | <el-form-item prop="mobile" label="联系方式" min-width="7"> |
| | | <el-input v-model="info.mobile"></el-input> |
| | | </el-form-item> |
| | | <!-- <el-form-item prop="departName" label="所属部门" min-width="8"> |
| | | <el-input v-model="user.mobile"></el-input> |
| | | </el-form-item> --> |
| | | <el-form-item prop="jobTitle" label="所属职务" min-width="8"> |
| | | <el-input v-model="info.jobTitle"></el-input> |
| | | </el-form-item> |
| | |
| | | |
| | | <script> |
| | | import updatePassword from "./updatePassword"; |
| | | import users from "@/api/users"; |
| | | |
| | | export default { |
| | | components: { |
| | | updatePassword |
| | |
| | | message: false |
| | | }, |
| | | user: '', |
| | | menuMessageList: [ |
| | | { |
| | | label: '全部消息', |
| | | num: 10, |
| | | id: '1m' |
| | | }, |
| | | { |
| | | label: '产品消息', |
| | | num: 10, |
| | | id: '2m' |
| | | }, |
| | | { |
| | | label: '安全消息', |
| | | num: 10, |
| | | id: '3m' |
| | | }, |
| | | { |
| | | label: '服务消息', |
| | | num: 10, |
| | | id: '4m' |
| | | }, |
| | | ], |
| | | menuMessageList: [], |
| | | messageCounts: 0, |
| | | keyword: '', |
| | | info:null, |
| | | show:false |
| | | info: null, |
| | | show: false |
| | | }; |
| | | }, |
| | | created() { |
| | | this.setLoginInfo() |
| | | this.setLoginInfo(); |
| | | }, |
| | | methods: { |
| | | baseInfo() { |
| | |
| | | this.$confirm("确认关闭?") |
| | | .then((_) => { |
| | | this.dialogUpload = false; |
| | | // this.dialogUpdate = false; |
| | | done(); |
| | | }) |
| | | .catch((_) => { }); |
| | |
| | | // 改变选中状态 |
| | | changeActive(idx) { |
| | | this.menuLeftList.forEach((item, index) => { |
| | | if (index === idx) { |
| | | item.checked = true; |
| | | } else { |
| | | item.checked = false; |
| | | } |
| | | item.checked = index === idx; |
| | | }) |
| | | }, |
| | | // 设置用户基本信息 |
| | | async setLoginInfo() { |
| | | const info = JSON.parse(sessionStorage.getItem('user')); |
| | | this.getMessage(); |
| | | if (info) { |
| | | this.user = info; |
| | | } else { |
| | |
| | | url: 'sccg/admin/info?name=' + name, |
| | | }) |
| | | sessionStorage.setItem('user', JSON.stringify(res.data)); |
| | | return res.data |
| | | return res.data; |
| | | }, |
| | | getMessage() { |
| | | const userInfo = JSON.parse(sessionStorage.getItem('user')); |
| | | users.getMessageAuditList({ userId: userInfo.user.id }) |
| | | .then(res => { |
| | | this.menuMessageList = res; |
| | | this.menuMessageList.forEach(item => { |
| | | this.messageCounts += item.messageNumber; |
| | | }) |
| | | }) |
| | | .catch(err => this.$message.error(`${err}`)) |
| | | } |
| | | } |
| | | }; |
| | |
| | | label-position="right"> |
| | | <!-- 车牌号 --> |
| | | <el-form-item class="optionItem" label="当前密码:" prop="carNumber"> |
| | | <el-input v-model="car.carNumber" placeholder="请填写当前密码" disabled></el-input> |
| | | <el-input v-model="car.carNumber" placeholder="请填写当前密码"></el-input> |
| | | </el-form-item> |
| | | <!-- 所属部门 --> |
| | | <el-form-item class="optionItems" label="新密码:" prop="depart"> |
| | | <el-input v-model="car.depart" placeholder="请填写新密码" disabled></el-input> |
| | | <el-input v-model="car.depart" placeholder="请填写新密码"></el-input> |
| | | </el-form-item> |
| | | <!-- 所属大队 --> |
| | | <el-form-item class="optionItems" label="确定新密码:" prop="belong"> |
| | | <el-input v-model="car.belong" placeholder="请二次填写新密码" disabled></el-input> |
| | | <el-input v-model="car.belong" placeholder="请二次填写新密码"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | |
| | | if(validateCarNum(value)){ |
| | | callback() |
| | | }else{ |
| | | callback(new Error('请输入正确的车牌号')); |
| | | callback(new Error('请输入正确的密码')); |
| | | } |
| | | } else { |
| | | callback(new Error('车牌号不能为空')); |
| | | callback(new Error('密码不能为空')); |
| | | } |
| | | } |
| | | const checkName = (rule, value, callback) => { |
| | |
| | | if(validateName(value)){ |
| | | callback() |
| | | }else{ |
| | | callback(new Error('请正确输入车主姓名')); |
| | | callback(new Error('请输入正确的密码')); |
| | | } |
| | | } else { |
| | | callback(new Error('车主姓名不能为空')); |
| | | callback(new Error('新密码不能为空')); |
| | | } |
| | | } |
| | | const checkUser = (rule, value, callback) => { |
| | |
| | | if(validateName(value)){ |
| | | callback() |
| | | }else{ |
| | | callback(new Error('请正确输入车辆使用人员')); |
| | | callback(new Error('请输入正确的密码')); |
| | | } |
| | | } else { |
| | | callback(new Error('车辆使用人员不能为空')); |
| | | callback(new Error('新密码不能为空')); |
| | | } |
| | | } |
| | | const checkPhone = (rule, value, callback) => { |
| | |
| | | <script> |
| | | import { isvalidUsername } from "@/utils/validate"; |
| | | import { createNamespacedHelpers } from "vuex"; |
| | | import users from "@/api/users"; |
| | | |
| | | const { mapActions } = createNamespacedHelpers("users"); |
| | | export default { |
| | | name: "login", |
| | |
| | | loginForm: { |
| | | username:"", |
| | | password:"", |
| | | // username: "admin", |
| | | // password: "macro123", |
| | | }, |
| | | imgUrl:'', |
| | | loginRules: { |
| | |
| | | }, |
| | | methods: { |
| | | showPwd() { |
| | | if (!this.pwdType) { |
| | | this.pwdType = true; |
| | | } else { |
| | | this.pwdType = false; |
| | | } |
| | | this.pwdType = !this.pwdType; |
| | | }, |
| | | ...mapActions(["login"]), |
| | | handleLogin() { |
| | |
| | | }) |
| | | .catch(function (error) { |
| | | }); |
| | | }, |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | <el-button icon="el-icon-delete-solid" @click="handleReset">重置</el-button> |
| | | </div> |
| | | </div> |
| | | <el-button v-if="isStorePage()" type="primary" icon="el-icon-plus" @click="handleView(null, 'add')">添加</el-button> |
| | | <el-button v-if="isStorePage()" type="primary" icon="el-icon-plus" @click="handleView(null, 'create')">添加</el-button> |
| | | </div> |
| | | </header> |
| | | <main> |
| | |
| | | </el-table-column> |
| | | <el-table-column prop="storeAddress" label="店铺详细地址" min-width="10"> |
| | | </el-table-column> |
| | | <el-table-column prop="relationVideo" label="关联摄像机" min-width="10"> |
| | | <el-table-column prop="videoPoint" label="关联摄像机" min-width="10"> |
| | | <template v-if="scope.row.videoId" slot-scope="scope"> |
| | | <span>{{ scope.row.videoPoint.name }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="operation" label="操作" min-width="20"> |
| | | <template slot-scope="scope"> |
| | |
| | | </el-table> |
| | | <!-- 查看修改页面 --> |
| | | <el-dialog :visible.sync="dialogUpdate" width="45%" |
| | | :title="dialogType ? '修改店铺信息' : '查看店铺信息'" :before-close="handleClose"> |
| | | <updateUser :dialogType="dialogType" :storeInfo="storeInfo" :isStorePage="isStorePage()" @closeDialog="closeDialog" /> |
| | | :destroy-on-close="true" |
| | | :title="dialogType === 'view' ? '查看店铺信息' : '修改店铺信息'" :before-close="handleClose"> |
| | | <updateUser v-if="dialogUpdate" :dialogType="dialogType" :storeInfo="storeInfo" :isStorePage="isStorePage()" @closeDialog="closeDialog" /> |
| | | </el-dialog> |
| | | <!-- 分页 --> |
| | | <div class="pagination"> |
| | |
| | | handleDelete(id) { |
| | | deleteStoreInfo(id) |
| | | .then(() => { |
| | | this.$message({ type: 'success', message }); |
| | | this.$message({ type: 'success', message: '操作成功' }); |
| | | this.search(); |
| | | }) |
| | | .catch(err => this.$message({ type: 'error', message: err })); |
| | |
| | | <el-input v-model="store.storeNumber" placeholder="请填写店铺编号" :disabled="isView()"></el-input> |
| | | </el-form-item> |
| | | <!-- 店铺名称 --> |
| | | <el-form-item class="optionItem" label="店铺名称:" prop="storename"> |
| | | <el-input v-model="store.storename" placeholder="请填写店名称" :disabled="isView()"></el-input> |
| | | <el-form-item class="optionItem" label="店铺名称:" prop="storeName"> |
| | | <el-input v-model="store.storeName" placeholder="请填写店名称" :disabled="isView()"></el-input> |
| | | </el-form-item> |
| | | <!-- 店铺联系人 --> |
| | | <el-form-item class="optionItem" label="店铺联系人:" prop="owner"> |
| | |
| | | <el-input v-model="store.contact" placeholder="请填写店铺联系电话" :disabled="isView()"></el-input> |
| | | </el-form-item> |
| | | <!-- 店铺详细地址 --> |
| | | <el-form-item class="optionItem" label="店铺详细地址:" prop="storeaddr"> |
| | | <el-input v-model="store.storeaddr" placeholder="请填写店铺详细地址" :disabled="isView()"></el-input> |
| | | <el-form-item class="optionItem" label="店铺详细地址:" prop="storeAddress"> |
| | | <el-input v-model="store.storeAddress" placeholder="请填写店铺详细地址" :disabled="isView()"></el-input> |
| | | </el-form-item> |
| | | <!-- 关联摄像机 --> |
| | | <el-form-item v-if="!isStorePage" class="optionItem" label="关联摄像机:" prop="relationVideo"> |
| | | <el-input v-model="store.relationVideo" placeholder="请填写关联摄像机" :disabled="isView()"></el-input> |
| | | <el-form-item v-if="isStorePage" class="optionItem" label="关联摄像机:" prop="relationVideo"> |
| | | <el-select v-model="store.relationVideo" placeholder="请填写关联摄像机" :disabled="isView()"> |
| | | <el-option v-for="item in relationVideoList" :key="item.id" :value="item.id" :label="item.name"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item v-if="!isStorePage" class="optionItem" label="店铺得分:"> |
| | | <el-input v-model="store.storeScore" :disabled="isView()"></el-input> |
| | | </el-form-item> |
| | | <el-form-item v-if="!isView()"> |
| | | <div class="optionBtn"> |
| | | <el-button type="primary" class="btn submit" @click.native.prevent="onSubmit">提交</el-button> |
| | |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import {deepClone, getCodeList} from "@/utils/helper"; |
| | | import {addStoreInfo, updateStoreInfo} from "@/api/operate/storeManagement"; |
| | | import { deepClone, getCodeList } from "@/utils/helper"; |
| | | import { addStoreInfo, getVideoPoint, updateStoreInfo } from "@/api/operate/storeManagement"; |
| | | |
| | | export default { |
| | | data() { |
| | |
| | | } |
| | | } |
| | | }; |
| | | |
| | | const validateStoreType = (rule, value, callback) => { |
| | | debugger; |
| | | if (value) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error('请选择店铺类型')); |
| | | } |
| | | }; |
| | | return { |
| | | store: { |
| | | storeNumber: '', |
| | | storename: '', |
| | | storeName: '', |
| | | owner: '', |
| | | contact: '', |
| | | storeaddr: '', |
| | | storeAddress: '', |
| | | relationVideo: '', |
| | | type: null |
| | | type: null, |
| | | storeScore: null |
| | | }, |
| | | rules: { |
| | | type: [{ required: true, trigger: ['blue', 'change'], message: '请选择店铺类型' }], |
| | | type: [{ required: true, validator: validateStoreType }], |
| | | storeNumber: [{ required: true, trigger:'blur', message: '请输入店铺编号' }], |
| | | storename: [{ required: true, trigger:'blur', message: '请输入店铺名称' }], |
| | | storeName: [{ required: true, trigger:'blur', message: '请输入店铺名称' }], |
| | | owner: [{ required: true, trigger:'blur', message: '请输入店铺联系人' }], |
| | | contact: [{ required: true, trigger:'blur', validator: validatePhone }], |
| | | storeaddr: [{ required: true, trigger:'blur', message: '请输入店铺详细地址' }], |
| | | relationVideo: [{ required: false, trigger:'blur', message: '请输入关联摄像机' }] |
| | | storeAddress: [{ required: true, trigger:'blur', message: '请输入店铺详细地址' }], |
| | | relationVideo: [{ required: true, trigger:'blur', message: '请输入关联摄像机' }] |
| | | }, |
| | | shopTypeList: [] |
| | | shopTypeList: [], |
| | | relationVideoList: [] |
| | | } |
| | | }, |
| | | created() { |
| | | this.store = deepClone(this.storeInfo); |
| | | if (this.isCreated()) { |
| | | this.getShopTypeList(); |
| | | async created() { |
| | | this.$set(this, 'store', this.storeInfo); |
| | | const result = await getVideoPoint({ current: 1, size: 1 }); |
| | | this.relationVideoList = result.records; |
| | | if (this.storeInfo && this.isStorePage) { |
| | | this.store.relationVideo = this.store.videoPoint.name; |
| | | } |
| | | if (!this.isView()) { |
| | | await this.getShopTypeList(); |
| | | } |
| | | }, |
| | | |
| | |
| | | }, |
| | | |
| | | isCreated() { |
| | | return this.dialogType === 'add'; |
| | | return this.dialogType === 'create'; |
| | | }, |
| | | |
| | | // 获取字典 |
| | | async getShopTypeList() { |
| | | let arr = await getCodeList('16'); |
| | | this.shopTypeList = this.createShopTypeTree(arr); |
| | | if (this.dialogType === 'update') { |
| | | const selectedStoreType = arr.find(item => item.name === this.store.typeName); |
| | | this.$set(this.store, 'type', [selectedStoreType.parentId, selectedStoreType.id]); |
| | | } |
| | | }, |
| | | |
| | | // 创建商铺类型树 |
| | |
| | | } |
| | | } |
| | | }, |
| | | props: ['storeInfo', 'dialogType', 'isStorePage'] |
| | | |
| | | beforeDestroy() { |
| | | this.store = null; |
| | | }, |
| | | props: ['storeInfo', 'dialogType', 'isStorePage'] |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | |
| | | width="40%" |
| | | :title="getDialogTitle" |
| | | > |
| | | <updateUser @closeDialog="closeDialog" :dialogType="dialogType" :originalData="originalData" /> |
| | | <updateUser v-if="isShowUploadDialog" @closeDialog="closeDialog" :dialogType="dialogType" :originalData="originalData" /> |
| | | </el-dialog> |
| | | <div class="tools"> |
| | | <div class="funs"> |
| | |
| | | </el-table> |
| | | <!-- 新建消息 --> |
| | | <el-dialog :destroy-on-close="true" :key="dialogType" :title="getDialogTitle" :visible.sync="isShowDialog" width="80%"> |
| | | <my-edit @closeMyDialog="closeDialog" :type="dialogType" :myDataRow="tableRowData"></my-edit> |
| | | <my-edit v-if="isShowDialog" @closeMyDialog="closeDialog" :type="dialogType" :myDataRow="tableRowData"></my-edit> |
| | | </el-dialog> |
| | | <!-- tools --> |
| | | <div class="tools"> |
| | |
| | | <!-- 查看修改页面 --> |
| | | <el-dialog :visible.sync="dialogUpdate" width="45%" :title="updateFlag ? '权限设置' :'查看角色信息'" |
| | | :destroy-on-close="true" :key="updateFlag" :before-close="handleClose"> |
| | | <updateUser :updateFlag="updateFlag" :userInfo=userInfo |
| | | <updateUser v-if="dialogUpdate" :updateFlag="updateFlag" :userInfo=userInfo |
| | | :getTableData=" context ? getTableData : getTableData" @changeDialog="changeDialog" /> |
| | | </el-dialog> |
| | | <!-- tools --> |
| | |
| | | :key="dialogTitle" |
| | | width="40%" |
| | | :title="dialogTitle"> |
| | | <updateInterface :isUpdate="isUpdate" :dialogData="dialogData" @closeDialog="closeDialog" /> |
| | | <updateInterface v-if="isShowDialog" :isUpdate="isUpdate" :dialogData="dialogData" @closeDialog="closeDialog" /> |
| | | </el-dialog> |
| | | |
| | | <div class="tools"> |
| | |
| | | </main> |
| | | <footer> |
| | | <!-- 添加卡口 --> |
| | | <el-dialog :destroy-on-close="true" :key="dialogType" :title="getDialogTitle" :visible.sync="isShowDialog" width="60%" :before-close="handleClose"> |
| | | <MyCreate @closeDialog="closeDialog" :originalBayonet="originalBayonet" :isEdit="isEdit"></MyCreate> |
| | | <el-dialog :destroy-on-close="true" :title="getDialogTitle" :visible.sync="isShowDialog" width="60%" :before-close="handleClose"> |
| | | <MyCreate v-if="isShowDialog" @closeDialog="closeDialog" :originalBayonet="originalBayonet" :isEdit="isEdit"></MyCreate> |
| | | </el-dialog> |
| | | </footer> |
| | | </div> |
| | |
| | | <!-- <el-button type="primary" >删除</el-button> --> |
| | | </div> |
| | | <div style="height:60px;display: flex;justify-content: flex-start;"> |
| | | <!-- <el-button class="button-one"> |
| | | 视频预览 |
| | | </el-button> |
| | | <el-button class="button-two"> |
| | | 视频巡查 |
| | | </el-button> |
| | | <el-button class="button-third"> |
| | | 图片巡查 |
| | | </el-button> --> |
| | | </div> |
| | | </el-header> |
| | | |
| | |
| | | proxy: { |
| | | // 跨域配置 |
| | | "/sccg": { |
| | | target: `http://10.0.0.23:8082/`, |
| | | target: `http://42.193.1.25:8082/`, |
| | | changeOrigin: true |
| | | } |
| | | }, |