Browse Source

Merge branch 'dev' of http://120.46.222.128:10021/elink-star/epmet-apartment-work-mp into mk

# Conflicts:
#	common/api.js
wyx
mk 4 months ago
parent
commit
9ffb6e6360
  1. 60
      common/system/config.js
  2. 72
      common/system/dept.js
  3. 52
      common/system/dict/data.js
  4. 60
      common/system/dict/type.js
  5. 74
      common/system/menu.js
  6. 44
      common/system/notice.js
  7. 44
      common/system/post.js
  8. 119
      common/system/role.js
  9. 136
      common/system/user.js
  10. 40
      pages/api.js
  11. 4
      pages/login/login.vue
  12. 90
      pages/tabBar/xjPage/xj.vue
  13. 172
      pagesA/checkout/detail/detail.vue
  14. 98
      pagesA/checkout/list/list.vue
  15. 72
      pagesA/force/index/index.vue
  16. 37
      utils/request.js

60
common/system/config.js

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询参数列表
export function listConfig(query) {
return request({
url: '/system/config/list',
method: 'get',
params: query
})
}
// 查询参数详细
export function getConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'get'
})
}
// 根据参数键名查询参数值
export function getConfigKey(configKey) {
return request({
url: '/system/config/configKey/' + configKey,
method: 'get'
})
}
// 新增参数配置
export function addConfig(data) {
return request({
url: '/system/config',
method: 'post',
data: data
})
}
// 修改参数配置
export function updateConfig(data) {
return request({
url: '/system/config',
method: 'put',
data: data
})
}
// 删除参数配置
export function delConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'delete'
})
}
// 刷新参数缓存
export function refreshCache() {
return request({
url: '/system/config/refreshCache',
method: 'delete'
})
}

72
common/system/dept.js

@ -0,0 +1,72 @@
import request from '@/utils/request'
// 查询部门列表
export function listDept(query) {
return request({
url: '/system/dept/list',
method: 'get',
params: query
})
}
// 查询部门列表(排除节点)
export function listDeptExcludeChild(deptId) {
return request({
url: '/system/dept/list/exclude/' + deptId,
method: 'get'
})
}
// 查询部门详细
export function getDept(deptId) {
return request({
url: '/system/dept/' + deptId,
method: 'get'
})
}
// 新增部门
export function addDept(data) {
return request({
url: '/system/dept',
method: 'post',
data: data
})
}
// 修改部门
export function updateDept(data) {
return request({
url: '/system/dept/edit',
method: 'post',
data: data
})
}
// 删除部门
export function delDept(deptId) {
return request({
url: "/mz/apartment/delete/" + deptId,
method: "post",
});
}
// 上传部门图片
export function uploadDeptImages(data) {
return request({
url: '/system/dept/upload',
method: 'post',
data: data,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
// 房屋专属左侧组织树
export function getdeptList() {
return request({
url: '/mz/building/getdeptList',
method: 'get'
})
}

52
common/system/dict/data.js

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询字典数据列表
export function listData(query) {
return request({
url: '/system/dict/data/list',
method: 'get',
params: query
})
}
// 查询字典数据详细
export function getData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'get'
})
}
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
return request({
url: '/system/dict/data/type/' + dictType,
method: 'get'
})
}
// 新增字典数据
export function addData(data) {
return request({
url: '/system/dict/data',
method: 'post',
data: data
})
}
// 修改字典数据
export function updateData(data) {
return request({
url: '/system/dict/data/updata',
method: 'post',
data: data
})
}
// 删除字典数据
export function delData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'delete'
})
}

60
common/system/dict/type.js

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询字典类型列表
export function listType(query) {
return request({
url: '/system/dict/type/list',
method: 'get',
params: query
})
}
// 查询字典类型详细
export function getType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'get'
})
}
// 新增字典类型
export function addType(data) {
return request({
url: '/system/dict/type',
method: 'post',
data: data
})
}
// 修改字典类型
export function updateType(data) {
return request({
url: '/system/dict/type/edit',
method: 'post',
data: data
})
}
// 删除字典类型
export function delType(dictId) {
return request({
url: '/system/dict/type/delete/' + dictId,
method: 'post'
})
}
// 刷新字典缓存
export function refreshCache() {
return request({
url: '/system/dict/type/refreshCache',
method: 'post'
})
}
// 获取字典选择框列表
export function optionselect() {
return request({
url: '/system/dict/type/optionselect',
method: 'get'
})
}

