diff --git a/src/api/system/device.js b/src/api/system/device.js index 5d32769..8ac2fe7 100644 --- a/src/api/system/device.js +++ b/src/api/system/device.js @@ -54,7 +54,7 @@ export function allDevice() { // 开锁 export function handleUnlocking(data){ return request({ - url: '/appVerify/admin/unlocking?sn='+data.sn, + url: '/system/device/admin/unlockingByMac?mac='+data.mac, method: 'post' }) } @@ -62,7 +62,7 @@ export function handleUnlocking(data){ // 关锁 export function handleLock(data){ return request({ - url: '/appVerify/admin/lock?sn='+data.sn, + url: '/system/device/admin/lockByMac?mac='+data.mac, method: 'post' }) } @@ -70,7 +70,7 @@ export function handleLock(data){ // 响铃寻车 export function ring(data){ return request({ - url: '/app/device/ring?sn='+data.sn, + url: '/app/device/ringByMac?mac='+data.mac, method: 'post' }) } diff --git a/src/components/Map/location/LocationMap.vue b/src/components/Map/location/LocationMap.vue index e8f4559..8a3dc24 100644 --- a/src/components/Map/location/LocationMap.vue +++ b/src/components/Map/location/LocationMap.vue @@ -40,11 +40,19 @@ export default { }, initLng: { type: String, - default: 120.250452 + default: '120.250452' }, initLat: { type: String, - default: 27.101745 + default: '27.101745' + }, + status: { + type: String, + default: '0' + }, + onlineStatus: { + type: String, + default: '0' }, }, data() { @@ -115,7 +123,8 @@ export default { this.getGeoAddress(this.initLng, this.initLat).then(res => { // 标点 this.removeAllMarker(); - this.addMarker(this.initLng, this.initLat, res.regeocode.formattedAddress); + console.log("添加标记点") + this.addMarker(this.initLng, this.initLat, res.regeocode.formattedAddress, this.status, this.onlineStatus); this.$emit('map-geo', res, this.initLng, this.initLat); // 地区 @@ -129,16 +138,38 @@ export default { }) } }, - addMarker(lng, lat, title) { + addMarker(lng, lat, title,status,onlineStatus) { //创建一个 Marker 实例: let marker = new AMap.Marker({ position: new AMap.LngLat(lng, lat), //经纬度对象 + icon: this.formarStatus(status,onlineStatus), title: title, }); //将创建的点标记添加到已有的地图实例: this.map.add(marker); this.markers.push(marker); }, + formarStatus(status,onlineStatus){ + if(onlineStatus == "0"){ + return globalConfig.icon.red; + }else{ + if(status == "0"){ + return globalConfig.icon.gray; + }else if(status == "1"){ + return globalConfig.icon.blue; + }else if(status == "2"){ + return globalConfig.icon.yellow; + }else if(status == "3"){ + return globalConfig.icon.yellow; + }else if(status == "4"){ + return globalConfig.icon.light_blue; + }else if(status == "8"){ + return globalConfig.icon.gray; + }else if(status == "9"){ + return globalConfig.icon.gray; + } + } + }, // 删除所有的标记点 removeAllMarker() { this.map.remove(this.markers); diff --git a/src/views/system/device/index.vue b/src/views/system/device/index.vue index 9ed6750..0a27717 100644 --- a/src/views/system/device/index.vue +++ b/src/views/system/device/index.vue @@ -302,7 +302,15 @@ <el-col :span="8"> <el-form-item label="二维码:"> <template> - <image-preview style="margin-top: -30px" :src="form.qrcode" :width="50" :height="50"/> + <el-popover + placement="top" + width="180" + trigger="hover"> + <div class="qr-code-box"> + <qr-code :text="form.qrText" :width="150" :height="150" /> + </div> + <el-button slot="reference" type="text" icon="el-icon-picture">查看</el-button> + </el-popover> </template> </el-form-item> <el-form-item label="车辆上下线:" style="color: #ffcc00;font-weight: 700">{{ form.onlineStatus == 1 ? '在线' : '离线' }}</el-form-item> @@ -328,6 +336,8 @@ @map-geo="onMapGeo" :init-lat="form.latitude" :init-lng="form.longitude" + :status="form.status" + :online-status="form.onlineStatus" /> </el-col> </el-row> diff --git a/src/views/system/fee/index.vue b/src/views/system/fee/index.vue index cb4194e..4bde136 100644 --- a/src/views/system/fee/index.vue +++ b/src/views/system/fee/index.vue @@ -2,6 +2,16 @@ <div class="app-container"> <!-- 搜索表单 --> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label="运营商" prop="deptId" v-if="userName == 'admin'"> + <el-select v-model="queryParams.deptId" placeholder="请选择运营商" clearable> + <el-option + v-for="item in deptOptions" + :key="item.deptId" + :label="item.deptName" + :value="item.deptId" + ></el-option> + </el-select> + </el-form-item> <el-form-item label="套餐名称" prop="name"> <el-input v-model="queryParams.name" placeholder="请输入套餐名称" clearable @keyup.enter.native="handleQuery" /> </el-form-item> @@ -41,7 +51,7 @@ <el-table v-loading="loading" :data="feeList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center" /> <el-table-column label="id" align="center" prop="ruleId" /> - <el-table-column label="运营区" align="center" prop="area" v-if="userName == 'admin'"/> + <el-table-column label="运营商" align="center" prop="deptName" v-if="userName == 'admin'"/> <el-table-column label="套餐名称" align="center" prop="name" /> <el-table-column label="说明" :show-overflow-tooltip="true" align="center" prop="instructions" /> <!-- <el-table-column label="时间(小时)" align="center" prop="time" /> @@ -77,16 +87,16 @@ <el-form-item label="套餐名称" prop="name"> <el-input v-model="form.name" placeholder="请输入套餐名称" /> </el-form-item> - <el-form-item label="运营区" prop="areaId" v-if="userName == 'admin'"> - <el-select v-model="form.areaId" placeholder="请选择运营区"> - <el-option - v-for="item in areaOptions" - :key="item.areaId" - :label="item.areaName" - :value="item.areaId" - ></el-option> - </el-select> - </el-form-item> +<!-- <el-form-item label="运营区" prop="areaId" v-if="userName == 'admin'">--> +<!-- <el-select v-model="form.areaId" placeholder="请选择运营区">--> +<!-- <el-option--> +<!-- v-for="item in areaOptions"--> +<!-- :key="item.areaId"--> +<!-- :label="item.areaName"--> +<!-- :value="item.areaId"--> +<!-- ></el-option>--> +<!-- </el-select>--> +<!-- </el-form-item>--> <el-form-item label="说明" prop="instructions" :show-overflow-tooltip="true"> <editor v-model="form.instructions" :min-height="192"/> <!-- <el-input v-model="form.explain" type="textarea" placeholder="请输入内容" /> --> @@ -312,6 +322,7 @@ <script> import { listFee, getFee, delFee, addFee, updateFee } from "@/api/system/fee"; import { listArea } from '@/api/system/area' +import { listDept, listDeptExcludeChild } from '@/api/system/dept' export default { name: "Fee", @@ -324,6 +335,7 @@ export default { single: true, // 运营区下拉框 areaOptions: [], + deptOptions: [], multiple: true, showSearch: true, total: 0, @@ -414,6 +426,11 @@ export default { console.log("当前用户信息:",this.$store.state.user.name) this.userName = this.$store.state.user.name; this.getList(); + if(this.userName === 'admin'){ + listDept({status: '0' }).then(response => { + this.deptOptions = response.data; + }); + } }, methods: { handleUnitChange() { diff --git a/src/views/system/order/index.vue b/src/views/system/order/index.vue index 82cbd58..8434616 100644 --- a/src/views/system/order/index.vue +++ b/src/views/system/order/index.vue @@ -121,8 +121,91 @@ /> <!-- 添加或修改订单对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body> + <el-form ref="form" :model="form" label-width="110px"> + <el-row> + <el-col :span="12"> + <el-form-item label="支付订单编号:">{{ form.orderNo }}</el-form-item> + <el-form-item label="租赁时长:">{{ formatDuration(form) }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="租赁用户:" >{{ form.phonenumber }}</el-form-item> + <el-form-item label="行驶距离:" >{{ form.distance }}</el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="订单状态:">{{ formatStatus(form.status) }}</el-form-item> + </el-col> + </el-row> + <h2 style="font-weight: bold;font-size: 18px">设备信息</h2> + <el-row> + <el-col :span="12"> + <el-form-item label="车牌号:">{{ form.device.vehicleNum }}</el-form-item> + <el-form-item label="SN:">{{ form.sn }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="MAC:">{{ form.device.mac }}</el-form-item> + <el-form-item label="运营区域:" >{{ form.area }}</el-form-item> + </el-col> + </el-row> + <h2 style="font-weight: bold;font-size: 18px">行程记录</h2> + <!-- 显示路径 --> + <el-row> + <el-col :span="24"> + <location-map + v-if="showPlaceSearchMap" + ref="map" + height="400px" + /> + </el-col> + </el-row> + <h2 style="font-weight: bold;font-size: 18px;padding-top: 10px">费用明细</h2> + <el-row> + <el-col :span="12"> + <el-form-item label="预约费用:">{{ formatFee(form.appointmentFee) }}</el-form-item> + <el-form-item label="调度费:">{{ formatFee(form.dispatchFee) }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="骑行费用:" >{{ formatFee(form.ridingFee) }}</el-form-item> + <el-form-item label="管理费:" >{{ formatFee(form.manageFee) }}</el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="实收:">{{ formatFee(form.payFee) }}</el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="支付方式:">{{ formatType(form.wx) }}</el-form-item> + <el-form-item label="支付时间:">{{ form.payTime }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="收费方式:" >{{ form.areaName }}</el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="预约费退款:">{{ formatFee(form.payFee) }}</el-form-item> + <el-form-item label="调度费退款:">{{ formatFee(form.payFee) }}</el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="骑行费用退款:" >{{ formatFee(form.areaName) }}</el-form-item> + <el-form-item label="管理费退款:" >{{ formatFee(form.remainingPower) }}</el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="退款原因:">{{ form.mac }}</el-form-item> + <el-form-item label="退款时间:">{{ form.sn }}</el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="结算总费用:">{{ formatFee(form.mac) }}</el-form-item> + </el-col> + </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> @@ -134,10 +217,12 @@ <script> import { listOrder, getOrder, delOrder, addOrder, updateOrder } from "@/api/system/order"; +import LocationMap from '@/components/Map/location/LocationMap' export default { name: "Order", dicts: ['et_order_type', 'et_pay_type', 'et_order_status'], + components: {LocationMap }, data() { return { // 遮罩层 @@ -156,6 +241,7 @@ export default { orderList: [], // 弹出层标题 title: "", + showPlaceSearchMap: false, // 是否显示弹出层 open: false, // 查询参数 @@ -171,7 +257,16 @@ export default { deviceMac: null, }, // 表单参数 - form: {}, + form: { + device: { + vehicleNum: null, + mac: null + }, + status: null, + payType: null, + payFee: null, + appointmentFee: null, + }, // 表单校验 rules: { orderNo: [ @@ -190,6 +285,38 @@ export default { this.getList(); }, methods: { + formatFee(fee){ + if (!fee) return '0.00'; + return parseFloat(this.form.appointmentFee).toFixed(2); + }, + formatStatus(status) { + //状态:0-预约中,1-取消预约,2-开始骑行,3-骑行结束,4-订单结束 + if (!status) return '未知'; + switch (status) { + case '0': + return '预约中'; + case '1': + return '取消预约'; + case '2': + return '开始骑行'; + case '3': + return '骑行结束'; + case '4': + return '订单结束'; + default: + return '未知'; + } + }, + formatType(payType) { + switch (payType) { + case 'ali': + return '支付宝'; + case 'wx': + return '微信'; + default: + return '未知'; + } + }, formatDuration(row) { const createTime = new Date(row.createTime); const endTime = new Date(row.returnTime); @@ -267,8 +394,10 @@ export default { const orderId = row.orderId || this.ids getOrder(orderId).then(response => { this.form = response.data; + console.log("111111111111111111111111---------------"+JSON.stringify(response.data)) + this.showPlaceSearchMap = true; this.open = true; - this.title = "修改订单"; + this.title = "订单详情"; }); }, /** 提交按钮 */ @@ -310,3 +439,11 @@ export default { } }; </script> +<style> + .el-dialog__body{ + padding: 0px 20px !important; + } + .el-form-item--mini.el-form-item { + margin-bottom: 10px !important; + } +</style> diff --git a/src/views/system/refund/index.vue b/src/views/system/refund/index.vue index 03c1988..7b64c51 100644 --- a/src/views/system/refund/index.vue +++ b/src/views/system/refund/index.vue @@ -17,10 +17,10 @@ @keyup.enter.native="handleQuery" /> </el-form-item> - <el-form-item label="用户ID" prop="userId"> + <el-form-item label="用户" prop="userName"> <el-input - v-model="queryParams.userId" - placeholder="请输入用户ID" + v-model="queryParams.userName" + placeholder="请输入用户" clearable @keyup.enter.native="handleQuery" /> @@ -33,7 +33,7 @@ @keyup.enter.native="handleQuery" /> </el-form-item> - <el-form-item label="退款项目说明" prop="itemDesc"> + <el-form-item label="退款说明" prop="itemDesc"> <el-input v-model="queryParams.itemDesc" placeholder="请输入退款项目说明" @@ -48,38 +48,6 @@ </el-form> <el-row :gutter="10" class="mb8"> -<!-- <el-col :span="1.5">--> -<!-- <el-button--> -<!-- type="primary"--> -<!-- plain--> -<!-- icon="el-icon-plus"--> -<!-- size="mini"--> -<!-- @click="handleAdd"--> -<!-- v-hasPermi="['system:refund:add']"--> -<!-- >新增</el-button>--> -<!-- </el-col>--> -<!-- <el-col :span="1.5">--> -<!-- <el-button--> -<!-- type="success"--> -<!-- plain--> -<!-- icon="el-icon-edit"--> -<!-- size="mini"--> -<!-- :disabled="single"--> -<!-- @click="handleUpdate"--> -<!-- v-hasPermi="['system:refund:edit']"--> -<!-- >修改</el-button>--> -<!-- </el-col>--> -<!-- <el-col :span="1.5">--> -<!-- <el-button--> -<!-- type="danger"--> -<!-- plain--> -<!-- icon="el-icon-delete"--> -<!-- size="mini"--> -<!-- :disabled="multiple"--> -<!-- @click="handleDelete"--> -<!-- v-hasPermi="['system:refund:remove']"--> -<!-- >删除</el-button>--> -<!-- </el-col>--> <el-col :span="1.5"> <el-button type="warning" @@ -95,10 +63,9 @@ <el-table v-loading="loading" :data="refundList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center" /> -<!-- <el-table-column label="主键" align="center" prop="id" />--> <el-table-column label="退款单号" align="center" prop="refundNo" /> <el-table-column label="关联订单" align="center" prop="orderNo" /> - <el-table-column label="用户ID" align="center" prop="userId" /> + <el-table-column label="用户" align="center" prop="userName" /> <el-table-column label="退款金额" align="center" prop="amount" /> <el-table-column label="退款原因" align="center" prop="reason" /> <el-table-column label="退款时间" align="center" prop="createTime" width="180"> @@ -107,24 +74,6 @@ </template> </el-table-column> <el-table-column label="退款项目说明" align="center" prop="itemDesc" /> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:refund:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:refund:remove']" - >删除</el-button> - </template> - </el-table-column> </el-table> <pagination diff --git a/src/views/user/user/index.vue b/src/views/user/user/index.vue index f38d3ee..d8f73e5 100644 --- a/src/views/user/user/index.vue +++ b/src/views/user/user/index.vue @@ -115,9 +115,14 @@ <el-table-column type="selection" width="50" align="center" /> <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> - <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> - <el-table-column label="注册号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[3].visible" width="120" /> + <el-table-column label="手机号" align="center" key="phonenumber" prop="phonenumber" v-if="columns[3].visible" width="120" /> + <el-table-column label="移动端" align="center" key="appName" prop="appName" v-if="columns[3].visible" width="120" /> <el-table-column label="余额" align="center" key="balance" prop="balance" v-if="columns[4].visible" width="120" /> + <el-table-column label="最后登录时间" align="center" prop="createTime" v-if="columns[5].visible" width="160"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.loginDate) }}</span> + </template> + </el-table-column> <el-table-column label="注册时间" align="center" prop="createTime" v-if="columns[5].visible" width="160"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime) }}</span> @@ -133,7 +138,11 @@ ></el-switch> </template> </el-table-column> -<!-- <el-table-column label="绑定设备数" align="center" key="bindDeviceNum" prop="bindDeviceNum" v-if="columns[6].visible" :show-overflow-tooltip="true" />--> + <el-table-column label="是否实名" align="center" prop="isAuthentication"> + <template slot-scope="scope"> + <dict-tag :options="dict.type.et_user_is_authentication" :value="scope.row.isAuthentication" /> + </template> + </el-table-column> <el-table-column label="操作" align="center" @@ -270,6 +279,16 @@ ></el-option> </el-select> </el-form-item> + <el-form-item label="角色" prop="role"> + <el-select v-model="role" placeholder="请选择角色"> + <el-option + v-for="dict in dict.type.et_asuser_role" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> </el-col> </el-row> </el-form> @@ -318,7 +337,7 @@ import { listUser as getSysUserList } from "@/api/system/user"; export default { name: "User", - dicts: ['sys_normal_disable', 'sys_user_sex'], + dicts: ['sys_normal_disable', 'sys_user_sex','et_user_is_authentication','et_asuser_role'], data() { return { // 遮罩层 @@ -339,6 +358,7 @@ export default { sysUserList: null, sysUserOptions: null, userId:null, + role: null, // 弹出层标题 title: "", // 是否显示弹出层 @@ -511,7 +531,7 @@ export default { submitBand: function () { console.log(this.form.userId) console.log(this.userId) - bandSystemUser({userId:this.form.userId,sysUserId:this.userId}).then(response => { + bandSystemUser({userId:this.form.userId,sysUserId:this.userId,role:this.role}).then(response => { this.$modal.msgSuccess("绑定成功"); this.open2 = false; this.getList(); @@ -549,7 +569,7 @@ export default { handleBandSysUser(row){ this.reset(); const userId = row.userId || this.ids; - getSysUserList(userId).then(response => { + getSysUserList({"userType":"00"}).then(response => { this.sysUserOptions = response.rows; this.form.userId = userId; this.open2 = true;