import { isArray, isFunction, set } from 'lodash'
import { request } from '@/utils/request'
import commonApi from '@/api/common'
import tool from '@/utils/tool'
export const allowUseDictComponent = ['radio', 'checkbox', 'select', 'transfer', 'treeSelect', 'tree-select', 'cascader']
export const allowCoverComponent = ['radio', 'checkbox', 'select', 'transfer', 'cascader']
export const requestDict = (url, method, params, data, timeout = 10 * 1000) => request({ url, method, params, data, timeout })
export const handlerDictProps = (item, tmpArr) => {
let data = []
let tran = {}
let colors = {}
let labelName = 'label'
let valueName = 'value'
if (item.dict.name && (!item.dict.url || !item.dict.data)) {
labelName = 'title'
valueName = 'key'
}
if (allowCoverComponent.includes(item.formType)) {
data = tmpArr.map(dicItem => {
const label = dicItem[(item.dict.props && item.dict.props.label) || labelName]
let tmp = dicItem[(item.dict.props && item.dict.props.value) || valueName]
let disabled = (typeof dicItem['disabled'] == 'undefined') ? false : ( dicItem['disabled'] === true ? true : false )
let indeterminate = (typeof dicItem['indeterminate'] == 'undefined') ? false : ( dicItem['indeterminate'] === true ? true : false )
let value
if (item.dict.name || item.dict.data) value = tmp.toString()
else if (tmp === 'true') value = true
else if (tmp === 'false') value = false
else value = tmp
tran[value] = label
colors[value] = item.dict.tagColors && item.dict.tagColors[value] || undefined
return { label, value, disabled, indeterminate }
})
} else {
data = tmpArr
}
data.tran = tran
data.colors = colors
return data
}
export const loadDict = async (dictList, item) => {
if (allowUseDictComponent.includes(item.formType) && item.dict) {
if (item.dict.name) {
const response = await commonApi.getDict(item.dict.name)
if (response.data) {
dictList[item.dataIndex] = handlerDictProps(item, response.data)
}
} else if (item.dict.remote) {
let requestData = {
openPage: item.dict?.openPage ?? false,
remoteOption: item.dict.remoteOption ?? {}
}
requestData = Object.assign(requestData, item.dict.pageOption)
if (requestData.openPage) {
const { data } = await requestDict(item.dict.remote, 'POST', {}, requestData)
dictList[item.dataIndex] = handlerDictProps(item, data.items)
dictList[item.dataIndex].pageInfo = data.pageInfo
} else {
const dictData = tool.local.get('dictData')
if (item.dict.cache && dictData[item.dataIndex]) {
dictList[item.dataIndex] = dictData[item.dataIndex]
} else {
const { data } = await requestDict(item.dict.remote, 'POST', {}, requestData)
dictList[item.dataIndex] = handlerDictProps(item, data)
if (item.dict.cache) {
dictData[item.dataIndex] = dictList[item.dataIndex]
tool.local.set('dictData', dictData)
}
}
}
} else if (item.dict.url) {
let requestData = {
openPage: item.dict?.openPage ?? false,
remoteOption: item.dict.remoteOption ?? {}
}
requestData = Object.assign(requestData, item.dict.pageOption)
if (requestData.openPage) {
if (item.dict?.method === 'GET' || item.dict?.method === 'get') {
item.dict.params = Object.assign(item.dict.params ?? {}, requestData)
} else {
item.dict.body = Object.assign(item.dict.body ?? {}, requestData)
}
const { data } = await requestDict(item.dict.url, item.dict.method || 'GET', item.dict.params || {}, item.dict.body || {})
dictList[item.dataIndex] = handlerDictProps(item, data.items)
dictList[item.dataIndex].pageInfo = data.pageInfo
} else {
const dictData = tool.local.get('dictData')
if (item.dict.cache && dictData[item.dataIndex]) {
dictList[item.dataIndex] = dictData[item.dataIndex]
} else {
const { data } = await requestDict(item.dict.url, item.dict.method || 'GET', item.dict.params || {}, item.dict.body || {})
dictList[item.dataIndex] = handlerDictProps(item, data)
if (item.dict.cache) {
dictData[item.dataIndex] = dictList[item.dataIndex]
tool.local.set('dictData', dictData)
}
}
}
} else if (item.dict.data) {
if (isArray(item.dict.data)) {
dictList[item.dataIndex] = handlerDictProps(item, item.dict.data)
} else if (isFunction(item.dict.data)) {
const response = await item.dict.data()
dictList[item.dataIndex] = handlerDictProps(item, response)
}
}
}
}
const requestCascaderData = async (val, dict, dictList, name) => {
if (dict && (dict.remote || dict.url)) {
let requestData = { openPage: dict?.openPage ?? false, remoteOption: dict.remoteOption ?? {} }
let response
const pageOption = Object.assign(requestData, dict.pageOption)
const url = dict.remote ?? dict.url
if (dict && url.indexOf('{{key}}') > 0) {
response = await requestDict(
url.replace('{{key}}', val), dict.method ?? 'GET',
Object.assign(dict.params || {}, requestData.openPage ? pageOption : {}),
Object.assign(dict.data || {}, requestData.openPage ? pageOption : {})
)
} else {
let temp = Object.assign({ key: val }, requestData.openPage ? pageOption : {})
const params = Object.assign(dict.params || {}, temp)
const data = Object.assign(dict.data || {}, temp)
response = await requestDict(url, dict.method ?? 'GET', params || {}, data || {})
}
if (response.data && response.code === 200) {
let dataIems = requestData.openPage ? response.data.items : response.data
dictList[name] = dataIems.map(dicItem => {
return {
'label': dicItem[ (dict.props && dict.props.label) || 'label' ],
'value': dicItem[ (dict.props && dict.props.value) || 'value' ],
'disabled': (typeof dicItem['disabled'] == 'undefined') ? false : ( dicItem['disabled'] === true ? true : false ),
'indeterminate': (typeof dicItem['indeterminate'] == 'undefined') ? false : ( dicItem['indeterminate'] === true ? true : false )
}
})
dictList[name].pageInfo = response.data.pageInfo ?? undefined
} else {
console.error(response)
}
}
}
export const handlerCascader = async (val, column, columns, dictList, formModel, clearData = true) => {
if (column.cascaderItem && isArray(column.cascaderItem)) {
column.cascaderItem.map(async name => {
const dict = columns.find(col => col.dataIndex === name && col.dict).dict
clearData && set(formModel, name, undefined)
requestCascaderData(val, dict, dictList, name)
})
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该设计源码是一款基于Vue3和uniapp技术的全面民宿租赁管理系统,包含1721个文件,其中包括1154张PNG图片、253个JS脚本、251个CSS样式表、37个SVG图形、10个HTML页面、9个GIF动画、2个Markdown文档、2张JPG图片、1个Gitignore配置文件以及1个LICENSE文件。系统支持多端操作,包括租客、房东、管家、总后台和门店,适用于物业托管、民宿长租、短租等多种商业模式。后端管理前端采用Vue3、Vite3、Pinia和Arco技术构建,而租客端、房东端、管家端则通过uniapp实现,支持一次开发,多端运行,可打包为微信、抖音、支付宝小程序,也可作为H5独立运行或打包为Android和iOS应用。
资源推荐
资源详情
资源评论
收起资源包目录
基于Vue3和uniapp的全面民宿租赁管理系统设计源码 (389个子文件)
commitlint.config.cjs 1KB
style.css 1KB
index.css 59B
.gitignore 2KB
index.html 357B
banner-1.jpeg 211KB
33万dom滚动不卡顿.jpg 77KB
networkRequest.js 7KB
useTableHook.js 5KB
en-US.js 5KB
mock.js 5KB
zh-CN.js 5KB
mock.js 5KB
zh-CN.js 4KB
en-US.js 3KB
mock.js 3KB
en-US.js 3KB
zh-CN.js 3KB
user.js 3KB
utils.js 3KB
mock.js 3KB
mock.js 3KB
en-US.js 3KB
zh-CN.js 2KB
message-box.js 2KB
en-US.js 2KB
zh-CN.js 2KB
zh-CN.js 2KB
en-US.js 2KB
en-US.js 2KB
interceptor.js 2KB
zh-CN.js 2KB
vite.config.js 2KB
index.js 2KB
use-menu-tree.js 2KB
user-center.js 2KB
listRun.js 2KB
index.js 2KB
index.js 2KB
permission.js 2KB
visualization.js 2KB
order.js 2KB
zh-CN.js 2KB
index.js 2KB
en-US.js 2KB
useAddTableRowForm.js 1KB
mock.js 1KB
formItemMixin.js 1KB
mock.js 1KB
defaultOptions.js 1KB
settings.js 1KB
system.js 1KB
list.js 1KB
settings.js 1KB
mock.js 1KB
houses.js 1KB
list.js 1KB
dashboard.js 1KB
content.js 1KB
en-US.js 1KB
is.js 1KB
exception.js 1KB
profile.js 983B
visualization.js 983B
permission.js 983B
responsive.js 982B
zh-CN.js 981B
userLoginInfo.js 958B
chart-option.js 948B
en-US.js 941B
index.js 927B
mock.js 927B
zh-CN.js 922B
main.js 897B
finace.js 852B
dashboard.js 845B
en-US.js 841B
customer.js 835B
zh-CN.js 816B
butler.js 809B
result.js 808B
arcoResolver.js 804B
tailwind.config.js 791B
zh-CN.js 784B
index.js 779B
compress.js 778B
form.js 774B
user.js 770B
message.js 758B
useDeleteConfim.js 747B
imagemin.js 745B
en-US.js 740B
base.js 737B
index.js 715B
route-listener.js 708B
request.js 706B
index.js 700B
user.js 631B
mock.js 614B
useAddTableRow.js 612B
共 389 条
- 1
- 2
- 3
- 4
资源评论
xyq2024
- 粉丝: 2517
- 资源: 5461
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MQTT协议的原理、特点、工作流程及应用场景
- Ruby语言教程从介绍入门到精通详教程跟代码.zip
- PM2.5-Prediction-Based-on-Random-Forest-Algorithm-master.zip
- Delphi开发详解:从入门到高级全面教程
- 物理机安装群晖DS3617教程(用U盘做引导)
- 使用jQuery实现一个加购物车飞入动画
- 本项目旨在开发一个基于情感词典加权组合方式的文本情感分析系统,通过以下几个目标来实现: 构建情感词典:收集并整理包含情感极性(正面或负面)的词汇 加权组合:通过加权机制,根据词汇在文本中的重要性、
- Visual Basic从入门到精通:基础知识与实践指南
- 炫酷文本粒子threejs特效
- hreejs地球世界轮廓线条动画
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功