74
common/system/menu.js

@ -0,0 +1,74 @@
import request from '@/utils/request'
// 查询菜单列表
export function listMenu(query) {
return request({
url: '/system/menu/list',
method: 'get',
params: query
})
}
// 查询菜单详细
export function getMenu(menuId) {
return request({
url: '/system/menu/' + menuId,
method: 'get'
})
}
// 查询菜单下拉树结构
export function treeselect() {
return request({
url: '/system/menu/treeselect',
method: 'get'
})
}
// 根据角色ID查询菜单下拉树结构
export function roleMenuTreeselect(roleId) {
return request({
url: '/system/menu/roleMenuTreeselect/' + roleId,
method: 'get'
})
}
// 新增菜单
export function addMenu(data) {
return request({
url: '/system/menu',
method: 'post',
data: data
})
}
// 修改菜单
export function updateMenu(data) {
return request({
url: '/system/menu/update',
method: 'post',
data: data
})
}
// 删除菜单
export function delMenu(menuId) {
return request({
url: '/system/menu/delete/' + menuId,
method: 'post'
})
}
// 清除缓存
export const clearCache = () => {
return request({
url: '/cache/clearAll',
method: 'get'
})
}
// 清除缓存
export const clearCache1 = () => {
return request({
url: '/static/count',
method: 'get'
})
}

44
common/system/notice.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询公告列表
export function listNotice(query) {
return request({
url: '/system/notice/list',
method: 'get',
params: query
})
}
// 查询公告详细
export function getNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'get'
})
}
// 新增公告
export function addNotice(data) {
return request({
url: '/system/notice',
method: 'post',
data: data
})
}
// 修改公告
export function updateNotice(data) {
return request({
url: '/system/notice',
method: 'put',
data: data
})
}
// 删除公告
export function delNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'delete'
})
}

44
common/system/post.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询岗位列表
export function listPost(query) {
return request({
url: '/system/post/list',
method: 'get',
params: query
})
}
// 查询岗位详细
export function getPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'get'
})
}
// 新增岗位
export function addPost(data) {
return request({
url: '/system/post',
method: 'post',
data: data
})
}
// 修改岗位
export function updatePost(data) {
return request({
url: '/system/post',
method: 'put',
data: data
})
}
// 删除岗位
export function delPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'delete'
})
}

119
common/system/role.js

@ -0,0 +1,119 @@
import request from '@/utils/request'
// 查询角色列表
export function listRole(query) {
return request({
url: '/system/role/list',
method: 'get',
params: query
})
}
// 查询角色详细
export function getRole(roleId) {
return request({
url: '/system/role/' + roleId,
method: 'get'
})
}
// 新增角色
export function addRole(data) {
return request({
url: '/system/role',
method: 'post',
data: data
})
}
// 修改角色
export function updateRole(data) {
return request({
url: '/system/role/update',
method: 'post',
data: data
})
}
// 角色数据权限
export function dataScope(data) {
return request({
url: '/system/role/dataScope',
method: 'post',
data: data
})
}
// 角色状态修改
export function changeRoleStatus(roleId, status) {
const data = {
roleId,
status
}
return request({
url: '/system/role/changeStatus',
method: 'put',
data: data
})
}
// 删除角色
export function delRole(roleId) {
return request({
url: '/system/role/delete/' + roleId,
method: 'post'
})
}
// 查询角色已授权用户列表
export function allocatedUserList(query) {
return request({
url: '/system/role/authUser/allocatedList',
method: 'get',
params: query
})
}
// 查询角色未授权用户列表
export function unallocatedUserList(query) {
return request({
url: '/system/role/authUser/unallocatedList',
method: 'get',
params: query
})
}
// 取消用户授权角色
export function authUserCancel(data) {
return request({
url: '/system/role/authUser/cancel',
method: 'post',
data: data
})
}
// 批量取消用户授权角色
export function authUserCancelAll(data) {
return request({
url: '/system/role/authUser/cancelAll',
method: 'post',
params: data
})
}
// 授权用户选择
export function authUserSelectAll(data) {
return request({
url: '/system/role/authUser/selectAll',
method: 'get',
params: data
})
}
// 根据角色ID查询部门树结构
export function deptTreeSelect(roleId) {
return request({
url: '/system/role/deptTree/' + roleId,
method: 'get'
})
}

