Browse Source

微信小程序需求更新

master
xuhuajiao 4 days ago
parent
commit
121d888468
  1. 2
      .env.development
  2. 3
      src/views/deviceManage/map3d/map.vue
  3. 127
      src/views/deviceManage/shelfManage/shelf3dPosition.vue
  4. 429
      src/views/weChatMiniProgram/index.vue

2
.env.development

@ -3,7 +3,7 @@ ENV = 'development'
# 接口地址
# 许镇-本地服地址
VUE_APP_BASE_API = 'http://192.168.99.72:14000'
VUE_APP_BASE_API = 'http://192.168.99.63:14000'
# VUE_APP_BASE_API = 'http://192.168.99.86:12010'
#VUE_APP_BASE_API = 'http://27.19.205.234:17070'

3
src/views/deviceManage/map3d/map.vue

@ -175,6 +175,9 @@ export default {
console.log('levelChanged:', event)
console.log('当前楼层:', event.level)
console.log('楼层name2', window.vueInstance.map.getFloor(event.level).name)
this.level = event.level
this.levelName = window.vueInstance.map.getFloor(event.level).name
window.vueInstance.$emit('refreshLevel', this.level, this.levelName)
})
} catch (error) {
console.error('初始化地图失败:', error)

127
src/views/deviceManage/shelfManage/shelf3dPosition.vue

@ -121,6 +121,7 @@
</el-card>
</div>
</div>
<!-- @refreshLevel="handleLevel" -->
<PreviewMap v-if="is3DMap" ref="map" :map-data="mapData" :to-shlef="true" :area-fid="currentFid" @refreshAreaFid="handleAreaFid" />
<el-empty v-else description="当前区域非3D模式的地图" style="height: 100%;" />
<!-- 模型信息面板 -->
@ -282,7 +283,8 @@ export default {
],
areaDetails: [
{ id: 1, code: '03', name: '区域1' }
]
],
isMapSwitching: false //
}
},
computed: {
@ -450,36 +452,76 @@ export default {
return rootNode
},
// handleTreeNodeClick(nodeData) {
// this.form.layerVal = null
// this.form.shelfVal = null //
// this.rackOptions = [] //
// this.currentTreeNode = nodeData.raw
// console.log('handleTreeNodeClick', nodeData)
// const currentNode = this.$refs.treeRef.getNode(nodeData)
// console.log('currentNode', currentNode)
// if (currentNode.level === 1) {
// return
// }
// const parentNode = currentNode.parent
// const parentLabel = parentNode && parentNode.data && parentNode.data.label
// ? parentNode.data.label
// : ''
// this.selectedValue = parentLabel
// ? `${parentLabel} - ${nodeData.label}`
// : nodeData.label
// this.$refs.selectRef.blur()
// this.getInitBookShelfList(currentNode.data)
// if (nodeData.raw.mapType === 1) {
// this.is3DMap = false
// } else {
// this.is3DMap = true
// this.getMapDetails(nodeData.raw.mapId)
// }
// },
handleTreeNodeClick(nodeData) {
this.form.layerVal = null
this.form.shelfVal = null //
this.rackOptions = [] //
this.form = {
code1: 0,
layerVal: null,
toward: null,
shelfVal: null
}
this.rackOptions = []
this.filterShelfList = []
this.currentTreeNode = nodeData.raw
console.log('handleTreeNodeClick', nodeData)
console.log('this.currentTreeNode', this.currentTreeNode)
const currentNode = this.$refs.treeRef.getNode(nodeData)
console.log('currentNode', currentNode)
if (currentNode.level === 1) {
return
}
if (currentNode.level === 1) return
const parentNode = currentNode.parent
const parentLabel = parentNode && parentNode.data && parentNode.data.label
? parentNode.data.label
: ''
const parentLabel = parentNode?.data?.label || ''
this.selectedValue = parentLabel ? `${parentLabel} - ${nodeData.label}` : nodeData.label
this.selectedValue = parentLabel
? `${parentLabel} - ${nodeData.label}`
: nodeData.label
this.$refs.selectRef.blur()
this.getInitBookShelfList(currentNode.data)
// 3D
if (nodeData.raw.mapType === 1) {
this.is3DMap = false
} else {
this.is3DMap = true
}
//
if (this.isMapSwitching) {
console.log('✅ 地图楼层切换,跳过重复请求地图接口')
return
}
//
if (this.is3DMap) {
this.getMapDetails(nodeData.raw.mapId)
}
},
getMapDetails(id) {
const params = {
'id': id
@ -608,6 +650,59 @@ export default {
//
this.fetchBindData(areaFid)
},
// handleLevel(level, levelName) {
// console.log('mapLevel', level)
// console.log('levelName', levelName)
// //
// this.isMapSwitching = true
// //
// this.selectTreeNodeByFloorName(levelName)
// //
// setTimeout(() => {
// this.isMapSwitching = false
// }, 300)
// },
/**
* 根据楼层名 2F自动选中树节点
* @param {string} floorName 楼层名 1F / 2F / 3F...
*/
selectTreeNodeByFloorName(floorName) {
if (!floorName || !this.regionTreeData.length || !this.$refs.treeRef) return
// F
const targetFloorName = floorName.replace('F', '').trim()
//
const targetNode = this.findFloorNodeByName(this.regionTreeData, targetFloorName)
if (targetNode) {
//
this.$refs.treeRef.setCurrentKey(targetNode.id)
//
this.handleTreeNodeClick(targetNode)
}
},
/**
* 递归查找 楼层节点根据你的树结构
*/
findFloorNodeByName(treeData, floorName) {
for (const node of treeData) {
// && label 2 / 2F /
if (node.floorId && node.label && node.label.includes(floorName)) {
return node
}
//
if (node.children && node.children.length) {
const res = this.findFloorNodeByName(node.children, floorName)
if (res) return res
}
}
return null
},
fetchBindData(fid) {
//
setTimeout(() => {

429
src/views/weChatMiniProgram/index.vue

@ -0,0 +1,429 @@
<template>
<div class="app-container row-container">
<div class="content-area">
<div class="area-config">
<div class="config-item">
<div class="config-item-main">
<span class="data-title">数据接口</span>
<!-- 原数据接口表单 -->
<el-form ref="openForm" :model="openForm" size="small" label-width="100px">
<el-form-item label="域名地址" prop="open_lib_http">
<el-tooltip
v-if="!editStatus.openForm.open_lib_http"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'open_lib_http')"
>
{{ openForm.open_lib_http }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopen_lib_http"
v-model="openForm.open_lib_http"
@blur="handleBlur('openForm', 'open_lib_http')"
@keyup.enter="handleBlur('openForm', 'open_lib_http')"
/>
</el-form-item>
<el-form-item label="AppId" prop="open_lib_appId">
<el-tooltip
v-if="!editStatus.openForm.open_lib_appId"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'open_lib_appId')"
>
{{ openForm.open_lib_appId }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopen_lib_appId"
v-model="openForm.open_lib_appId"
@blur="handleBlur('openForm', 'open_lib_appId')"
@keyup.enter="handleBlur('openForm', 'open_lib_appId')"
/>
</el-form-item>
<el-form-item label="Secret" prop="open_lib_secret">
<el-tooltip
v-if="!editStatus.openForm.open_lib_secret"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'open_lib_secret')"
>
{{ openForm.open_lib_secret }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopen_lib_secret"
v-model="openForm.open_lib_secret"
@blur="handleBlur('openForm', 'open_lib_secret')"
@keyup.enter="handleBlur('openForm', 'open_lib_secret')"
/>
</el-form-item>
<el-form-item label="sm4-key" prop="sm4_key">
<el-tooltip
v-if="!editStatus.openForm.sm4_key"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'sm4_key')"
>
{{ openForm.sm4_key }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormsm4_key"
v-model="openForm.sm4_key"
@blur="handleBlur('openForm', 'sm4_key')"
@keyup.enter="handleBlur('openForm', 'sm4_key')"
/>
</el-form-item>
<el-form-item label="opac_url" prop="opac_url">
<el-tooltip
v-if="!editStatus.openForm.opac_url"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'opac_url')"
>
{{ openForm.opac_url }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopac_url"
v-model="openForm.opac_url"
@blur="handleBlur('openForm', 'opac_url')"
@keyup.enter="handleBlur('openForm', 'opac_url')"
/>
</el-form-item>
</el-form>
</div>
<!-- <div class="config-remarks">双击输入框可进行编辑</div> -->
</div>
<div class="config-item">
<div class="config-item-main">
<span class="data-title">小程序绑定</span>
<el-form ref="vxForm" :model="vxForm" size="small" label-width="100px">
<el-form-item label="AppID" prop="vx_mini_appId">
<el-tooltip
v-if="!editStatus.vxForm.vx_mini_appId"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('vxForm', 'vx_mini_appId')"
>
{{ vxForm.vx_mini_appId }}
</span>
</el-tooltip>
<el-input
v-else
ref="vxFormvx_mini_appId"
v-model="vxForm.vx_mini_appId"
@blur="handleBlur('vxForm', 'vx_mini_appId')"
@keyup.enter="handleBlur('vxForm', 'vx_mini_appId')"
/>
</el-form-item>
<el-form-item label="AppSecret" prop="vx_mini_secret">
<el-tooltip
v-if="!editStatus.vxForm.vx_mini_secret"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('vxForm', 'vx_mini_secret')"
>
{{ vxForm.vx_mini_secret }}
</span>
</el-tooltip>
<el-input
v-else
ref="vxFormvx_mini_secret"
v-model="vxForm.vx_mini_secret"
@blur="handleBlur('vxForm', 'vx_mini_secret')"
@keyup.enter="handleBlur('vxForm', 'vx_mini_secret')"
/>
</el-form-item>
</el-form>
</div>
<!-- <div class="config-remarks">双击输入框可进行编辑</div> -->
</div>
<div class="config-item">
<div class="config-item-main">
<span class="data-title">管理员绑定</span>
<el-form ref="adminForm" :model="adminForm" size="small" label-width="100px">
<el-form-item label="账号" prop="op_user">
<el-tooltip
v-if="!editStatus.adminForm.op_user"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('adminForm', 'op_user')"
>
{{ adminForm.op_user }}
</span>
</el-tooltip>
<el-input
v-else
ref="adminFormop_user"
v-model="adminForm.op_user"
@blur="handleBlur('adminForm', 'op_user')"
@keyup.enter="handleBlur('adminForm', 'op_user')"
/>
</el-form-item>
</el-form>
</div>
<!-- <div class="config-remarks">双击输入框可进行编辑</div> -->
</div>
</div>
</div>
</div>
</template>
<script>
import { FetchInitScreenSetting, FetchEditScreenSetting } from '@/api/digitalScreen/index'
import { mapGetters } from 'vuex'
export default {
name: 'WeChatMiniProgram',
components: {
},
data() {
return {
openForm: {
open_lib_http: null,
open_lib_appId: null,
open_lib_secret: null,
sm4_key: null,
opac_url: null
},
vxForm: {
vx_mini_appId: null,
vx_mini_secret: null
},
adminForm: {
op_user: null
},
editStatus: {
openForm: {
open_lib_http: false,
open_lib_appId: false,
open_lib_secret: false,
sm4_key: false,
opac_url: false
},
vxForm: {
vx_mini_appId: false,
vx_mini_secret: false
},
adminForm: {
op_user: false
}
},
originalValues: {
openForm: {},
vxForm: {},
adminForm: {}
}
}
},
computed: {
...mapGetters([
'baseApi',
'user'
])
},
created() {
},
mounted() {
this.$nextTick(() => {
this.initScreenSetting()
})
},
methods: {
//
initScreenSetting() {
FetchInitScreenSetting({ 'libcode': this.user.fonds.fondsNo }).then(res => {
Object.values(res).forEach(item => {
const { code, context } = item
//
if (code === 'open_lib_http') {
this.openForm.open_lib_http = context
} else if (code === 'open_lib_appId') {
this.openForm.open_lib_appId = context
} else if (code === 'open_lib_secret') {
this.openForm.open_lib_secret = context
} else if (code === 'sm4_key') {
this.openForm.sm4_key = context
} else if (code === 'opac_url') {
this.openForm.opac_url = context
}
//
if (code === 'vx_mini_appId') {
this.vxForm.vx_mini_appId = context
} else if (code === 'vx_mini_secret') {
this.vxForm.vx_mini_secret = context
}
//
if (code === 'op_user') {
this.adminForm.op_user = context
}
})
}).catch(() => {
})
},
//
handleDblClick(formName, field) {
this.originalValues[formName][field] = this[formName][field]
this.editStatus[formName][field] = true
this.$nextTick(() => {
const input = this.$refs[`${formName}${field}`]
if (input) input.focus()
})
},
handleBlur(formName, field) {
this.editStatus[formName][field] = false
if (this[formName][field] !== this.originalValues[formName][field]) {
this.saveEdit(formName, field)
}
},
saveEdit(formName, field) {
console.log(this.user)
const code = field
const context = this[formName][field]
const libcode = this.user.fonds.fondsNo
const remarks = ''
if (!context && context !== 0) {
//
this.$message.warning(`${this.getFieldLabel(formName, field)}不能为空`)
this.rollbackValue(formName, field)
return
}
// 3.
const submitParam = { code, context, libcode, remarks }
// 4.
FetchEditScreenSetting(submitParam)
.then(() => {
this.$message.success(`${this.getFieldLabel(formName, field)}更新成功`)
//
// if (formName === 'title') {
// this.originalTitle = this.screen_title
// this.originalValues.title = this.screen_title
// } else if (formName === 'specialFields' && field.startsWith('show') && field !== 'show_screen') {
// // originalTime
// const screenItem = this.screenItems.find(item => item.code === field)
// if (screenItem) {
// screenItem.originalTime = context
// }
// this.originalValues[formName][field] = context
// } else if (formName !== 'specialFields' || field !== 'show_screen') {
// this.originalValues[formName][field] = context
// }
})
.catch(() => {
this.$message.error(`${this.getFieldLabel(formName, field)}更新失败`)
this.rollbackValue(formName, field)
})
},
//
rollbackValue(formName, field) {
if (this.originalValues[formName]?.[field] !== undefined) {
if (formName === 'title') {
this.screen_title = this.originalValues[formName][field]
} else if (formName === 'specialFields' && field.startsWith('show') && field !== 'show_screen') {
//
const screenItem = this.screenItems.find(item => item.code === field)
if (screenItem) {
screenItem.time = this.originalValues[formName][field]
screenItem.originalTime = this.originalValues[formName][field]
}
} else if (formName === 'specialFields') {
this[field] = this.originalValues[formName][field]
} else {
this[formName][field] = this.originalValues[formName][field]
//
if (formName === 'librarySettingForm') {
const originalChecked = this.originalValues[formName][`${field}_checked`]
if (originalChecked !== undefined) {
this[formName][`${field}_checked`] = originalChecked
}
}
}
}
},
getFieldLabel(formName, field) {
const labels = {
openForm: {
open_lib_http: '域名地址',
open_lib_appId: 'AppId',
open_lib_secret: 'Secret',
sm4_key: 'SM4密钥',
opac_url: 'OPAC地址'
},
vxForm: {
vx_mini_appId: '微信小程序AppID',
vx_mini_secret: '微信小程序Secret'
},
adminForm: {
op_user: '管理员账号'
}
}
return labels[formName][field] || field
}
}
}
</script>
<style scoped lang="scss">
@import "~@/assets/styles/digitalScreen.scss";
.content-area {
height: 734px;
border-radius: 4px;
width: 100%;
}
</style>
Loading…
Cancel
Save