136
common/system/user.js

@ -0,0 +1,136 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
// 查询用户列表
export function listUser(query) {
return request({
url: '/system/user/list',
method: 'get',
params: query
})
}
// 查询用户详细
export function getUser(userId) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
method: 'get'
})
}
// 新增用户
export function addUser(data) {
return request({
url: '/system/user',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
return request({
url: '/system/user/update',
method: 'post',
data: data
})
}
// 删除用户
export function delUser(userId) {
return request({
url: '/system/user/delete/' + userId,
method: 'post'
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
return request({
url: '/system/user/resetPwd',
method: 'post',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
return request({
url: '/system/user/changeStatus',
method: 'post',
data: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile',
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
params: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: data
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'get',
params: data
})
}
// 查询部门下拉树结构
export function deptTreeSelect() {
return request({
url: '/system/user/deptTree',
method: 'get'
})
}

40
pages/api.js

@ -1,15 +1,15 @@
import request from "../utils/request.js";
import request, { uploadFile } from "../utils/request.js";
// 获取验证码
export function getCodeImg() {
return request({
url: '/captchaImage',
url: "/captchaImage",
header: {
isToken: false
isToken: false,
},
method: 'get',
timeout: 20000
})
method: "get",
timeout: 20000,
});
}
export function login({ username, password, code, uuid, client }) {
return request({
@ -30,3 +30,31 @@ export function listCheckoutAlert(query) {
params: query,
});
}
export function getRoomFacilities(query) {
return request({
url: "/apartment/manager/facilitiesByRoomId",
method: "get",
params: query,
});
}
// 办理退房
export function submitCheckout(data) {
return request({
url: "/apartment/manager/confirmCheckOut",
method: "put",
data: data,
});
}
export function uploadImage(filePath, formData = {}) {
return uploadFile(filePath, {
formData: formData,
});
}
// 暂存提交退房
export function tempSaveCheckOut(data) {
return request({
url: "/apartment/manager/tempSaveCheckOut",
method: "post",
data: data,
});
}

4
pages/login/login.vue

@ -73,8 +73,8 @@ export default {
data() {
return {
form: {
username: "",
password: "",
username: "admin",
password: "!Aa12345",
code: "",
uuid: "",
rememberMe: false,

90
pages/tabBar/xjPage/xj.vue

@ -9,13 +9,13 @@
<u-form-item labelAlign="right" labelWidth="100px" label="乐业社区" prop="sex" borderBottom
@click="lysqShow = true" ref="item1">
<u--input v-model="form.apartmentId" disabled disabledColor="#ffffff" placeholder="请选择" border="none"></u--input>
<u--input v-model="form.apartmentName" disabled disabledColor="#ffffff" placeholder="请选择" border="none"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item labelAlign="right" labelWidth="100px" label="巡检问题类型" borderBottom
@click="wtlxShow = true" ref="item1">
<u--input v-model="form.questionType" disabled disabledColor="#ffffff" placeholder="请选择" border="none"></u--input>
<u--input v-model="form.questionName" disabled disabledColor="#ffffff" placeholder="请选择" border="none"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
@ -68,7 +68,7 @@
<u-action-sheet :show="lysqShow" :actions="deptOptions" title="请选择乐业社区" @close="lysqShow = false" @select="handleTreeSelect">
</u-action-sheet>
<u-action-sheet :show="wtlxShow" :actions="actions1" title="请选择问题类型" @close="wtlxShow = false" @select="sexSelect">
<u-action-sheet :show="wtlxShow" :actions="questionTypeList" title="请选择问题类型" @close="wtlxShow = false" @select="handleQuestionSelect">
</u-action-sheet>
</scroll-view>
</template>
@ -77,20 +77,22 @@
import {
queryDeptDropdownList,
} from "@/common/rec";
import { getdeptList,addInspection } from '@/common/api.js';
import { getdeptList,addInspection,uploadFile } from '@/common/api.js';
import { getDicts } from "@/common/system/dict/data";
import { baseUrl } from "@/utils/config";
export default {
data () {
return {
uploadUlr: baseUrl + '/common/upload',
wtlxShow: false,
lysqShow: false,
deptOptions: [],
actions1: [
{ name: '问题1', },
{ name: '问题2', },
],
questionTypeList: [],
form: {
apartmentId: '',
apartmentName:'',
questionType: '',
questionName: '',
title: '',
content: '',
inspector: '',
@ -110,14 +112,28 @@ export default {
},
onLoad () {
this.getTree()
this.getDictType()
},
methods: {
afterRead(event) {
let files = Array.isArray(event) ? event : [event]
let files = Array.isArray(event) ? event.file : [event.file]
this.fileList = this.fileList.concat(files)
// console.log(this.fileList);
this.fileList.forEach( item => {
this.uploadFile(item[0])
});
},
onDelete(event) {
this.fileList.splice(event.index, 1)
this.form.imageList.splice(event.index, 1)
},
getDictType(){
getDicts('inspection_question_type').then((res) => {
this.questionTypeList = res.data.map(item=>{
item.name = item.dictLabel
return item
})
});
},
getTree(){
getdeptList().then(async (res) => {
@ -143,17 +159,61 @@ export default {
});
});
},
uploadFile(file){
let that = this
console.log('uploadFile',file);
uni.uploadFile({
url: this.uploadUlr,
filePath: file.url,
name: 'file', //
method: 'post',
header: {
"Authorization": uni.getStorageSync('token')
},
formData: {
//
file: file
},
success(res) {
let data = JSON.parse(res.data)
console.log(data);
if (data.url) {
that.form.imageList.push({
url:data.url,
name: '',
format: file.type
})
}
},
fail(res) {
uni.showToast({
icon: 'error',
title: '图片上传失败!'
})
}
})
},
handleBtn () {
addInspection().then(res=>{
console.log(res);
// console.log(this.form);
let parmas = JSON.parse(JSON.stringify(this.form))
delete parmas.apartmentName
delete parmas.questionName
addInspection(parmas).then(res=>{
uni.showToast({
icon: 'success',
title: '提交成功!'
})
})
},
handleTreeSelect (e) {
console.log(e);
// this.model1.userInfo.sex = e.name
// this.$refs.uForm.validateField('userInfo.sex')
this.form.apartmentName = e.name
this.form.apartmentId = e.id
},
handleQuestionSelect(e){
this.form.questionName = e.dictLabel
this.form.questionType = e.dictValue
}
}
}
</script>

172
pagesA/checkout/detail/detail.vue

@ -1,3 +1,4 @@
import { detail } from '@/api/mz/contract';
<template>
<view class="checkout-detail-bg">
<!-- 房间图片 -->
@ -8,14 +9,21 @@
></image>
<!-- 基本信息卡片 -->
<view class="info-card">
<view class="room-title">5号楼1单元101 房间1</view>
<view class="info-row"><text class="label">居住人</text>王静</view>
<view class="info-row"><text class="label">性别</text></view>
<view class="room-title">{{ info.roomNamePath }}</view>
<view class="info-row"
><text class="label">联系电话</text>187****0001</view
><text class="label">居住人</text>{{ info.graduateName }}</view
>
<view class="info-row"
><text class="label">居住日期</text>2025-04-04 2025-05-06</view
><text class="label">性别</text
>{{ info.gender == 1 ? "男" : "女" }}</view
>
<view class="info-row"
><text class="label">联系电话</text>{{ info.telephone }}</view
>
<view class="info-row"
><text class="label">居住日期</text>{{ info.checkInDate }}{{
info.checkOutDate
}}</view
>
</view>
<!-- 设备检查 -->
@ -28,17 +36,17 @@
>
<text class="device-label">{{ item.name }}</text>
<u-radio-group
v-model="item.status"
placement="row"
@change="onDeviceChange(idx, $event)"
v-model="checkStatus[idx]"
>
<u-radio
:custom-style="'margin-right:36rpx;'"
activeColor="#0DC6C6"
v-for="opt in statusOptions"
:key="opt"
:label="opt"
:name="opt"
:key="opt.value"
:label="opt.label"
:name="opt.value"
></u-radio>
</u-radio-group>
</view>
@ -49,7 +57,7 @@
<view class="meter-row">
<text class="meter-label">水表数</text>
<u-input
v-model="waterMeter"
v-model="waterMeterValue"
type="digit"
placeholder="请输入水表数"
border="none"
@ -58,7 +66,7 @@
<view class="meter-row">
<text class="meter-label">电表数</text>
<u-input
v-model="electricMeter"
v-model="energyMeterValue"
type="digit"
placeholder="请输入电表数"
border="none"
@ -69,8 +77,7 @@
<view class="section-card">
<view class="section-title">其他说明</view>
<u-textarea
v-model="value"
:formatter="formatter"
v-model="facilitiesCheckDesc"
ref="textarea"
placeholder="请输入内容(不超过500字)"
maxlength="500"
@ -88,9 +95,9 @@
@delete="deletePic"
multiple
:maxCount="10"
accept="image,video"
uploadIconColor="#12c3c3"
uploadText="点击上传"
:previewImage="true"
>
</u-upload>
</view>
@ -108,39 +115,146 @@
</template>
<script>
import {
getRoomFacilities,
submitCheckout,
uploadImage,
tempSaveCheckOut,
} from "../../../pages/api";
export default {
data() {
return {
btnStyle:
"background:linear-gradient(90deg,#0DC6C6 0%,#13C2C2 100%);font-size:36rpx;border-radius:48rpx;width:60vw;height:80rpx;",
deviceList: [
{ name: "空调", status: "完好" },
{ name: "冰箱", status: "完好" },
{ name: "洗衣机", status: "完好" },
{ name: "电磁灶", status: "完好" },
{ name: "沙发", status: "完好" },
{ name: "茶几", status: "完好" },
{ name: "桌椅", status: "完好" },
deviceList: [],
statusOptions: [
{
label: "完好",
value: "0",
},
{
label: "破损",
value: "1",
},
{
label: "丢失",
value: "2",
},
],
waterMeterValue: "",
energyMeterValue: "",
checkStatus: [
{
label: "完好",
value: "0",
},
{
label: "破损",
value: "1",
},
{
label: "丢失",
value: "2",
},
],
statusOptions: ["完好", "破损", "丢失"],
waterMeter: 3245.1,
electricMeter: 2672.6,
remark: "",
fileList: [],
img1: [],
info: {},
facilitiesCheckDesc: "",
};
},
onLoad(options) {
console.log("options", options);
const detail = uni.getStorageSync("checkoutDetail");
this.info = detail;
this.getFacilities(options.houseId);
},
methods: {
getFacilities(id) {
getRoomFacilities({ houseId: id }).then((res) => {
this.deviceList = res.data;
});
},
onDeviceChange(idx, val) {
this.deviceList[idx].status = val;
},
afterRead(event) {
let files = Array.isArray(event.file) ? event.file : [event.file];
this.fileList = this.fileList.concat(files);
beforeRead(event) {
console.log("event", event);
},
//
async afterRead(event) {
let lists = [].concat(event.file);
let fileListLen = this[`fileList${event.name}`].length;
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
status: "uploading",
message: "上传中",
});
});
for (let i = 0; i < lists.length; i++) {
const result = await uploadImage(lists[i].url);
let item = this[`fileList${event.name}`][fileListLen];
this[`fileList${event.name}`].splice(
fileListLen,
1,
Object.assign(item, {
status: "success",
message: "",
url: result.url,
})
);
fileListLen++;
}
var arry = [];
this.fileList.filter((v, i) => {
arry.push(v.url);
});
this.img1 = arry;
},
//
deletePic(event) {
this.fileList.splice(event.index, 1);
this[`fileList${event.name}`].splice(event.index, 1);
var arry = [];
this.fileList.filter((v, i) => {
arry.push(v.url);
});
this.img1 = arry;
},
//
handleTempSave(formData) {
tempSaveCheckOut(formData).then((res) => {
if (res.code === 200) {
uni.showToast({ title: res.msg, icon: "success" });
uni.navigateTo({
url: `/pagesA/checkout/list/list`,
});
} else {
uni.showToast({ title: res.msg, icon: "warning" });
}
});
},
onSubmit() {
const facilitiesCheckResults = this.deviceList.map((item, index) => ({
facilityId: item.id,
checkResult: this.checkStatus[index],
}));
console.log(facilitiesCheckResults, "facilitiesCheckResults");
const params = {
idCard: this.info.idCard,
checkOutType: 0, //退
facilitiesCheckDesc: this.facilitiesCheckDesc,
facilitiesCheckImages: this.fileList,
facilitiesCheckResults: facilitiesCheckResults,
waterMeterValue: this.waterMeterValue || "",
energyMeterValue: this.energyMeterValue || "",
};
this.handleTempSave(params);
uni.showToast({ title: "提交成功", icon: "success" });
},
},

98
pagesA/checkout/list/list.vue

@ -6,24 +6,31 @@
:refreshing="refreshing"
:finished="finished"
:finished-text="'没有更多了'"
v-if="list && list.length > 0"
>
<u-list-item v-for="item in list" :key="item.chooseRoomRecId">
<view class="checkout-card" @click="goDetail(item)">
<image :src="item.img" class="room-img" mode="aspectFill"></image>
<image
v-if="item.houseTypeImages && item.houseTypeImages.length > 0"
:src="item.houseTypeImages[0].url || ''"
class="room-img"
mode="aspectFill"
></image>
<view class="room-info">
<view class="room-title">{{ item.roomNamePath }}</view>
<view class="room-user">
<text>{{ item.graduateName }}</text>
<text class="gender">{{ item.gender==1?'男':'女' }}</text>
<text class="gender">{{ item.gender == 1 ? "男" : "女" }}</text>
<text class="phone">{{ item.telephone }}</text>
</view>
<view class="room-date"
>{{ item.startDate }}{{ item.checkOutDate }}</view
>{{ item.checkInDate }}{{ item.checkOutDate }}</view
>
</view>
</view>
</u-list-item>
</u-list>
<view v-else class="no-data"> 暂无数据~ </view>
</view>
</template>
@ -33,46 +40,85 @@ export default {
data() {
return {
list: [],
page: 1,
pageNum: 1,
pageSize: 10,
refreshing: false,
finished: false,
loading: false,
};
},
onLoad() {
this.getList();
},
methods: {
async getList() {
const res = await listCheckoutAlert({
pageNum: 1,
pageSize: 10,
});
this.list = res.rows;
console.log(res, "res");
async getList(isLoadMore = false) {
if (this.loading) return; //
this.loading = true;
try {
const res = await listCheckoutAlert({
pageNum: this.pageNum,
pageSize: this.pageSize,
});
console.log("列表数据:", res);
if (res.code === 200) {
const newList = res.rows || [];
// if (res.code === 200) {
// this.list = this.page === 1 ? res.data : [...this.list, ...res.data];
// this.finished = res.data.length < this.pageSize;
// this.refreshing = false;
// }
if (isLoadMore) {
//
this.list = [...this.list, ...newList];
} else {
//
this.list = newList;
}
//
this.finished = newList.length < this.pageSize;
// +1
if (newList.length > 0) {
this.pageNum++;
}
} else {
uni.showToast({ title: res.msg || "获取数据失败", icon: "none" });
}
} catch (error) {
console.error("获取列表失败:", error);
uni.showToast({ title: "网络异常", icon: "none" });
} finally {
this.loading = false;
this.refreshing = false; //
}
},
//
onRefresh() {
this.page = 1;
this.finished = false;
this.getList();
async onRefresh() {
this.refreshing = true;
this.pageNum = 1; //
this.finished = false; //
await this.getList(false); //
},
//
loadMore() {
if (this.finished) return;
this.page++;
this.getList();
//
async loadMore() {
if (this.finished || this.loading) return; //
await this.getList(true); //
},
goDetail(item) {
uni.setStorageSync("checkoutDetail", {
idCard: item.idCard,
roomNamePath: item.roomNamePath, //
graduateName: item.graduateName, //
gender: item.gender, //
telephone: item.telephone, //
checkInDate: item.checkInDate,
checkOutDate: item.checkOutDate, //
});
uni.navigateTo({
url: `/pagesA/checkout/detail/detail?id=${item.chooseRoomRecId}`,
url: `/pagesA/checkout/detail/detail?houseId=${item.houseId}`,
});
},
},

72
pagesA/force/index/index.vue

@ -57,8 +57,7 @@
<view class="desc-card">
<view class="label-des">说明</view>
<u-textarea
v-model="value"
:formatter="formatter"
v-model="descRemark"
ref="textarea"
placeholder="请输入内容(不超过500字)"
maxlength="500"
@ -73,9 +72,9 @@
@delete="deletePic"
multiple
:maxCount="10"
accept="image,video"
uploadIconColor="#12c3c3"
uploadText="点击上传"
previewImage="true"
>
</u-upload>
</view>
@ -101,6 +100,7 @@
</template>
<script>
import { uploadImage } from "../../../pages/api";
export default {
data() {
return {
@ -116,7 +116,9 @@ export default {
imageUrl: "",
pickerValue: "",
},
descRemark: "",
fileList: [],
img1: [],
showDate: false,
minDate: "2000-01-01",
maxDate: "2100-12-31",
@ -125,20 +127,58 @@ export default {
};
},
methods: {
afterRead(event) {
//
const file = event.file;
this.fileList = [file];
this.form.imageUrl = file.url || file.path;
//
beforeRead(event) {
//
const { file } = event;
if (file.size > 10 * 1024 * 1024) {
// 10MB
uni.showToast({ title: "文件过大", icon: "none" });
return false;
}
return true;
},
onDateConfirm(e) {
// e.value YYYY-MM-DD
const date = new Date(e.value);
const y = date.getFullYear();
const m = (date.getMonth() + 1).toString().padStart(2, "0");
const d = date.getDate().toString().padStart(2, "0");
this.form.leaveDate = `${y}-${m}-${d}`;
this.showDate = false;
//
async afterRead(event) {
let lists = [].concat(event.file);
let fileListLen = this[`fileList${event.name}`].length;
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
status: "uploading",
message: "上传中",
});
});
for (let i = 0; i < lists.length; i++) {
const result = await uploadImage(lists[i].url);
let item = this[`fileList${event.name}`][fileListLen];
this[`fileList${event.name}`].splice(
fileListLen,
1,
Object.assign(item, {
status: "success",
message: "",
url: result.url,
})
);
fileListLen++;
}
var arry = [];
this.fileList.filter((v, i) => {
arry.push(v.url);
});
this.img1 = arry;
},
//
deletePic(event) {
this[`fileList${event.name}`].splice(event.index, 1);
var arry = [];
this.fileList.filter((v, i) => {
arry.push(v.url);
});
this.img1 = arry;
},
submit() {
this.$refs.uForm.validate((valid) => {

37
utils/request.js

@ -37,3 +37,40 @@ export default function request(options = {}) {
});
});
}
export function uploadFile(filePath, options = {}) {
const token = uni.getStorageSync("token") || "";
console.log(filePath,'filePath');
return new Promise((resolve, reject) => {
uni.uploadFile({
url: baseUrl + "/common/upload",
filePath: filePath,
name: "file", // 后端接收的参数名
header: {
Authorization: token ? `Bearer ${token}` : "",
...options.header,
},
formData: options.formData || {}, // 额外的表单数据
success: (res) => {
console.log('res::',res)
try {
const data = JSON.parse(res.data);
if (res.statusCode === 200) {
console.log('data::',data)
resolve(data);
} else {
uni.showToast({ title: data.msg || "上传失败", icon: "none" });
reject(data);
}
} catch (e) {
uni.showToast({ title: "上传失败", icon: "none" });
reject(e);
}
},
fail: (err) => {
uni.showToast({ title: "网络异常", icon: "none" });
reject(err);
},
});
});
}
Loading…
Cancel
Save