Compare commits

..

No commits in common. "master" and "yaooo" have entirely different histories.

332 changed files with 630 additions and 2642 deletions

View File

@ -62,8 +62,5 @@
</div>
</div>
<script type="module" src="/src/main.ts"></script>
<script src="/jessibuca.js"></script>
<script src="/decoder.js"></script>
<script src="/decoder.wasm"></script>
</body>
</html>

View File

@ -21,7 +21,6 @@
"highlight.js": "^11.6.0",
"nprogress": "^0.2.0",
"pinia": "^2.0.14",
"uuid": "^9.0.1",
"vue": "^3.2.37",
"vue-clipboard3": "^2.0.0",
"vue-echarts": "^6.2.3",
@ -35,7 +34,6 @@
"@types/lodash-es": "^4.17.6",
"@types/node": "^16.11.41",
"@types/nprogress": "^0.2.0",
"@types/uuid": "^9.0.7",
"@vitejs/plugin-legacy": "^2.3.1",
"@vitejs/plugin-vue": "^3.0.0",
"@vitejs/plugin-vue-jsx": "^2.0.0",
@ -901,12 +899,6 @@
"@types/node": "*"
}
},
"node_modules/@types/uuid": {
"version": "9.0.7",
"resolved": "https://registry.npmmirror.com/@types/uuid/-/uuid-9.0.7.tgz",
"integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==",
"dev": true
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.14",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz",
@ -7054,14 +7046,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@ -8113,12 +8097,6 @@
"@types/node": "*"
}
},
"@types/uuid": {
"version": "9.0.7",
"resolved": "https://registry.npmmirror.com/@types/uuid/-/uuid-9.0.7.tgz",
"integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==",
"dev": true
},
"@types/web-bluetooth": {
"version": "0.0.14",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz",
@ -13078,11 +13056,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
"uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
},
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",

View File

@ -22,7 +22,6 @@
"highlight.js": "^11.6.0",
"nprogress": "^0.2.0",
"pinia": "^2.0.14",
"uuid": "^9.0.1",
"vue": "^3.2.37",
"vue-clipboard3": "^2.0.0",
"vue-echarts": "^6.2.3",
@ -36,7 +35,6 @@
"@types/lodash-es": "^4.17.6",
"@types/node": "^16.11.41",
"@types/nprogress": "^0.2.0",
"@types/uuid": "^9.0.7",
"@vitejs/plugin-legacy": "^2.3.1",
"@vitejs/plugin-vue": "^3.0.0",
"@vitejs/plugin-vue-jsx": "^2.0.0",

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,19 +0,0 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<script src="./jessibuca.js"></script>
</head>
<body class="page">
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,27 +0,0 @@
import request from '@/utils/request'
// 省列表
export function apiProvinceList(params: any) {
return request.get({ url: '/common/province', params })
}
// 市列表
export function apiCityList(params: any) {
return request.get({ url: '/common/city', params })
}
// 区列表
export function apiAreaList(params: any) {
return request.get({ url: '/common/area', params })
}
// 镇列表
export function apiStreetList(params: any) {
return request.get({ url: '/common/street', params })
}
// 村列表
export function apiVillageList(params: any) {
return request.get({ url: '/common/village', params })
}
// 队列表
export function apiBrigadeList() {
return request.get({ url: '/common/brigade' })
}

View File

@ -19,8 +19,3 @@ export function userEdit(params: any) {
export function adjustMoney(params: any) {
return request.post({ url: '/user.user/adjustMoney', params })
}
//添加用户
export function addUser(params: any) {
return request.post({ url: '/user.user/add', params })
}

View File

@ -7,7 +7,7 @@ export function getUserList(params: any) {
// 产品列表列表
export function apiProductLists(params: any) {
return request.get({ url: '/land.product/datas', params })
return request.get({ url: '/land.product/lists', params })
}
// 监测设备列表

View File

@ -2,12 +2,12 @@ import request from '@/utils/request'
// 用户列表
export function getUserList(params: any) {
return request.get({ url: '/user.user/datas', params }, { ignoreCancelToken: true })
return request.get({ url: '/user.user/lists', params }, { ignoreCancelToken: true })
}
// 产品列表列表
export function apiProductLists(params: any) {
return request.get({ url: '/land.product/datas', params })
return request.get({ url: '/land.product/lists', params })
}
// 土地表列表
@ -38,9 +38,4 @@ export function apiLandDetail(params: any) {
// 绑定产品
export function apiLandBind(params: any) {
return request.post({ url: '/land.land/bind', params })
}
// 用户信息
export function getUserInfo() {
return request.get({ url: '/auth.admin/mySelf' })
}

View File

@ -2,12 +2,12 @@ import request from '@/utils/request'
// 用户列表
export function getUserList(params: any) {
return request.get({ url: '/user.user/datas', params }, { ignoreCancelToken: true })
return request.get({ url: '/user.user/lists', params }, { ignoreCancelToken: true })
}
// 土地表列表
export function apiLandLists(params: any) {
return request.get({ url: '/land.land/datas', params })
return request.get({ url: '/land.land/lists', params })
}
// 产品列表列表
@ -17,7 +17,7 @@ export function apiProductLists(params: any) {
// 监测设备列表
export function apiDeviceLists(params: any) {
return request.get({ url: '/device.device/datas', params })
return request.get({ url: '/device.device/lists', params })
}
@ -44,9 +44,4 @@ export function apiProductDetail(params: any) {
// 绑定设备
export function apiProductBind(params: any) {
return request.post({ url: '/land.product/bind', params })
}
// 用户信息
export function getUserInfo() {
return request.get({ url: '/auth.admin/mySelf' })
}

View File

@ -1,363 +0,0 @@
<template>
<div class="rot" >
<div class="container-shell">
<div class="option" style="display: none;">
<input
style="width: 50px"
type="number"
ref="buffer"
value="0.2"
@change="changeBuffer"
/>
<input
type="checkbox"
v-model="useMSE"
ref="vod"
@change="restartPlay('mse')"
/><span>MediaSource</span>
<input
type="checkbox"
v-model="useWCS"
ref="vod"
@change="restartPlay('wcs')"
/><span>webcodecs</span>
</div>
<div id="container" ref="container"></div>
<div class="input" style="display: none;">
<div>输入URL</div>
<input
type="input"
autocomplete="on"
ref="playUrl"
:value="video_url"
/>
<button v-if="!playing" @click="play">播放</button>
<button v-else @click="pause">停止</button>
</div>
</div>
</div>
</template>
<script>
export default {
name: "VideoPlayer",
props: {
video_url: String
},
data() {
return {
jessibuca: null,
version: '',
wasm: false,
videoUrl:'',
vc: "ff",
playing: false,
quieting: true,
loaded: false, // mute
showOperateBtns: false,
showBandwidth: false,
err: "",
speed: 0,
performance: "",
volume: 1,
rotate: 0,
useWCS: false,
useMSE: true,
useOffscreen: false,
recording: false,
recordType: 'webm',
scale: 0
};
},
mounted() {
this.create();
this.videoUrl = this.video_url
window.onerror = (msg) => (this.err = msg);
setTimeout( ()=>{
this.play()
},2000 )
},
unmounted() {
this.jessibuca.destroy();
},
methods: {
create(options) {
options = options || {};
this.jessibuca = new window.Jessibuca(
Object.assign(
{
container: this.$refs.container,
videoBuffer: Number(this.$refs.buffer.value), //
isResize: false,
useWCS: this.useWCS,
useMSE: this.useMSE,
text: "",
loadingText: "疯狂加载中...",
debug: false,
decoder:"/decoder.js",
supportDblclickFullscreen: true,
showBandwidth: this.showBandwidth, //
operateBtns: {
fullscreen: this.showOperateBtns,
screenshot: this.showOperateBtns,
play: this.showOperateBtns,
audio: this.showOperateBtns,
},
vod: this.vod,
forceNoOffscreen: !this.useOffscreen,
isNotMute: true,
timeout: 10
},
options
)
);
let _this = this;
this.jessibuca.on("load", function () {
console.log("on load");
});
this.jessibuca.on("log", function (msg) {
console.log("on log", msg);
});
this.jessibuca.on("record", function (msg) {
console.log("on record:", msg);
});
this.jessibuca.on("pause", function () {
console.log("on pause");
_this.playing = false;
});
this.jessibuca.on("play", function () {
console.log("on play");
_this.playing = true;
});
this.jessibuca.on("fullscreen", function (msg) {
console.log("on fullscreen", msg);
});
this.jessibuca.on("mute", function (msg) {
console.log("on mute", msg);
_this.quieting = msg;
});
this.jessibuca.on("mute", function (msg) {
console.log("on mute2", msg);
});
this.jessibuca.on("audioInfo", function (msg) {
console.log("audioInfo", msg);
});
this.jessibuca.on("videoInfo", function (info) {
console.log("videoInfo", info);
});
this.jessibuca.on("error", function (error) {
console.log("error", error);
});
this.jessibuca.on("timeout", function () {
console.log("timeout");
});
this.jessibuca.on('start', function () {
console.log('frame start');
})
this.jessibuca.on("performance", function (performance) {
var show = "卡顿";
if (performance === 2) {
show = "非常流畅";
} else if (performance === 1) {
show = "流畅";
}
_this.performance = show;
});
this.jessibuca.on('buffer', function (buffer) {
console.log('buffer', buffer);
})
this.jessibuca.on('stats', function (stats) {
console.log('stats', stats);
})
this.jessibuca.on('kBps', function (kBps) {
console.log('kBps', kBps);
});
this.jessibuca.on("play", () => {
this.playing = true;
this.loaded = true;
this.quieting = this.jessibuca.isMute();
});
this.jessibuca.on('recordingTimestamp', (ts) => {
console.log('recordingTimestamp', ts);
})
},
play() {
if (this.$refs.playUrl.value) {
this.jessibuca.play(this.$refs.playUrl.value);
}
},
mute() {
this.jessibuca.mute();
},
cancelMute() {
this.jessibuca.cancelMute();
},
pause() {
this.jessibuca.pause();
this.playing = false;
this.err = "";
this.performance = "";
},
volumeChange() {
this.jessibuca.setVolume(this.volume);
},
rotateChange() {
this.jessibuca.setRotate(this.rotate);
},
destroy() {
if (this.jessibuca) {
this.jessibuca.destroy();
}
this.create();
this.playing = false;
this.loaded = false;
this.performance = "";
},
fullscreen() {
this.jessibuca.setFullscreen(true);
},
clearView() {
this.jessibuca.clearView();
},
startRecord() {
const time = new Date().getTime();
this.jessibuca.startRecord(time, this.recordType);
},
stopAndSaveRecord() {
this.jessibuca.stopRecordAndSave();
},
screenShot() {
this.jessibuca.screenshot();
},
restartPlay(type) {
if (type === 'mse') {
this.useWCS = false;
this.useOffscreen = false;
} else if (type === 'wcs') {
this.useMSE = false
} else if (type === 'offscreen') {
this.useMSE = false
}
this.destroy();
setTimeout(() => {
this.play();
}, 100)
},
changeBuffer() {
this.jessibuca.setBufferTime(Number(this.$refs.buffer.value));
},
scaleChange() {
this.jessibuca.setScaleMode(this.scale);
},
},
};
</script>
<style>
.root {
display: flex;
place-content: center;
margin-top: 3rem;
}
.container-shell {
position: relative;
backdrop-filter: blur(5px);
width: auto;
position: relative;
border-radius: 5px;
}
.container-shell-title {
position: absolute;
color: darkgray;
top: 4px;
left: 10px;
text-shadow: 1px 1px black;
}
#container {
width: 55vw;
height: 30vw;
}
.input {
display: flex;
align-items: center;
margin-top: 10px;
color: white;
place-content: stretch;
}
.input2 {
bottom: 0px;
}
.input input[type='input'] {
flex: auto;
}
.err {
position: absolute;
top: 40px;
left: 10px;
color: red;
}
.option {
position: absolute;
top: 4px;
right: 10px;
display: flex;
place-content: center;
font-size: 12px;
}
.option span {
color: white;
}
.page {
background-repeat: no-repeat;
background-position: top;
}
@media (max-width: 720px) {
#container {
width: 90vw;
height: 52.7vw;
}
}
</style>

View File

@ -2,9 +2,7 @@ const config = {
terminal: 1, //终端
title: '后台管理系统', //网站默认标题
version: '1.6.0', //版本号
baseUrl: `${
import.meta.env.VITE_APP_BASE_URL
}/`, //请求接口域名
baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名
// baseUrl: 'http://127.0.0.1:30005/',
urlPrefix: 'adminapi', //请求默认前缀
timeout: 10 * 1000 //请求超时时长

View File

@ -4,9 +4,7 @@ import install from './install'
import './permission'
import './styles/index.scss'
import 'virtual:svg-icons-register'
import configs from './config/index'
const app = createApp(App)
app.use(install)
app.provide('base_url', configs.baseUrl+configs.urlPrefix);
app.mount('#app')

View File

@ -25,14 +25,13 @@
</div>
</div> -->
</div>
<el-form-item label="账号:">
{{ formData.account }}
</el-form-item>
<el-form-item label="用户编号:"> {{ formData.sn }} </el-form-item>
<el-form-item label="用户昵称:">
{{ formData.nickname }}
</el-form-item>
<el-form-item label="账号:">
{{ formData.account }}
</el-form-item>
<el-form-item label="真实姓名:">
{{ formData.real_name || '-' }}
<popover-input

View File

@ -30,7 +30,6 @@
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<el-button @click="dialogFormVisible=true">创建</el-button>
</el-form-item>
</el-form>
</el-card>
@ -51,7 +50,7 @@
<el-table-column label="注册时间" prop="create_time" min-width="120" />
<el-table-column label="操作" width="200" align="center" fixed="right">
<template #default="{ row }">
<el-button type="primary" link>
<el-button v-perms="['land.land/lists']" type="primary" link>
<router-link
:to="{
path: getRoutePath('land.land/lists'),
@ -82,33 +81,12 @@
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<el-dialog v-model="dialogFormVisible" title="添加用户" width="30%">
<el-form :model="form" ref="addForm">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="form.mobile" autocomplete="off" />
<span>
<el-icon><Pointer /></el-icon>
初始密码:123456
</span>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogFormVisible = false">取消</el-button>
<el-button type="primary" @click="addUser">
确定
</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="consumerLists">
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'
import { getUserList, addUser as addUserApi } from '@/api/consumer'
import { ElMessage } from 'element-plus'
import { getUserList } from '@/api/consumer'
import { ClientMap } from '@/enums/appEnums'
const queryParams = reactive({
keyword: '',
@ -125,21 +103,5 @@ onActivated(() => {
getLists()
})
const dialogFormVisible = ref(false)
const form = reactive({
"mobile": ""
})
const addForm = ref()
const addUser = () => {
addUserApi(form).then(() => {
ElMessage({
message: '用户添加成功',
type: 'success',
})
addForm.value.resetFields()
dialogFormVisible.value = false
getLists()
})
}
getLists()
</script>

View File

@ -10,39 +10,37 @@
</div>
</template>
<div class="flex flex-wrap">
<div v-if="deviceData.device.land_id != ''" class="w-1/2 mb-4 md:w-1/3">
<div v-if="deviceData.device.land_id != ''" class="w-1/2 md:w-1/3 mb-4">
<div class="leading-10">所属土地</div>
<div class="text-3xl text-tx-gray">ID{{ deviceData.device.land_id }} / 名称{{
deviceData.device.land_title }}</div>
<div class="text-3xl text-tx-gray">ID{{ deviceData.device.land_id }} / 名称{{ deviceData.device.land_title }}</div>
</div>
<div v-if="deviceData.device.product_id != ''" class="w-1/2 mb-4 md:w-1/3">
<div v-if="deviceData.device.product_id != ''" class="w-1/2 md:w-1/3 mb-4">
<div class="leading-10">所属产品</div>
<div class="text-3xl text-tx-gray">ID{{ deviceData.device.product_id }} / 名称{{
deviceData.device.product_name }}</div>
<div class="text-3xl text-tx-gray">ID{{ deviceData.device.product_id }} / 名称{{ deviceData.device.land_title }}</div>
</div>
</div>
<div class="flex flex-wrap">
<div class="w-1/2 mb-4 md:w-1/6">
<div class="w-1/2 md:w-1/6 mb-4">
<div class="leading-10">设备名称</div>
<div class="text-3xl text-tx-gray">{{ deviceData.device.name }}</div>
</div>
<div class="w-1/2 mb-4 md:w-1/6">
<div class="w-1/2 md:w-1/6 mb-4">
<div class="leading-10">设备编码</div>
<div class="text-3xl text-tx-gray">{{ deviceData.device.code }}</div>
</div>
<div class="w-1/2 mb-4 md:w-1/6">
<div class="w-1/2 md:w-1/6 mb-4">
<div class="leading-10">设备类型</div>
<div class="text-3xl text-tx-gray">
<dict-value :options="dictData.device_type" :value="deviceData.device.type" />
</div>
</div>
<div class="w-1/2 mb-4 md:w-1/6">
<div class="w-1/2 md:w-1/6 mb-4">
<div class="leading-10">设备状态</div>
<div class="text-3xl text-tx-gray">
<dict-value :options="dictData.device_status" :value="deviceData.device.status" />
</div>
</div>
<div class="w-1/2 mb-4 md:w-1/6">
<div class="w-1/2 md:w-1/6 mb-4">
<div class="leading-10">是否在线</div>
<div class="text-3xl text-tx-gray">
<dict-value :options="dictData.device_online_status" :value="deviceData.device.is_online" />
@ -53,35 +51,30 @@
<el-card class="!border-none mt-4 flex-1" shadow="never">
<el-tabs v-model="activeName" class="">
<!-- <el-tab-pane v-if="deviceData.device.type==3" label="监控视频" name="monitor_video"> -->
<el-tab-pane label="监控视频" name="monitor_video" style="width:100vw;padding-left: 15vw;">
<Jessibuca v-if="deviceData.device.video_url != '' && showVideo " :video_url="deviceData.device.video_url"></Jessibuca>
<!-- <Jessibuca
:video_url="'http://rtsp.lihaink.cn/live/lihai_lot_walnutpi_dev_6.live.flv?secret=ywdtp2llj80ha19jhmxl4po99nsmaynt'">
</Jessibuca> -->
</el-tab-pane>
<el-tab-pane label="监控数据" name="monitor_item">
<el-row :gutter="12">
<el-col :span="6" v-for="item in deviceData.monitor_item" :key="item">
<el-card shadow="always" class="mb-4">
<el-card shadow="always" class="mb-4">
<div class="flex justify-between mb-2">
<div class="mt-2 text-sm text-tx-secondary">{{ item.name }}</div>
<div class="mt-2 text-sm text-tx-secondary" style="cursor: pointer;"
@click="handleClick(item.device_id, item.value)">
<div class="mt-2 text-sm text-tx-secondary" style="cursor: pointer;" @click="handleClick(item.device_id, item.value)">
历史数据
</div>
</div>
<div class="my-6 text-3xl">{{ item.monitor_value }}</div>
<div class="mt-2 text-sm text-tx-secondary"><el-tag class="mr-2" type="info">只读</el-tag>{{
item.last_time }}</div>
<div class="mt-2 text-sm text-tx-secondary"><el-tag class="mr-2" type="info">只读</el-tag>{{ item.last_time }}</div>
</el-card>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="deviceData.device.type==3" label="监控视频" name="monitor_video">
<video
v-if="deviceData.device.video_url != ''"
:src="deviceData.device.video_url"
controls
></video>
</el-tab-pane>
</el-tabs>
</el-card>
</div>
@ -92,21 +85,25 @@
<el-table-column property="date" label="时间" width="250" />
<el-table-column property="value" label="数据" />
</el-table>
<el-pagination small background layout="prev, pager, next" :page-size="queryMonitorData.page_size"
:total="queryMonitorData.total" class="mt-4" @current-change="handleCurrentChange" />
</el-dialog>
<el-pagination
small
background
layout="prev, pager, next"
:page-size="queryMonitorData.page_size"
:total="queryMonitorData.total"
class="mt-4"
@current-change="handleCurrentChange"
/>
</el-dialog>
</template>
<script lang="ts" setup name="deviceDetail">
import { ref } from 'vue'
import Jessibuca from '@/components/jessibuca/Jessibuca.vue'
import { useDictData } from '@/hooks/useDictOptions'
import { apiDeviceDetail, apiDeviceMonitorData } from '@/api/device'
import { timeFormat } from '@/utils/util'
import {useRoute} from "vue-router"
const activeName = ref('monitor_video')
const activeName = ref('monitor_item')
const deviceData: any = reactive({
device: {},
monitor_item: []
@ -128,9 +125,6 @@ const getDetails = async () => {
id: route.query.device_id
})
.then((res: any) => {
scoketData.username = res.account
scoketData.device = res.id
// pullStream(scoketData)
deviceData.device.name = res.name
deviceData.device.code = res.code
deviceData.device.type = res.type
@ -210,38 +204,4 @@ const handleCurrentChange = (val: number) => {
console.log('err', err)
})
}
// scoket
const scoketData = reactive({
username: '',
device: '',
scence: 2,
})
const showVideo=ref(false)
const socket = new WebSocket('wss://iot.lihaink.cn/test');
const pullStream = (data: object) => {
const onSocketOpen = (event: any) => {
console.log("scoket打开")
socket.send(JSON.stringify(data));
showVideo.value=true
}
const onSocketClose = (event: any) => {
console.log('WebSocket连接已关闭');
}
const onSocketError = (event: any) => {
console.error('WebSocket连接发生错误');
}
socket.addEventListener('open', onSocketOpen);
socket.addEventListener('close', onSocketClose);
socket.addEventListener('error', onSocketError);
}
pullStream( {
username:route.query.userName,
device: 'lihai_lot_walnutpi_dev_' + route.query.device_id,
scence:'web'
})
onBeforeUnmount(() => {
socket.close()
})
</script>

View File

@ -23,50 +23,26 @@
</el-select>
</el-form-item>
<el-form-item label="所属产品" prop="product_id">
<el-select
<el-select
v-model="formData.product_id"
remote
filterable
remote
reserve-keyword
placeholder="请输入产品信息"
:remote-method="queryProduct"
:loading="loading"
>
<el-option
v-for="(item, index) in optionsData.product"
:key="index"
:label="item.productinfo"
:value="item.id"
/>
<el-option
v-for="item in productOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="设备编码" prop="code">
<el-input v-model="formData.code" clearable placeholder="请输入设备编码" />
</el-form-item>
<el-form-item label="产品图" prop="image">
<el-upload
class="avatar-uploader"
:accept="acceptFileTypes"
v-model="formData.image"
:data="{ cid: 1 }"
:headers="{ Token: userStore.token }"
:action="action"
:show-file-list="false"
:on-success="handleAvatarSuccessAvatar"
>
<img
v-if="formData.image"
:src="formData.image"
class="avatar"
/>
<div v-else class="avatar-uploader-icon">
<el-icon>
<Plus />
</el-icon>
</div>
</el-upload>
</el-form-item>
<el-form-item label="监测项" prop="monitor_item">
<el-select class="flex-1" v-model="formData.monitor_item" multiple clearable placeholder="请选择设备监测项">
<el-option
@ -106,16 +82,11 @@
</template>
<script lang="ts" setup name="deviceEdit">
import { useDictOptions } from '@/hooks/useDictOptions'
import {type FormInstance } from 'element-plus'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiDeviceAdd, apiDeviceEdit, apiDeviceDetail, getUserList, apiProductLists} from '@/api/device'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import {ref} from "vue";
import config from "@/config";
import useUserStore from "@/stores/modules/user";
import {ElMessage, type UploadProps} from "element-plus";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -126,19 +97,7 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const acceptFileTypes = ref(".png, .jpg, .jpeg, image/png, image/jpeg")
const action = ref(`${config.baseUrl}${config.urlPrefix}/upload/image`)
const userStore = useUserStore()
const handleAvatarSuccessAvatar: UploadProps["onSuccess"] = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formData.image = response.data.uri;
}
//
const popupTitle = computed(() => {
@ -156,7 +115,6 @@ const formData = reactive({
monitor_item: '',
status: '',
is_online: '',
image: ''
})
//
@ -199,26 +157,31 @@ const setFormData = async (data: Record<any, any>) => {
}
}
const { optionsData } = useDictOptions<{
product: any[]
}>({
product: {
api: apiProductLists,
params: {
all: 1
}
}
})
interface ListItem {
value: string
label: string
}
const productOptions = ref<ListItem[]>([])
const loading = ref(false)
const queryProduct = async (query: string) => {
loading.value = true
const productList = await apiProductLists({
name: query ?? ''
})
optionsData.product = productList
loading.value = false
if (query) {
loading.value = true
const productList = await apiProductLists({
name: query
})
loading.value = false
if (productList.count > 0) {
productOptions.value = productList.lists.map((product: any) => {
return { value: `${product.id}`, label: `ID: ${product.id} / 名称: ${product.name}` }
})
} else {
productOptions.value = []
}
loading.value = false
} else {
productOptions.value = []
}
}
@ -260,35 +223,3 @@ defineExpose({
getDetail
})
</script>
<style scoped>
.avatar-uploader .avatar {
width: 178px;
height: 178px;
display: block;
}
</style>
<style>
.avatar-uploader .el-upload {
width: 200px;
height: 130px;
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
text-align: center;
}
</style>

View File

@ -1,23 +1,17 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="用户ID" prop="user_id">
<el-input
class="w-[280px]"
v-model="queryParams.user_id"
clearable
placeholder="请输入用户ID"
/>
</el-form-item>
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="用户ID" prop="user_id">
<el-input class="w-[280px]" v-model="queryParams.user_id" clearable placeholder="请输入用户ID" />
</el-form-item>
<el-form-item label="土地ID" prop="land_id">
<el-input
class="w-[280px]"
v-model="queryParams.land_id"
clearable
placeholder="请输入土地ID"
/>
</el-form-item>
<el-input class="w-[280px]" v-model="queryParams.land_id" clearable placeholder="请输入土地ID" />
</el-form-item>
<el-form-item label="产品ID" prop="product_id">
<el-input
class="w-[280px]"
@ -25,71 +19,46 @@
clearable
placeholder="请输入产品ID"
/>
</el-form-item>
</el-form-item>
<el-form-item label="设备编码" prop="code">
<el-input
class="w-[280px]"
v-model="queryParams.code"
clearable
placeholder="请输入设备编码"
/>
</el-form-item>
<el-input class="w-[280px]" v-model="queryParams.code" clearable placeholder="请输入设备编码" />
</el-form-item>
<el-form-item label="设备名称" prop="name">
<el-input
class="w-[280px]"
v-model="queryParams.name"
clearable
placeholder="请输入设备名称"
/>
</el-form-item>
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="设备类型" prop="type">
<el-select
class="w-[280px]"
v-model="queryParams.type"
clearable
placeholder="请选择设备类型"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.device_type"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-select class="w-[280px]" v-model="queryParams.type" clearable placeholder="请选择设备类型">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.device_type"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="设备状态" prop="status">
<el-select
class="w-[280px]"
v-model="queryParams.status"
clearable
placeholder="请选择设备状态"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.device_status"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-select class="w-[280px]" v-model="queryParams.status" clearable placeholder="请选择设备状态">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.device_status"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否在线" prop="is_online">
<el-select
class="w-[280px]"
v-model="queryParams.is_online"
clearable
placeholder="请选择是否在线"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.device_online_status"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-select class="w-[280px]" v-model="queryParams.is_online" clearable placeholder="请选择是否在线">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.device_online_status"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -111,11 +80,7 @@
删除
</el-button>
<div class="mt-4">
<el-table
:data="pager.lists"
@selection-change="handleSelectionChange"
style="width: 100%"
>
<el-table :data="pager.lists" @selection-change="handleSelectionChange" style="width: 100%">
<el-table-column type="selection" width="55" />
<el-table-column label="ID" prop="id" width="80" show-overflow-tooltip />
<!-- <el-table-column label="用户信息" width="200">
@ -124,12 +89,7 @@
<el-tag class="mr-2" type="info">账户: {{ row.account }}</el-tag>
</template>
</el-table-column> -->
<el-table-column
label="设备名称"
width="200"
prop="name"
show-overflow-tooltip
/>
<el-table-column label="设备名称" width="200" prop="name" show-overflow-tooltip />
<el-table-column label="设备类型" width="150" prop="type">
<template #default="{ row }">
<dict-value :options="dictData.device_type" :value="row.type" />
@ -137,52 +97,32 @@
</el-table-column>
<el-table-column label="所属土地" width="200">
<template #default="{ row }">
<el-tag class="mr-2" v-if="row.land_id != null" type="info"
>ID: {{ row.land_id }}</el-tag
>
<el-tag class="mr-2" v-if="row.land_title != null" type="info"
>名称: {{ row.land_title }}</el-tag
>
<el-tag class="mr-2" type="info">ID: {{ row.land_id }}</el-tag>
<el-tag class="mr-2" type="info">名称: {{ row.land_title }}</el-tag>
</template>
</el-table-column>
<el-table-column label="所属产品" width="200">
<template #default="{ row }">
<el-tag class="mr-2" v-if="row.product_id != null" type="info"
>ID: {{ row.product_id }}</el-tag
>
<el-tag class="mr-2" v-if="row.product_name != null" type="info"
>名称: {{ row.product_name }}</el-tag
>
<el-tag class="mr-2" type="info">ID: {{ row.product_id }}</el-tag>
<el-tag class="mr-2" type="info">名称: {{ row.product_name }}</el-tag>
</template>
</el-table-column>
<el-table-column
label="设备编码"
width="120"
prop="code"
show-overflow-tooltip
/>
<el-table-column label="设备编码" width="120" prop="code" show-overflow-tooltip />
<el-table-column label="设备状态" width="100" align="center" prop="status">
<template #default="{ row }">
<dict-value :options="dictData.device_status" :value="row.status" />
</template>
</el-table-column>
<template #default="{ row }">
<dict-value :options="dictData.device_status" :value="row.status" />
</template>
</el-table-column>
<el-table-column label="是否在线" width="100" align="center" prop="is_online">
<template #default="{ row }">
<dict-value
:options="dictData.device_online_status"
:value="row.is_online"
/>
</template>
</el-table-column>
<el-table-column label="创建时间" width="160" align="center" prop="create_time">
<template #default="{ row }">
<span>{{
row.create_time
? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss')
: ''
}}</span>
</template>
</el-table-column>
<template #default="{ row }">
<dict-value :options="dictData.device_online_status" :value="row.is_online" />
</template>
</el-table-column>
<el-table-column label="创建时间" width="160" align="center" prop="create_time">
<template #default="{ row }">
<span>{{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="260" align="center" fixed="right">
<template #default="{ row }">
<el-button
@ -193,20 +133,27 @@
>
编辑
</el-button>
<el-button v-perms="['device.device/detail']" type="primary" link>
<el-button
v-perms="['device.device/detail']"
type="primary"
link
>
<router-link
:to="{
path: getRoutePath('device.device/detail'),
query: {
device_id: row.id,
userName:row.account
device_id: row.id
}
}"
>
详情
详情
</router-link>
</el-button>
<el-button v-perms="['device.monitor_alarm/lists']" type="primary" link>
<el-button
v-perms="['device.monitor_alarm/lists']"
type="primary"
link
>
<router-link
:to="{
path: getRoutePath('device.monitor_alarm/lists'),
@ -215,7 +162,7 @@
}
}"
>
报警
报警
</router-link>
</el-button>
<el-button
@ -230,17 +177,11 @@
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
@ -284,9 +225,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData(
'device_type,device_status,device_online_status,device_bind_status,monitor_item'
)
const { dictData } = useDictData('device_type,device_status,device_online_status,device_bind_status,monitor_item')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
@ -318,3 +257,4 @@ const handleDelete = async (id: number | any[]) => {
getLists()
</script>

View File

@ -21,20 +21,21 @@
/>
</el-form-item>
<el-form-item label="绑定产品" prop="product_id">
<el-select
<el-select
v-model="formData.product_id"
remote
filterable
remote
reserve-keyword
placeholder="请输入产品信息"
:remote-method="queryProduct"
:loading="loading"
>
<el-option
v-for="(item, index) in optionsData.product"
:key="index"
:label="item.productinfo"
:value="item.id"
/>
<el-option
v-for="item in productOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
@ -43,7 +44,6 @@
</template>
<script lang="ts" setup name="landEdit">
import { useDictOptions } from '@/hooks/useDictOptions'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiLandBind, apiProductLists } from '@/api/land'
@ -91,29 +91,37 @@ const setFormData = async (data: Record<any, any>) => {
}
}
const { optionsData } = useDictOptions<{
product: any[]
}>({
product: {
api: apiProductLists
}
})
interface ListItem {
value: string
label: string
}
const productOptions = ref<ListItem[]>([])
const loading = ref(false)
const queryProduct = async (query: string) => {
loading.value = true
const productList = await apiProductLists({
name: query ?? ''
})
optionsData.product = productList
loading.value = false
if (query) {
loading.value = true
const productList = await apiProductLists({
name: query
})
loading.value = false
if (productList.count > 0) {
productOptions.value = productList.lists.map((product: any) => {
return { value: `${product.id}`, label: `ID: ${product.id} / 名称: ${product.name}` }
})
} else {
productOptions.value = []
}
loading.value = false
} else {
productOptions.value = []
}
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
const data = { ...formData, }
await apiLandBind(data)
popupRef.value?.close()
emit('success')

View File

@ -9,21 +9,22 @@
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item v-if="formData.root == 1" label="所属用户" prop="user_id">
<el-form-item v-if="formData.root == 1" label="用户ID" prop="user_id">
<el-select
v-model="formData.user_id"
remote
filterable
remote
reserve-keyword
placeholder="请输入用户信息"
:remote-method="queryUser"
:loading="loading"
>
<el-option
v-for="(item, index) in optionsData.user"
:key="index"
:label="item.userinfo"
:value="item.id"
/>
<el-option
v-for="item in userOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="土地名称" prop="title">
@ -35,156 +36,64 @@
<el-form-item label="土地面积" prop="total_area">
<el-input v-model="formData.total_area" clearable placeholder="请输入土地面积" />
</el-form-item>
<!-- <el-form-item label="剩余面积" prop="residual_area">
<el-input v-model="formData.residual_area" clearable disabled placeholder="请输入剩余面积" />
</el-form-item> -->
<el-form-item
label="省"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"
prop="province_code"
>
<el-select
v-model="formData.province_code"
placeholder="请选择省"
clearable
@change="province_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.provinceOptions"
:key="index"
:label="item.province_name"
:value="item.province_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="市"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"
prop="city_code"
>
<el-select
v-model="formData.city_code"
placeholder="请选择市"
clearable
@change="city_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.cityOptions"
:key="index"
:label="item.city_name"
:value="item.city_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="区"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"
prop="county_code"
>
<el-select
v-model="formData.county_code"
placeholder="请选择区"
clearable
@change="area_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.areaOptions"
:key="index"
:label="item.county_name"
:value="item.county_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="镇"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"
prop="town_code"
>
<el-select
v-model="formData.town_code"
placeholder="请选择镇"
clearable
@change="street_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.streetOptions"
:key="index"
:label="item.town_name"
:value="item.town_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="村"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"
prop="village_code"
>
<el-select
v-model="formData.village_code"
placeholder="请选择村"
clearable
@change="village_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.villageOptions"
:key="index"
:label="item.village_name"
:value="item.village_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="队"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"
prop="group_code"
>
<el-select
v-model="formData.group_code"
placeholder="请选择队"
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.brigadeOptions"
:key="index"
:label="item.group_name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="剩余面积" prop="residual_area">
<el-input v-model="formData.residual_area" clearable placeholder="请输入剩余面积" />
</el-form-item>
<el-form-item label="省编码" prop="province_code">
<el-input v-model="formData.province_code" clearable placeholder="请输入省编码" />
</el-form-item>
<el-form-item label="省名称" prop="province_name">
<el-input v-model="formData.province_name" clearable placeholder="请输入省名称" />
</el-form-item>
<el-form-item label="市编码" prop="city_code">
<el-input v-model="formData.city_code" clearable placeholder="请输入市编码" />
</el-form-item>
<el-form-item label="市名称" prop="city_name">
<el-input v-model="formData.city_name" clearable placeholder="请输入市名称" />
</el-form-item>
<el-form-item label="县编码" prop="county_code">
<el-input v-model="formData.county_code" clearable placeholder="请输入县编码" />
</el-form-item>
<el-form-item label="县名称" prop="county_name">
<el-input v-model="formData.county_name" clearable placeholder="请输入县名称" />
</el-form-item>
<el-form-item label="镇编码" prop="town_code">
<el-input v-model="formData.town_code" clearable placeholder="请输入镇编码" />
</el-form-item>
<el-form-item label="镇名称" prop="town_name">
<el-input v-model="formData.town_name" clearable placeholder="请输入镇名称" />
</el-form-item>
<el-form-item label="村编码" prop="village_code">
<el-input v-model="formData.village_code" clearable placeholder="请输入村编码" />
</el-form-item>
<el-form-item label="村名称" prop="village_name">
<el-input v-model="formData.village_name" clearable placeholder="请输入村名称" />
</el-form-item>
<el-form-item label="组编码" prop="group_code">
<el-input v-model="formData.group_code" clearable placeholder="请输入组编码" />
</el-form-item>
<el-form-item label="组名称" prop="group_name">
<el-input v-model="formData.group_name" clearable placeholder="请输入组名称" />
</el-form-item>
<el-form-item label="土地负责人" prop="master_name">
<el-input v-model="formData.master_name" clearable placeholder="请输入土地负责人" />
</el-form-item>
<el-form-item label="负责人电话" prop="master_phone">
<el-input v-model="formData.master_phone" clearable placeholder="请输入负责人电话" />
</el-form-item>
<!-- <el-form-item label="土地图片" prop="pic">
<el-form-item label="土地图片" prop="pic">
<material-picker v-model="formData.pic" :limit="4" />
</el-form-item> -->
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="landEdit">
import { useDictOptions } from '@/hooks/useDictOptions'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiLandAdd, apiLandEdit, apiLandDetail, getUserList, getUserInfo } from '@/api/land'
import {
apiCityList,
apiAreaList,
apiStreetList,
apiProvinceList,
apiVillageList,
apiBrigadeList,
} from "@/api/common";
import { apiLandAdd, apiLandEdit, apiLandDetail, getUserList } from '@/api/land'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -199,15 +108,9 @@ const mode = ref('add')
//
const popupTitle = computed(() => {
if (mode.value == 'edit') {
getCityList();
getAreaList();
getStreetList();
getVillageList();
getBrigadeList();
}
return mode.value == 'edit' ? '编辑土地' : '新增土地'
})
//
const formData = reactive({
id: '',
@ -231,8 +134,7 @@ const formData = reactive({
master_name: '',
master_phone: '',
address: '',
pic: '',
mode: mode.value
pic: ''
})
//
@ -280,23 +182,31 @@ const getDetail = async (row: Record<string, any>) => {
setFormData(data)
}
const { optionsData } = useDictOptions<{
user: any[]
}>({
user: {
api: getUserList
}
})
interface ListItem {
value: string
label: string
}
const userOptions = ref<ListItem[]>([])
const loading = ref(false)
const queryUser = async (query: string) => {
loading.value = true
const userList = await getUserList({
keyword: query ?? ''
})
optionsData.user = userList
loading.value = false
if (query) {
loading.value = true
const userList = await getUserList({
keyword: query
})
loading.value = false
if (userList.count > 0) {
userOptions.value = userList.lists.map((user: any) => {
return { value: `${user.id}`, label: `ID: ${user.id} / 账户: ${user.account}` }
})
} else {
userOptions.value = []
}
loading.value = false
} else {
userOptions.value = []
}
}
//
@ -314,14 +224,6 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getUserInfo()
.then((res: any) => {
const root = res.user.root ?? 0
formData.root = root
})
.catch((err: any) => {
console.log('err', err)
})
}
//
@ -329,87 +231,7 @@ const handleClose = () => {
emit('close')
}
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
streetOptions: [],
villageOptions: [],
brigadeOptions: [],
});
function province_change(value: string) {
getCityList();
//
datas['provinceOptions'].forEach((item: any) =>{
if(item.province_code == value) {
formData.province_name = item.province_name
}
})
}
function city_change(value: string) {
getAreaList();
}
function area_change(value: string) {
getStreetList();
}
function street_change(value: string) {
getVillageList();
}
function village_change(value: string) {
getBrigadeList();
}
// function brigade_change(value: string) {
// formData.brigade = value
// }
const getProvinceList = async () => {
const data = await apiProvinceList({});
datas["provinceOptions"] = data;
};
const getCityList = async () => {
const data = await apiCityList({ city: formData.province_code });
datas["cityOptions"] = data;
};
const getAreaList = async () => {
const data = await apiAreaList({ area: formData.city_code });
datas["areaOptions"] = data;
//
datas['cityOptions'].forEach((item: any) =>{
if(item.city_code == formData.city_code) {
formData.city_name = item.city_name
}
})
};
const getStreetList = async () => {
const data = await apiStreetList({ street: formData.county_code });
datas["streetOptions"] = data;
//
datas['areaOptions'].forEach((item: any) =>{
if(item.county_code == formData.county_code) {
formData.county_name = item.county_name
}
})
};
const getVillageList = async () => {
const data = await apiVillageList({ village: formData.town_code });
datas["villageOptions"] = data;
//
datas['streetOptions'].forEach((item: any) =>{
if(item.town_code == formData.town_code) {
formData.town_name = item.town_name
}
})
};
const getBrigadeList = async () => {
const data = await apiBrigadeList();
datas["brigadeOptions"] = data;
//
datas['villageOptions'].forEach((item: any) =>{
if(item.village_code == formData.village_code) {
formData.village_name = item.village_name
}
})
};
getProvinceList(); //
defineExpose({
open,

View File

@ -54,7 +54,7 @@
<el-table-column label="剩余面积" prop="residual_area" show-overflow-tooltip />
<el-table-column label="土地负责人" prop="master_name" show-overflow-tooltip />
<el-table-column label="负责人电话" prop="master_phone" show-overflow-tooltip />
<el-table-column label="操作" width="400" align="center" fixed="right">
<el-table-column label="操作" width="360" align="center" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['land.land/edit']"
@ -64,14 +64,14 @@
>
编辑
</el-button>
<el-button
<!-- <el-button
v-perms="['land.land/bind']"
type="primary"
link
@click="handleBind(row)"
>
绑定产品
</el-button>
</el-button> -->
<el-button
v-perms="['land.product/lists']"
type="primary"

View File

@ -52,9 +52,9 @@
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="种植图片" prop="pic">
<el-form-item label="种植图片" prop="pic">
<material-picker v-model="formData.pic" :limit="4" />
</el-form-item> -->
</el-form-item>
<el-form-item label="播种时间" prop="plant_date">
<el-date-picker
class="flex-1 !flex"
@ -104,6 +104,7 @@ const formData = reactive({
user: '',
remark: '',
status: '',
pic: '',
qr_code: '',
plant_date: ''
})

View File

@ -326,12 +326,6 @@ const actionMap = reactive<actionData>({
}
})
const irrigateMap = reactive<actionData>({
'1': '喷灌',
'2': '滴灌',
'3': '沟灌'
})
const landActionData = reactive({
gridData: [{}]
})
@ -372,9 +366,6 @@ const handleSuyuan = (data: any) => {
const item = actionMap[type][key] ?? '-'
for (const dkey in detail) {
if (dkey == key) {
if (type == 3 && key == 'type') {
detail[key] = irrigateMap[detail[key]]
}
landActionData.gridData.push({
item: item,
value: detail[key] ?? '-'

View File

@ -63,7 +63,7 @@
<span>{{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="260" align="center" fixed="right">
<el-table-column label="操作" width="200" align="center" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['land.land_plant_action/edit']"
@ -77,9 +77,6 @@
>
操作详情
</el-button>
<el-button type="primary" link @click="handlePicDetail(row)">
操作图片
</el-button>
<el-button
v-perms="['land.land_plant_action/delete']"
type="danger"
@ -105,22 +102,6 @@
<el-table-column property="value" label="操作内容" />
</el-table>
</el-dialog>
<el-dialog v-model="dialogPicVisible" title="种植操作图片" center>
<div style="display: inline-block; margin: 12px" v-for="img in detailData.picData" :key="img">
<el-image
style="width: 200px; height: 200px"
:src="img"
:zoom-rate="1.2"
:max-scale="5"
:min-scale="0.2"
:preview-src-list="detailData.picData"
:initial-index="4"
fit="cover"
center
/>
</div>
</el-dialog>
</template>
<script lang="ts" setup name="landPlantActionLists">
@ -203,11 +184,6 @@ const actionMap = reactive<actionData>({
}
})
const irrigateMap = reactive<actionData>({
'1': '喷灌',
'2': '滴灌',
'3': '沟灌'
})
//
const selectData = ref<any[]>([])
@ -225,11 +201,9 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
params: queryParams
})
const dialogPicVisible = ref(false)
const dialogTableVisible = ref(false)
const detailData = reactive({
gridData: [{}],
picData: [] as any[]
gridData: [{}]
})
//
@ -238,9 +212,6 @@ const handleDetail = (data: any) => {
detailData.gridData = [{}]
for (const key in actionMap[data.type]) {
const item = actionMap[data.type][key] ?? '-'
if (data.type == 3 && key == 'type') {
action[key] = irrigateMap[action[key]]
}
detailData.gridData.push({
item: item,
value: action[key] ?? '-'
@ -250,15 +221,6 @@ const handleDetail = (data: any) => {
dialogTableVisible.value = true
}
const handlePicDetail = (data: any) => {
detailData.picData = []
const picList = JSON.parse(data.detail)
for (const key in picList.pic) {
detailData.picData.unshift(picList.pic[key])
}
dialogPicVisible.value = true
}
//
const handleAdd = async () => {
showEdit.value = true

View File

@ -44,17 +44,17 @@
</template>
</el-table-column>
<el-table-column label="监测类型" align="center" prop="type">
<template #default="{ row }">
<dict-value :options="dictData.monitor_item" :value="row.type" />
</template>
</el-table-column>
<template #default="{ row }">
<dict-value :options="dictData.alarm_type" :value="row.type" />
</template>
</el-table-column>
<el-table-column label="报警内容" width="300" prop="content" show-overflow-tooltip />
<el-table-column label="报警数值" prop="value" show-overflow-tooltip />
<el-table-column label="报警时间" align="center" prop="create_time">
<template #default="{ row }">
<span>{{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<template #default="{ row }">
<span>{{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="140" align="center" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleDetail(row)"
@ -123,7 +123,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData('monitor_item')
const { dictData } = useDictData('alarm_type')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
@ -140,9 +140,9 @@ const detailData = reactive({
const handleDetail = (data: any) => {
detailData.gridData = [{}]
let deviceType = ''
for (const key in dictData['monitor_item']) {
if (dictData['monitor_item'][key]['value'] == data.type) {
deviceType = dictData['monitor_item'][key]['name']
for (const key in dictData['alarm_type']) {
if (dictData['alarm_type'][key]['value'] == data.type) {
deviceType = dictData['alarm_type'][key]['name']
}
}
detailData.gridData.unshift({

View File

@ -32,10 +32,10 @@
:loading="loading"
>
<el-option
v-for="(item, index) in optionsData.device"
:key="index"
:label="item.deviceinfo"
:value="item.id"
v-for="item in deviceOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
@ -45,7 +45,6 @@
</template>
<script lang="ts" setup name="landEdit">
import { useDictOptions } from '@/hooks/useDictOptions'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProductBind, apiDeviceLists } from '@/api/product'
@ -94,23 +93,31 @@ const setFormData = async (data: Record<any, any>) => {
}
}
const { optionsData } = useDictOptions<{
device: any[]
}>({
device: {
api: apiDeviceLists
}
})
interface ListItem {
value: string
label: string
}
const deviceOptions = ref<ListItem[]>([])
const loading = ref(false)
const queryDevice = async (query: string) => {
loading.value = true
const deviceList = await apiDeviceLists({
name: query ?? ''
})
optionsData.device = deviceList
loading.value = false
if (query) {
loading.value = true
const deviceList = await apiDeviceLists({
name: query
})
loading.value = false
if (deviceList.count > 0) {
deviceOptions.value = deviceList.lists.map((device: any) => {
return { value: `${device.id}`, label: `ID: ${device.id} / 名称: ${device.name}` }
})
} else {
deviceOptions.value = []
}
loading.value = false
} else {
deviceOptions.value = []
}
}
//

View File

@ -13,70 +13,24 @@
<el-input v-model="formData.name" clearable placeholder="请输入产品名称" />
</el-form-item>
<el-form-item label="产品编号" prop="code">
<el-input v-model="formData.code" clearable disabled placeholder="请输入产品编号" />
<el-input v-model="formData.code" clearable placeholder="请输入产品编号" />
</el-form-item>
<el-form-item label="产品介绍" prop="desc">
<el-input v-model="formData.desc" />
</el-form-item>
<el-form-item label="产品图" prop="image">
<el-upload
class="avatar-uploader"
:accept="acceptFileTypes"
v-model="formData.image"
:data="{ cid: 1 }"
:headers="{ Token: userStore.token }"
:action="action"
:show-file-list="false"
:on-success="handleAvatarSuccessAvatar"
>
<img
v-if="formData.image"
:src="formData.image"
class="avatar"
/>
<div v-else class="avatar-uploader-icon">
<el-icon>
<Plus />
</el-icon>
</div>
</el-upload>
</el-form-item>
<el-form-item v-if="formData.root == 1" label="所属用户" prop="user_id">
<el-select
v-model="formData.user_id"
remote
filterable
placeholder="请输入用户信息"
:remote-method="queryUser"
@change="selectedUser"
:loading="loading"
>
<el-option
v-for="(item, index) in optionsData.user"
:key="index"
:label="item.userinfo"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="所属土地" prop="land_id">
<el-select
v-model="formData.land_id"
remote
filterable
remote
reserve-keyword
placeholder="请输入土地信息"
:remote-method="queryLand"
:loading="loading"
>
<el-option
v-for="(item, index) in optionsData.land"
:key="index"
:label="item.landinfo"
:value="item.id"
/>
<el-option
v-for="item in landOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
@ -85,42 +39,23 @@
</template>
<script lang="ts" setup name="productEdit">
import { useDictOptions } from '@/hooks/useDictOptions'
import { type FormInstance,
type UploadProps,
ElMessage,
} from 'element-plus'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProductAdd, apiProductEdit, apiProductDetail, getUserList, getUserInfo, apiLandLists } from '@/api/product'
import { apiProductAdd, apiProductEdit, apiProductDetail, getUserList, apiLandLists } from '@/api/product'
import { timeFormat } from '@/utils/util'
import useUserStore from "@/stores/modules/user";
import type { PropType } from 'vue'
import {ref} from "vue";
import config from "@/config";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const acceptFileTypes = ref(".png, .jpg, .jpeg, image/png, image/jpeg")
const action = ref(`${config.baseUrl}${config.urlPrefix}/upload/image`)
const userStore = useUserStore()
const handleAvatarSuccessAvatar: UploadProps["onSuccess"] = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formData.image = response.data.uri;
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑产品' : '新增产品'
@ -129,13 +64,9 @@ const popupTitle = computed(() => {
//
const formData = reactive({
id: '',
user_id: '',
root: 0,
land_id: '',
code: '',
name: '',
desc: '',
image: '',
status: '',
})
@ -163,6 +94,7 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
//@ts-ignore
formData.create_time = timeFormat(formData.create_time,'yyyy-mm-dd hh:MM:ss')
}
@ -174,78 +106,49 @@ const getDetail = async (row: Record<string, any>) => {
setFormData(data)
}
const { optionsData } = useDictOptions<{
user: any[]
land: any[]
}>({
user: {
api: getUserList
},
land: {
api: apiLandLists
}
})
interface ListItem {
value: string
label: string
}
const landOptions = ref<ListItem[]>([])
const loading = ref(false)
const queryUser = async (query: string) => {
loading.value = true
const userList = await getUserList({
keyword: query ?? ''
})
optionsData.user = userList
loading.value = false
}
const selectedUser = (value: any) => {
optionsData.land = []
formData.land_id = ''
queryLand(value)
}
const queryLand = async (user_id: string) => {
loading.value = true
const landList = await apiLandLists({
user_id: user_id ?? ''
})
loading.value = false
optionsData.land = landList
loading.value = false
const queryLand = async (query: string) => {
if (query) {
loading.value = true
const landList = await apiLandLists({
title: query
})
loading.value = false
if (landList.count > 0) {
landOptions.value = landList.lists.map((land: any) => {
return { value: `${land.id}`, label: `ID: ${land.id} / 名称: ${land.title}` }
})
} else {
landOptions.value = []
}
loading.value = false
} else {
landOptions.value = []
}
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit' ? await apiProductEdit(data) : await apiProductAdd(data)
const data = { ...formData, }
mode.value == 'edit'
? await apiProductEdit(data)
: await apiProductAdd(data)
popupRef.value?.close()
emit('success')
}
const generateUuid = () => {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0
const v = c == 'x' ? r : (r & 0x3) | 0x8
return v.toString(16)
})
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
formData.code = generateUuid()
getUserInfo()
.then((res: any) => {
const root = res.user.root ?? 0
formData.root = root
if (type == 'edit') {
queryLand(formData.user_id)
}
})
.catch((err: any) => {
console.log('err', err)
})
}
//
@ -253,41 +156,11 @@ const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style scoped>
.avatar-uploader .avatar {
width: 178px;
height: 178px;
display: block;
}
</style>
<style>
.avatar-uploader .el-upload {
width: 200px;
height: 130px;
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
text-align: center;
}
</style>

View File

@ -70,8 +70,8 @@
<el-table-column label="产品编号" prop="code" show-overflow-tooltip />
<el-table-column label="所属土地" width="200">
<template #default="{ row }">
<el-tag class="mr-2" v-if="row.land_id != null" type="info">ID: {{ row.land_id }}</el-tag>
<el-tag class="mr-2" v-if="row.title != null" type="info">名称: {{ row.title }}</el-tag>
<el-tag class="mr-2" type="info">ID: {{ row.land_id }}</el-tag>
<el-tag class="mr-2" type="info">名称: {{ row.title }}</el-tag>
</template>
</el-table-column>
<el-table-column label="产品状态" align="center" prop="status">
@ -84,7 +84,7 @@
<span>{{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300" align="center" fixed="right">
<el-table-column label="操作" width="260" align="center" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['land.product/edit']"
@ -94,14 +94,14 @@
>
编辑
</el-button>
<el-button
<!-- <el-button
v-perms="['land.product/bind']"
type="primary"
link
@click="handleBind(row)"
>
绑定设备
</el-button>
</el-button> -->
<el-button v-perms="['device.device/lists']" type="primary" link >
<router-link
:to="{

View File

@ -497,11 +497,6 @@
dependencies:
"@types/node" "*"
"@types/uuid@^9.0.7":
version "9.0.7"
resolved "https://registry.npmmirror.com/@types/uuid/-/uuid-9.0.7.tgz"
integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==
"@types/web-bluetooth@^0.0.14":
version "0.0.14"
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz"
@ -4207,11 +4202,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2:
resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
uuid@^9.0.1:
version "9.0.1"
resolved "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
v8-compile-cache@^2.0.3:
version "2.3.0"
resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz"

View File

@ -1,46 +0,0 @@
<?php
namespace app\adminapi\controller;
use think\facade\Db;
class CommonController extends BaseAdminController
{
public array $notNeedLogin = ['city', 'area', 'street','village','brigade'];
//**省列表 */
public function province()
{
$data = Db::name('geo_province')->where(['switch' => 1])->select();
return $this->data($data->toArray());
} //**市列表 */
public function city($city)
{
$data = Db::name('geo_city')->where(['province_code' => $city])->select();
return $this->data($data->toArray());
}
//**区域列表 */
public function area($area)
{
$data = Db::name('geo_county')->where(['city_code' => $area])->select();
return $this->data($data->toArray());
}
//**街道列表 */
public function street($street)
{
$data = Db::name('geo_town')->where(['county_code' => $street])->select();
return $this->data($data->toArray());
}
//**村列表 */
public function village($village)
{
$data = Db::name('geo_village')->where(['town_code' => $village])->select();
return $this->data($data->toArray());
}
//**小队列表 */
public function brigade()
{
$data = Db::name('geo_group')->select();
return $this->data($data->toArray());
}
}

View File

@ -42,11 +42,6 @@ class DeviceController extends BaseAdminController
return $this->dataLists(new DeviceLists());
}
public function datas()
{
$datas = (new DeviceLogic())->datas(input(''));
return $this->success('', $datas);
}
/**
* @notes 添加

View File

@ -42,11 +42,6 @@ class LandController extends BaseAdminController
return $this->dataLists(new LandLists());
}
public function datas()
{
$datas = (new LandLogic())->datas(input(''));
return $this->success('', $datas);
}
/**
* @notes 添加

View File

@ -42,11 +42,6 @@ class ProductController extends BaseAdminController
return $this->dataLists(new ProductLists());
}
public function datas()
{
$datas = (new ProductLogic())->datas(input(''));
return $this->success('', $datas);
}
/**
* @notes 添加

View File

@ -18,13 +18,6 @@ use app\adminapi\lists\user\UserLists;
use app\adminapi\logic\user\UserLogic;
use app\adminapi\validate\user\AdjustUserMoney;
use app\adminapi\validate\user\UserValidate;
use app\api\validate\LoginAccountValidate;
use app\common\model\auth\Admin;
use app\common\model\auth\AdminRole;
use app\common\model\user\User;
use app\common\service\ConfigService;
use think\facade\Config;
use think\facade\Db;
/**
* 用户控制器
@ -45,48 +38,6 @@ class UserController extends BaseAdminController
return $this->dataLists(new UserLists());
}
public function add()
{
try {
$params = $this->request->param();
$userSn = User::createUserSn();
$passwordSalt = Config::get('project.unique_identification');
$password = create_password(123456, $passwordSalt);
$avatar = ConfigService::get('default_image', 'user_avatar');
Db::transaction(function () use($userSn,$password,$avatar,$params) {
$user = User::create([
'sn' => $userSn,
'avatar' => env('project.project_url').'/'.$avatar,
'nickname' => '用户' . $userSn,
'account' => $params['mobile'],
'mobile' => $params['mobile'],
'password' => $password,
'channel' => 6,
]);
$admin = Admin::create([
'user_id' => $user->id,
'name' => '用户' . $userSn,
'avatar' => env('project.project_url').'/'.$avatar,
'account' => $params['mobile'],
'password' => $password
]);
AdminRole::create([
'admin_id' => $admin->id,
'role_id' => 1
]);
});
return $this->success();
} catch (\Exception $e) {
return $this->fail($e->getMessage());
}
}
public function datas()
{
$datas = (new UserLogic())->datas(input(''));
return $this->success('', $datas);
}
/**
* @notes 获取用户详情

View File

@ -54,7 +54,6 @@ class DeviceLogic extends BaseLogic
'code' => $params['code'],
'name' => $params['name'],
'type' => $params['type'],
'image' => $params['image'],
'monitor_item' => $params['monitor_item'],
'video_url' => $params['video_url'],
'status' => $params['status'],
@ -104,7 +103,6 @@ class DeviceLogic extends BaseLogic
'code' => $params['code'],
'name' => $params['name'],
'type' => $params['type'],
'image' => $params['image'],
'monitor_item' => $params['monitor_item'],
'video_url' => $params['video_url'],
'status' => $params['status'],
@ -129,41 +127,6 @@ class DeviceLogic extends BaseLogic
}
}
public function datas($params): array
{
$userWhere['d.user_id'] = -1;
if (!empty($params['user_id'])) {
$userWhere['d.user_id'] = $params['user_id'];
}
if (!request()->adminInfo['root'] && request()->adminInfo['user_id']) {
$userWhere['d.user_id'] = request()->adminInfo['user_id'];
}
if (request()->adminInfo['root']) {
unset($userWhere['d.user_id']);
}
$queryWhere = [];
if (!empty($params['name'])) {
$queryWhere[] = ['d.name', 'like', '%' . $params['name'] . '%'];
}
$deviceIdArray = Db::name('product_device')->column('device_id');
if (!empty($params['all'])) {
$deviceIdArray= [];
}
$lists = Db::name('device')->alias('d')
->where($userWhere)->where($queryWhere)->whereNotIn('d.id', $deviceIdArray)
->leftJoin('product_device pd','pd.device_id = d.id')
->leftJoin('product p','p.id = pd.product_id')
->leftJoin('user u','u.id = p.user_id')
->field('d.*')
->limit(0, 100)
->order(['d.id' => 'desc'])
->select()->toArray();
foreach ($lists as &$item) {
$item['deviceinfo'] = 'ID' . $item['id'] . ' / 名称:' . $item['name'];
}
return $lists;
}
/**
* @notes 删除
@ -204,17 +167,16 @@ class DeviceLogic extends BaseLogic
if (!empty($detail['monitor_item'])) {
$monitorItemArray = explode(',', $detail['monitor_item']);
}
$dictTypeId = Db::name('dict_type')->where('type', 'monitor_item')->value('id');
$monitorItemArray = Db::name('dict_data')->where('type_id', $dictTypeId)->whereIn('value', $monitorItemArray)->field(['name', 'value'])->select()->toArray();
foreach($monitorItemArray as $k=>$v) {
$monitorItemArray[$k]['device_id'] = $params['id'];
$monitorItemArray[$k]['monitor_value'] = '-';
$monitorItemArray[$k]['last_time'] = '-';
$monitorData = Db::name('land_collection')->where('device_id', $params['id'])->order(['id' => 'desc'])->find();
$monitorData = Db::name('device_monitor_data')->where('device_id', $params['id'])->where('monitor_item', $v['value'])->order(['id' => 'desc'])->find();
if (!empty($monitorData)) {
$monitorItemArray[$k]['monitor_value'] = $monitorData[$v['value']];
$monitorItemArray[$k]['last_time'] =$monitorData['create_time'];
$monitorItemArray[$k]['monitor_value'] = $monitorData['monitor_value'];
$monitorItemArray[$k]['last_time'] = date('Y-m-d H:i:s', $monitorData['create_time']);
}
}
$detail['monitor_item'] = $monitorItemArray;
@ -231,14 +193,14 @@ class DeviceLogic extends BaseLogic
$limitOffset = ($pageNo - 1) * $pageSize;
$limitLength = $pageSize;
$where['device_id'] = $params['id'];
$lists = Db::name('land_collection')
$where['monitor_item'] = $params['monitor_type'];
$lists = Db::name('device_monitor_data')
->where($where)
->field(["{$params['monitor_type']} as monitor_value", 'id', 'create_time'])
->limit($limitOffset, $limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
$count = Db::name('land_collection')->where($where)->count();
$count = Db::name('device_monitor_data')->where($where)->count();
return compact('lists', 'count', 'page_no', 'page_size');
}
}

View File

@ -38,10 +38,9 @@ class LandLogic extends BaseLogic
*/
public static function add(array $params): bool
{
$root = (request()->adminInfo)['root'];
$userId = (request()->adminInfo)['user_id'];
if ($root && !empty($params['user_id'])) {
$userId = $params['user_id'];
if (!empty($params['user_id'])) {
$userId = $params['user_id'];
}
Db::startTrans();
try {
@ -50,7 +49,7 @@ class LandLogic extends BaseLogic
'title' => $params['title'],
'address' => $params['address'],
'total_area' => $params['total_area'],
'residual_area' => $params['total_area'],
'residual_area' => $params['residual_area'],
'province_code' => $params['province_code'],
'province_name' => $params['province_name'],
'city_code' => $params['city_code'],
@ -65,7 +64,7 @@ class LandLogic extends BaseLogic
'group_name' => $params['group_name'],
'master_name' => $params['master_name'],
'master_phone' => $params['master_phone'],
// 'pic' => json_encode($params['pic']),
'pic' => json_encode($params['pic']),
]);
Db::commit();
@ -87,13 +86,10 @@ class LandLogic extends BaseLogic
*/
public static function edit(array $params): bool
{
$root = (request()->adminInfo)['root'];
$userId = (request()->adminInfo)['user_id'];
if ($root && !empty($params['user_id'])) {
$userId = $params['user_id'];
if (!empty($params['user_id'])) {
$userId = $params['user_id'];
}
$land = Land::findOrEmpty($params['id'])->toArray();
$newArea = $params['total_area'] - ($land['total_area'] - $land['residual_area']);
Db::startTrans();
try {
Land::where('id', $params['id'])->update([
@ -101,7 +97,7 @@ class LandLogic extends BaseLogic
'title' => $params['title'],
'address' => $params['address'],
'total_area' => $params['total_area'],
'residual_area' => $newArea,
'residual_area' => $params['residual_area'],
'province_code' => $params['province_code'],
'province_name' => $params['province_name'],
'city_code' => $params['city_code'],
@ -116,20 +112,9 @@ class LandLogic extends BaseLogic
'group_name' => $params['group_name'],
'master_name' => $params['master_name'],
'master_phone' => $params['master_phone'],
// 'pic' => json_encode($params['pic']),
'pic' => json_encode($params['pic']),
]);
$productIdArray = Db::name('product')->alias('p')
->where('lp.land_id', $params['id'])
->leftJoin('land_product lp','lp.product_id = p.id')
->field('p.*')
->column('p.id');
Db::name('product')->whereIn('id', $productIdArray)->update(['user_id'=>$userId]);
$deviceIdArray = Db::name('device')->alias('d')
->whereIn('pd.product_id', $productIdArray)
->leftJoin('product_device pd','pd.device_id = d.id')
->field('d.*')
->column('d.id');
Db::name('device')->whereIn('id', $deviceIdArray)->update(['user_id'=>$userId]);
Db::commit();
return true;
} catch (\Exception $e) {
@ -139,27 +124,6 @@ class LandLogic extends BaseLogic
}
}
public function datas($params): array
{
$userWhere = [];
if (!empty($params['user_id'])) {
$userWhere['user_id'] = $params['user_id'];
}
if (!request()->adminInfo['root'] && request()->adminInfo['user_id']) {
$userWhere['user_id'] = request()->adminInfo['user_id'];
}
$field = ['id', 'user_id', 'title', 'address', 'total_area', 'residual_area', 'province_code', 'province_name', 'city_code', 'city_name', 'county_code', 'county_name', 'town_code', 'town_name', 'village_code', 'village_name', 'group_code', 'group_name', 'master_name', 'master_phone', 'pic'];
$lists = Land::where($userWhere)
->limit(0, 100)
->field($field)
->order('id desc')
->select()->toArray();
foreach ($lists as &$item) {
$item['landinfo'] = 'ID' . $item['id'] . ' / 名称:' . $item['title'];
}
return $lists;
}
/**
* @notes 删除
@ -188,14 +152,9 @@ class LandLogic extends BaseLogic
public static function bind($params): bool
{
$root = (request()->adminInfo)['root'];
$userId = (request()->adminInfo)['user_id'];
if ($root && !empty($params['user_id'])) {
$userId = $params['user_id'];
}
if (!empty($params['id'])) {
$land = Land::findOrEmpty($params['id'])->toArray();
$userId = $land['user_id'] ?? 0;
$userId = Db::name('land')->where('id', $params['id'])->value('user_id');
}
Db::startTrans();
try {

View File

@ -52,6 +52,7 @@ class LandPlantLogic extends BaseLogic
'user' => $params['user'],
'remark' => $params['remark'],
'status' => $params['status'],
'pic' => json_encode($params['pic']),
'qr_code' => $params['qr_code'],
'plant_date' => strtotime($params['plant_date']),
]);
@ -75,10 +76,7 @@ class LandPlantLogic extends BaseLogic
*/
public static function edit(array $params): bool
{
$landPlant = LandPlant::findOrEmpty($params['id'])->toArray();
$land = Land::findOrEmpty($landPlant['land_id'])->toArray();
$userId = $land['user_id'];
$newArea = $land['residual_area'] + ($landPlant['area'] - $params['area']);
$userId = Db::name('land')->where('id', $params['land_id'])->value('user_id');
Db::startTrans();
try {
LandPlant::where('id', $params['id'])->update([
@ -90,10 +88,11 @@ class LandPlantLogic extends BaseLogic
'user' => $params['user'],
'remark' => $params['remark'],
'status' => $params['status'],
'pic' => json_encode($params['pic']),
'qr_code' => $params['qr_code'],
'plant_date' => strtotime($params['plant_date']),
]);
Land::where('id', $landPlant['land_id'])->update(['residual_area'=>$newArea]);
Db::commit();
return true;
} catch (\Exception $e) {
@ -113,8 +112,6 @@ class LandPlantLogic extends BaseLogic
*/
public static function delete(array $params): bool
{
$landPlant = LandPlant::findOrEmpty($params['id'])->toArray();
Land::where('id', $landPlant['land_id'])->inc('residual_area', $landPlant['area'])->update();
Db::name('land_plant_action')->where('plant_id', $params['id'])->delete();
return LandPlant::destroy($params['id']);
}

View File

@ -15,7 +15,6 @@
namespace app\adminapi\logic\land;
use app\common\model\land\Land;
use app\common\model\land\Product;
use app\common\logic\BaseLogic;
use think\facade\Db;
@ -39,15 +38,10 @@ class ProductLogic extends BaseLogic
*/
public static function add(array $params): bool
{
$root = (request()->adminInfo)['root'];
$userId = (request()->adminInfo)['user_id'];
$status = 1;
if ($root && !empty($params['user_id'])) {
$userId = $params['user_id'];
}
if (!empty($params['land_id'])) {
$land = Land::findOrEmpty($params['land_id'])->toArray();
$userId = $land['user_id'] ?? 0;
$userId = Db::name('land')->where('id', $params['land_id'])->value('user_id');
$status = 2;
}
Db::startTrans();
@ -56,12 +50,9 @@ class ProductLogic extends BaseLogic
'user_id' => $userId,
'code' => $params['code'],
'name' => $params['name'],
'desc' => $params['desc'],
'image' => $params['image'],
'status' => $status,
]);
if (!empty($params['land_id'])) {
Db::name('land_product')->where('land_id', $params['land_id'])->delete();
Db::name('land_product')->insert([
'land_id' => $params['land_id'],
'product_id' => $product['id'],
@ -88,15 +79,10 @@ class ProductLogic extends BaseLogic
*/
public static function edit(array $params): bool
{
$root = (request()->adminInfo)['root'];
$userId = (request()->adminInfo)['user_id'];
$status = 1;
if ($root && !empty($params['user_id'])) {
$userId = $params['user_id'];
}
if (!empty($params['land_id'])) {
$land = Land::findOrEmpty($params['land_id'])->toArray();
$userId = $land['user_id'] ?? 0;
$userId = Db::name('land')->where('id', $params['land_id'])->value('user_id');
$status = 2;
}
Db::startTrans();
@ -105,13 +91,8 @@ class ProductLogic extends BaseLogic
'user_id' => $userId,
'code' => $params['code'],
'name' => $params['name'],
'desc' => $params['desc'],
'image' => $params['image'],
'status' => $status,
]);
if (!empty($params['land_id'])) {
Db::name('land_product')->where('land_id', $params['land_id'])->delete();
}
Db::name('land_product')->where('product_id', $params['id'])->delete();
if (!empty($params['land_id'])) {
Db::name('land_product')->insert([
@ -130,39 +111,6 @@ class ProductLogic extends BaseLogic
}
}
public function datas($params): array
{
$userWhere['p.user_id'] = -1;
if (!empty($params['user_id'])) {
$userWhere['p.user_id'] = $params['user_id'];
}
if (!request()->adminInfo['root'] && request()->adminInfo['user_id']) {
$userWhere['p.user_id'] = request()->adminInfo['user_id'];
}
if (request()->adminInfo['root']) {
unset($userWhere['p.user_id']);
}
$queryWhere = [];
if (!empty($params['name'])) {
$queryWhere[] = ['p.name', 'like', '%' . $params['name'] . '%'];
}
$productIdArray = Db::name('land_product')->column('product_id');
if (!empty($params['all'])) {
$productIdArray= [];
}
$lists = Db::name('product')->alias('p')
->where($userWhere)->where($queryWhere)->whereNotIn('p.id', $productIdArray)
->leftJoin('user u','u.id = p.user_id')
->field('p.*')
->limit(0, 100)
->order(['p.id' => 'desc'])
->select()->toArray();
foreach ($lists as &$item) {
$item['productinfo'] = 'ID' . $item['id'] . ' / 名称:' . $item['name'];
}
return $lists;
}
/**
* @notes 删除
@ -193,14 +141,9 @@ class ProductLogic extends BaseLogic
public static function bind($params): bool
{
$root = (request()->adminInfo)['root'];
$userId = (request()->adminInfo)['user_id'];
if ($root && !empty($params['user_id'])) {
$userId = $params['user_id'];
}
if (!empty($params['id'])) {
$product = Product::findOrEmpty($params['id'])->toArray();
$userId = $product['user_id'] ?? 0;
$userId = Db::name('product')->where('id', $params['id'])->value('user_id');
}
Db::startTrans();
try {

View File

@ -51,33 +51,6 @@ class UserLogic extends BaseLogic
return $user->toArray();
}
public function datas($params): array
{
$userWhere['id'] = 0;
// 超级管理员数据
if (request()->adminInfo['root'] && !request()->adminInfo['user_id']) {
unset($userWhere['id']);
}
// 普通用户数据
if (!request()->adminInfo['root'] && request()->adminInfo['user_id']) {
$userWhere['id'] = request()->adminInfo['user_id'];
}
$where = [];
if (!empty($params['keyword'])) {
$where[] = ['sn|nickname|account|mobile', 'like', '%' . $params['keyword'] . '%'];
}
$field = "id,sn,nickname,sex,avatar,account,mobile,channel,is_disable,create_time";
$lists = User::where($userWhere)->where($where)
->limit(0, 100)
->field($field)
->order('id desc')
->select()->toArray();
foreach ($lists as &$item) {
$item['userinfo'] = 'ID' . $item['id'] . ' / 账户:' . $item['account'];
}
return $lists;
}
/**
* @notes 更新用户信息

View File

@ -41,9 +41,6 @@
return $this->fail('操作内容格式错误');
}
foreach($this->actionFields[$params['type']] as $v) {
if($v == 'remark'){
continue;
}
if(empty($detail[$v])){
return $this->fail($this->actionMessage[$params['type']].'缺少必要参数');
}
@ -106,8 +103,6 @@
$data = Db::query("SELECT * FROM zzsy_land_plant_action WHERE id IN (SELECT max( id ) FROM zzsy_land_plant_action WHERE plant_id = {$params['plant_id']} GROUP BY type)");
foreach($data as $k=>$v){
$data[$k]['detail'] = json_decode($v['detail'],true);
$data[$k]['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
$data[$k]['update_time'] = date('Y-m-d H:i:s',$v['update_time']);
}
return $this->success('请求成功',$data);
}

View File

@ -1,237 +0,0 @@
<?php
namespace app\api\controller;
use app\common\model\device\Device;
use app\common\model\device\DeviceOffline;
use app\common\model\device\MonitorAlarm;
use app\common\model\device\MonitorThreshold;
use app\common\model\land\LandProduct;
use app\common\model\LandCollection;
use app\common\model\product\ProductDevice;
use app\common\model\User;
use Exception;
use think\Db;
use think\facade\Log;
class DataCollectController extends BaseApiController
{
public array $notNeedLogin = ['collect', 'disabled'];
// 种植数据采集
public function collect()
{
try {
$parmas = $this->request->post();
Log::info('采集消息发布'.json_encode($parmas));
if(!$parmas || !isset($parmas['username']) || $parmas['username']==''){
return $this->fail('参数错误');
}
// mqtt服务端 消息发布事件
if ($parmas['event'] == 'message.publish') {
$payload= json_decode($parmas['payload'], true);
$user = User::where('account', $parmas['username'])->find();
$device = explode('_', $parmas['topic']); // 命名规则camera_deviceid deviceid为设备主键id
$deviceId = $device[1]; // 设备id
$productDevice = ProductDevice::where('device_id', $deviceId)->find();
$landProduct = LandProduct::where('product_id', $productDevice['product_id'])->find();
$landId = $landProduct['land_id']; // 土地id
$data = [
'user_id' => $user['id'],
'land_id' => $landId,
'device_id' => $deviceId,
'qos'=>$parmas['qos'],
'wind_speed' => $payload['wind_speed'],
'wind_direction' => $payload['wind_direction'],
'ambient_temperature' => $payload['ambient_temperature'],
'ambient_humidity' => $payload['ambient_humidity'],
'carbon_dioxide' => $payload['carbon_dioxide'],
'ambient_air_pressure' => $payload['ambient_air_pressure'],
'rainfall' => $payload['rainfall'],
'ambient_lighting' => $payload['ambient_lighting'],
'soil_temperature' => $payload['soil_temperature'],
'soil_conductivity' => $payload['soil_conductivity'],
'soil_moisture' => $payload['soil_moisture'],
'soil_PH' => $payload['soil_PH'],
'soil_potassium_phosphate_nitrogen' => $payload['soil_potassium_phosphate_nitrogen'],
'soil_potassium_phosphate_phosphorus' => $payload['soil_potassium_phosphate_phosphorus'],
'soil_potassium_phosphate_potassium' => $payload['soil_potassium_phosphate_potassium'],
'client_id'=>$parmas['clientid'],
'create_time'=>date('Y-m-d H:i:s'),
'update_time'=>date('Y-m-d H:i:s'),
];
LandCollection::create($data);
// 设备告警
$monitorThreshold = (new MonitorThreshold())->select()->toArray()[0];
// 风速告警
if ($payload['wind_speed'] > $monitorThreshold['wind_speed_max']) {
self::createAlarm($landId, $deviceId, 'wind_speed', '风速偏快' ,$payload['wind_speed']);
}
// ambient_temperature 环境温度
if ($payload['ambient_temperature'] < $monitorThreshold['air_temp_min']) {
self::createAlarm($landId, $deviceId, 'ambient_temperature', '气温偏低' ,$payload['ambient_temperature']);
}
// ambient_temperature 环境温度
if ($payload['ambient_temperature'] > $monitorThreshold['air_temp_max']) {
self::createAlarm($landId, $deviceId, 'ambient_temperature', '气温偏高' ,$payload['ambient_temperature']);
}
// ambient_humidity 环境湿度
if ($payload['ambient_humidity'] < $monitorThreshold['air_mois_min']) {
self::createAlarm($landId, $deviceId, 'ambient_humidity', '环境湿度偏低' ,$payload['ambient_humidity']);
}
// ambient_humidity 环境湿度
if ($payload['ambient_humidity'] < $monitorThreshold['air_mois_max']) {
self::createAlarm($landId, $deviceId, 'ambient_humidity', '环境湿度偏高' ,$payload['ambient_humidity']);
}
// carbon_dioxide 二氧化碳含量
if ($payload['carbon_dioxide'] > $monitorThreshold['air_co2_content_max']) {
self::createAlarm($landId, $deviceId, 'carbon_dioxide', '空气二氧化碳含量偏高' ,$payload['carbon_dioxide']);
}
// carbon_dioxide 二氧化碳含量
if ($payload['carbon_dioxide'] < $monitorThreshold['air_co2_content_min']) {
self::createAlarm($landId, $deviceId, 'carbon_dioxide', '空气二氧化碳含量偏低' ,$payload['carbon_dioxide']);
}
// ambient_air_pressure 大气压力
if ($payload['ambient_air_pressure'] >= 120)
{
self::createAlarm($landId, $deviceId, 'ambient_air_pressure', '大气压力偏高' ,$payload['ambient_air_pressure']);
}
if ($payload['ambient_air_pressure'] < 10)
{
self::createAlarm($landId, $deviceId, 'ambient_air_pressure', '大气压力偏低' ,$payload['ambient_air_pressure']);
}
// rainfall 雨量
// if ($payload['rainfall'] >= 100)
// ambient_lighting 光照
// soil_temperature 土壤温度
if ($payload['soil_temperature'] >= $monitorThreshold['soil_temp_max']) {
self::createAlarm($landId, $deviceId, 'soil_temperature', '土壤温度偏高' ,$payload['soil_temperature']);
}
// soil_temperature 土壤温度
if ($payload['soil_temperature'] < $monitorThreshold['soil_temp_min']) {
self::createAlarm($landId, $deviceId, 'soil_temperature', '土壤温度偏低' ,$payload['soil_temperature']);
}
// soil_conductivity 土壤电导率
// if ($payload['soil_conductivity'] < $monitorThreshold['soil_mois_max']) {
// self::createAlarm($land[3], $deviceId, '土壤电导率', '土壤湿度偏高' ,$payload['soil_conductivity']);
// }
// if ($payload['soil_conductivity'] < $monitorThreshold['soil_mois_min']) {
// self::createAlarm($land[3], $deviceId, '土壤电导率', '土壤湿度偏低' ,$payload['soil_conductivity']);
// }
// soil_conductivity 土壤湿度
if ($payload['soil_moisture'] < $monitorThreshold['soil_mois_max']) {
self::createAlarm($landId, $deviceId, 'soil_moisture', '土壤湿度偏高' ,$payload['soil_moisture']);
}
if ($payload['soil_moisture'] < $monitorThreshold['soil_mois_min']) {
self::createAlarm($landId, $deviceId, 'soil_moisture', '土壤湿度偏低' ,$payload['soil_moisture']);
}
// soil_PH 土壤ph值
if ($payload['soil_PH'] < $monitorThreshold['soil_ph_max']) {
self::createAlarm($landId, $deviceId, 'soil_PH', '土壤PH值偏碱性' ,$payload['soil_moisture']);
}
if ($payload['soil_PH'] < $monitorThreshold['soil_ph_min']) {
self::createAlarm($landId, $deviceId, 'soil_PH', '土壤PH值偏酸性' ,$payload['soil_moisture']);
}
// soil_potassium_phosphate_nitrogen 土壤磷酸钾:氮
if ($payload['soil_potassium_phosphate_nitrogen'] < $monitorThreshold['soil_n_content_max']) {
self::createAlarm($landId, $deviceId, 'soil_potassium_phosphate_nitrogen', '土壤磷酸钾-含氮量偏高' ,$payload['soil_potassium_phosphate_nitrogen']);
}
if ($payload['soil_potassium_phosphate_nitrogen'] < $monitorThreshold['soil_n_content_min']) {
self::createAlarm($landId, $deviceId, 'soil_potassium_phosphate_nitrogen', '土壤磷酸钾-含氮量偏低' ,$payload['soil_potassium_phosphate_nitrogen']);
}
// soil_potassium_phosphate_phosphorus 土壤磷酸钾:磷
if ($payload['soil_potassium_phosphate_phosphorus'] < $monitorThreshold['soil_p_content_max']) {
self::createAlarm($landId, $deviceId, 'soil_potassium_phosphate_phosphorus', '土壤磷酸钾-含磷量偏高' ,$payload['soil_potassium_phosphate_phosphorus']);
}
if ($payload['soil_potassium_phosphate_phosphorus'] < $monitorThreshold['soil_p_content_min']) {
self::createAlarm($landId, $deviceId, 'soil_potassium_phosphate_phosphorus', '土壤磷酸钾-含磷量偏低' ,$payload['soil_potassium_phosphate_phosphorus']);
}
// soil_potassium_phosphate_potassium 土壤磷酸钾:钾
if ($payload['soil_potassium_phosphate_potassium'] < $monitorThreshold['soil_k_content_max']) {
self::createAlarm($landId, $deviceId, 'soil_potassium_phosphate_potassium', '土壤磷酸钾-含钾量偏高' ,$payload['soil_potassium_phosphate_potassium']);
}
if ($payload['soil_potassium_phosphate_potassium'] < $monitorThreshold['soil_k_content_min']) {
self::createAlarm($landId, $deviceId, 'soil_potassium_phosphate_potassium', '土壤磷酸钾-含钾量偏低' ,$payload['soil_potassium_phosphate_potassium']);
}
return $this->success('接收成功', ['user_name'=>$parmas['username'], 'topic'=>$parmas['topic']]);
}
// mqtt服务端 连接断开事件 客户端断开表示该土块的所有设备都已断开 共用同一个mqtt客户端
if ($parmas['event'] == 'client.disconnected') {
// lihai_lot_walnutpi_dev_6 clientid 命名规则
$device = strstr($parmas['clientid'], 'dev_');
$device = explode('_', $device);
$deviceId = $device[1]; // 设备id
$productDevice = ProductDevice::where('device_id', $deviceId)->find();
$landProduct = LandProduct::where('product_id', $productDevice['product_id'])->find();
$landId = $landProduct['land_id']; // 土地id
// 查询该土地关联的设备
$addData = [
'land_id' => $landId,
'device_id' => $deviceId,
'last_online_time' => $parmas['disconnected_at']/1000,
'disconnected_time' => $parmas['disconnected_at']/1000,
'create_time' => time(),
'update_time' => time()
];
DeviceOffline::create($addData);
Device::where('id', $deviceId)->update(['is_online' => 2]);
return $this->success('接收成功');
}
// 连接链接事件 设备已上线
if ($parmas['event'] == 'client.connected') {
// lihai_lot_walnutpi_dev_6 clientid 命名规则
$device = strstr($parmas['clientid'], 'dev_');
$device = explode('_', $device);
$deviceId = $device[1]; // 设备id
Device::where('id', $deviceId)->update(['is_online' => 1]);
return $this->success('接收成功');
}
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
public static function createAlarm($user_id, $device_id, $type, $content, $value)
{
$data = [
'land_id' => $user_id,
'device_id' => $device_id,
'type' => $type,
'content' => $content,
'value' => $value,
'create_time' => time(),
'update_time' => time(),
];
MonitorAlarm::create($data);
}
public function disabled()
{
$parmas = $this->request->post();
Log::info('连接断开事件'.json_encode($parmas));
}
}

View File

@ -4,11 +4,8 @@ namespace app\api\controller;
use app\common\enum\notice\NoticeEnum;
use app\common\model\action\Action;
use app\common\model\device\Device;
use app\common\model\device\MonitorThreshold;
use app\common\model\file\File;
use app\common\model\land\Land;
use app\common\model\land\LandProduct;
use app\common\model\LandCollection;
use app\common\model\monitor\MonitorData;
use app\common\model\plant\Plant;
use app\common\model\product\ProductDevice;
@ -45,47 +42,31 @@ class IndexController extends BaseApiController
if($landProduct->isEmpty()){
$data['monitor'] = [];
}else{
$productDevice = ProductDevice::where('product_id',$landProduct['product_id'])->findOrEmpty();
$device = Device::where('id', $productDevice['device_id'])->findOrEmpty();
$data['video_url'] = $device['video_url'];
$data['device_id'] = $device['id'];
// 监控视频封面
$file = File::where('cid', $device['id'])->order('id', 'desc')->findOrEmpty();
$data['video_cover'] = isset($file['uri'])? env('project.project_url').'/'.$file['uri']: '';
$landCollection = LandCollection::where('land_id',$params['land_id'])->order('id desc')->findOrEmpty();
if($landCollection->isEmpty()){
$monitor = MonitorData::where('product_id',$landProduct['product_id'])->order('id desc')->findOrEmpty();
if($monitor->isEmpty()){
$data['monitor'] = [];
}else{
$data['monitor']['soil_monitor_data'] = [
'soil_temperature'=>$landCollection['soil_temperature'],
'soil_moisture'=>$landCollection['soil_moisture'],
'conductivity'=>$landCollection['soil_conductivity'],
'ph'=>$landCollection['soil_PH'],
'n_content'=>$landCollection['soil_potassium_phosphate_nitrogen'],
'p_content'=>$landCollection['soil_potassium_phosphate_phosphorus'],
'k_content'=>$landCollection['soil_potassium_phosphate_potassium'],
'create_time' => $landCollection['create_time']
'wind_direction'=>$monitor['wind_direction'],
'wind_speed'=>$monitor['wind_speed'],
'air_temperature'=>$monitor['air_temperature'],
'air_moisture'=>$monitor['air_moisture'],
'co2_content'=>$monitor['co2_content'],
'pressure'=>$monitor['pressure'],
'rainfall'=>$monitor['rainfall'],
'light_intensity'=>$monitor['light_intensity'],
'create_time' => $monitor['create_time']
];
$data['monitor']['air_monitor_data'] = [
'wind_direction'=>$landCollection['wind_direction'],
'wind_speed'=>$landCollection['wind_speed'],
'air_temperature'=>$landCollection['ambient_temperature'],
'air_moisture'=>$landCollection['ambient_humidity'],
'co2_content'=>$landCollection['carbon_dioxide'],
'pressure'=>$landCollection['ambient_air_pressure'],
'rainfall'=>$landCollection['rainfall'],
'light_intensity'=>$landCollection['ambient_lighting'],
'create_time' => $landCollection['create_time']
'soil_temperature'=>$monitor['soil_temperature'],
'soil_moisture'=>$monitor['soil_moisture'],
'conductivity'=>$monitor['conductivity'],
'ph'=>$monitor['ph'],
'n_content'=>$monitor['n_content'],
'p_content'=>$monitor['p_content'],
'k_content'=>$monitor['k_content'],
'create_time' => $monitor['create_time']
];
$monitorThreshold = MonitorThreshold::select();
if($monitorThreshold->toArray()!=null){
$monitorThreshold=$monitorThreshold[0];
}else{
$monitorThreshold=[];
}
$monitorThreshold['ambient_air_pressure_max'] = 120;
$monitorThreshold['ambient_air_pressure_min'] = 10;
$data['monitor']['threshold'] = $monitorThreshold;
}
}
return $this->success('请求成功',$data);
@ -155,9 +136,9 @@ class IndexController extends BaseApiController
if($plantInfo->isEmpty()){
return $this->fail('种植信息错误');
}
// if($plantInfo['status'] != 2){
// return $this->fail('种植信息状态错误');
// }
if($plantInfo['status'] != 2){
return $this->fail('种植信息状态错误');
}
$landInfo = Land::where('id',$plantInfo['land_id'])->findOrEmpty();
if($landInfo->isEmpty()){
return $this->fail('土地信息错误');

View File

@ -59,7 +59,7 @@
public function add(): Json
{
//获取参数并验证
$fields = ['title','area','province_code','city_code','county_code','address','master_name','master_phone','pic', 'longitude', 'latitude'];
$fields = ['title','area','province_code','city_code','county_code','address','master_name','master_phone','pic'];
$params = $this->request->post($fields);
foreach($fields as $v){
if(!isset($params[$v]) || $params[$v] == ''){
@ -104,8 +104,6 @@
'address' => $params['address'],
'master_name' => $params['master_name'],
'master_phone' => $params['master_phone'],
'longitude' => floatval($params['longitude']),
'latitude' => floatval($params['latitude']),
'pic' => $params['pic'],
'create_time' => time(),
'update_time' => time(),
@ -116,7 +114,7 @@
//产品列表
public function product(): Json
{
$data = Product::field('id as product_id,code,name')->where('status',1)->where('user_id', $this->userId)->select()->toArray();
$data = Product::field('id as product_id,code,name')->where('status',1)->select()->toArray();
$result = [];
foreach ($data as $k=>$v) {
$productDevice = ProductDevice::where('product_id',$v['product_id'])->select()->toArray();

View File

@ -35,7 +35,6 @@
return $this->fail('种植信息错误');
}
$data['pic'] = json_decode($data['pic'],true);
$data['plant_date'] = date('Y-m-d H:i:s',$data['plant_date']);
return $this->success('请求成功',$data->toArray());
}

View File

@ -15,7 +15,6 @@
namespace app\api\controller;
use app\common\enum\FileEnum;
use app\common\model\file\File;
use app\common\service\UploadService;
use Exception;
use think\response\Json;
@ -27,7 +26,7 @@ use think\response\Json;
*/
class UploadController extends BaseApiController
{
public array $notNeedLogin=['uploadVideoCover'];
/**
* @notes 上传图片
* @return Json
@ -45,44 +44,5 @@ class UploadController extends BaseApiController
}
public function uploadVideoCover()
{
try {
$deviceId = $this->request->param('device_id', '');
// Base64编码的图片字符串
$base64Image = $this->request->param('image'); // 这里只展示部分内容
// 去除前面的"data:"标识
$base64Data = substr($base64Image, strpos($base64Image, ',') + 1);
// 将Base64编码的图片字符串转换为二进制数据
$binaryData = base64_decode($base64Data);
// 创建图像对象
$imageObject = imagecreatefromstring($binaryData);
$saveDir = 'uploads/images/' . date('Ymd'). '/';
if (!is_dir($saveDir)) {
mkdir($saveDir, 0755, true);
}
$fileName = uniqid().'.png';
// 保存图片
imagepng($imageObject, $saveDir.$fileName);
$file = File::create([
'cid' => $deviceId,
'type' => FileEnum::IMAGE_TYPE,
'name' => $fileName,
'uri' => $saveDir . $fileName,
'source' => FileEnum::SOURCE_USER,
'source_id' => $this->userId,
'create_time' => time(),
]);
return $this->success('上传成功', ['url'=>env('project.project_url').'/'.$saveDir.$fileName]);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
}

View File

@ -1,101 +0,0 @@
<?php
namespace app\api\controller\dataview;
use app\api\controller\BaseApiController;
use app\common\model\device\Device;
use app\common\model\device\MonitorAlarm;
use app\common\model\land\LandPlant;
use think\App;
use think\Exception;
use think\exception\ErrorException;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
class DeviceController extends BaseApiController
{
public array $notNeedLogin = ['deviceAlarmCount', 'deviceCount'];
public $areaCode;
public $streetCode;
public function initialize()
{
parent::initialize();
$this->areaCode = $this->request->param('areaCode', '');
$this->streetCode = $this->request->param('streetCode', '');
if ($this->areaCode == '') {
throw new ValidateException('未获取到位置信息');
}
}
// 设备告警统计
public function deviceAlarmCount()
{
$landId = $this->request->get('land_id', 0);
$list = MonitorAlarm::alias('ma')->field('ma.*,d.code AS device_code,d.name AS device_name,d.image')
->join('device d', 'ma.device_id=d.id')
->join('product_device pd', 'd.id=pd.device_id')
->join('land_product lp', 'pd.product_id=lp.product_id')
->join('land l', 'l.id=lp.land_id')
->where(function ($query) use ($landId) {
if ($landId != 0) {
$query->where('ma.land_id', $landId);
} else {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
}
})
->order('ma.id', 'desc')
->limit(100)
->select();
return $this->success('成功', compact('list'));
}
// 监测设备数量统计
public function deviceCount()
{
$total = Device::alias('d')
->join('product_device pd', 'd.id=pd.device_id')
->join('land_product lp', 'pd.product_id=lp.product_id')
->join('land l', 'l.id=lp.land_id')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})
->count();
$online = Device::alias('d')
->join('product_device pd', 'd.id=pd.device_id')
->join('land_product lp', 'pd.product_id=lp.product_id')
->join('land l', 'l.id=lp.land_id')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})->where('d.is_online', 1)->count();
$offline = Device::alias('d')
->join('product_device pd', 'd.id=pd.device_id')
->join('land_product lp', 'pd.product_id=lp.product_id')
->join('land l', 'l.id=lp.land_id')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})->where('d.is_online', 2)->count();
return $this->success('成功', compact('total', 'online', 'offline'));
}
}

View File

@ -1,251 +0,0 @@
<?php
namespace app\api\controller\dataview;
use app\api\controller\BaseApiController;
use app\common\model\device\Device;
use app\common\model\device\MonitorAlarm;
use app\common\model\device\MonitorThreshold;
use app\common\model\land\Land;
use app\common\model\land\LandPlant;
use app\common\model\land\Product;
use app\common\model\LandCollection;
use think\facade\Db;
use think\exception\ValidateException;
class LandController extends BaseApiController
{
public array $notNeedLogin = ['plantProductCount',
'landCollectionList',
'landMonitorAlarmHistory',
'productList',
'landList',
'centralCount',
'areaPlantTypeCount',
'monitorInfo',
'deviceCount'
];
public $areaCode;
public $streetCode;
public function initialize()
{
parent::initialize();
$this->areaCode = $this->request->param('areaCode', '');
$this->streetCode = $this->request->param('streetCode', '');
if ($this->areaCode == '') {
throw new ValidateException('未获取到位置信息');
}
}
// 溯源产品统计
public function plantProductCount()
{
$list = LandPlant::alias('lp')->join('land l', 'l.id=lp.land_id')->field('lp.id,lp.kind,lp.qr_code')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})->limit(30)->select();
return $this->success('成功', compact('list'));
}
// 智能预警数据
public function landCollectionList()
{
// 先排序,再分组
$subQuery = Db::name('land_collection')
->order('id', 'desc')
->buildSql();
$list = Db::table($subQuery)->alias('lc')
->field('lc.*,l.title')
->join('land l', 'l.id=lc.land_id')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})->order('lc.id', 'desc')->group('l.id')->limit(30)->select();
return $this->success('成功', compact('list'));
}
// 预警历史记录
public function landMonitorAlarmHistory()
{
$landId = $this->request->get('land_id');
// 最近7日
$start = date('Y-m-d', strtotime('-6 day'));
$end= date('Y-m-d H:i:s', time());
$typeRow = ['soil_temperature', 'soil_moisture', 'soil_PH', 'soil_potassium_phosphate_nitrogen', 'wind_speed', 'ambient_temperature', 'ambient_humidity', 'carbon_dioxide'];
$list = [];
foreach ($typeRow as $type) {
// 土壤磷酸钾-氮磷钾
if ($type == 'soil_potassium_phosphate_nitrogen') {
$alarmCount = MonitorAlarm::where('land_id', $landId)
->whereIn('type', ['soil_potassium_phosphate_nitrogen',
'soil_potassium_phosphate_phosphorus',
'soil_potassium_phosphate_potassium'
])
->count();
$dataList = LandCollection::where('land_id', $landId)
->field(['soil_potassium_phosphate_nitrogen',
'soil_potassium_phosphate_phosphorus',
'soil_potassium_phosphate_potassium', "STR_TO_DATE(create_time,
'%Y-%m-%d') as day"])
->whereBetweenTime('create_time', $start, $end)
->group("STR_TO_DATE(create_time, '%Y-%m-%d')")
->select();
// 组装折线图数据
$historyList = [];
$timeRow = [];
$valueRow = [];
foreach ($dataList as $row) {
$timeRow[] = $row['day'];
unset($row['day']);
$valueRow[] = $row;
}
$historyList[]['time'] = $timeRow;
$historyList[]['value'] = $valueRow;
} else {
$alarmCount = MonitorAlarm::where('land_id', $landId)
->where('type', $type)
->count();
$dataList = LandCollection::where('land_id', $landId)
->field("$type,STR_TO_DATE(create_time, '%Y-%m-%d') as day")
->whereBetweenTime('create_time', $start, $end)
->group("STR_TO_DATE(create_time, '%Y-%m-%d')")
->select()->toArray();
// 组装折线图数据
$historyList = [];
$timeRow = [];
$valueRow = [];
foreach ($dataList as $row) {
$timeRow[] = $row['day'];
$valueRow[] = $row[$type];
}
$historyList[]['time'] = $timeRow;
$historyList[]['value'] = $valueRow;
}
$list[$type] = compact('alarmCount', 'historyList');
}
return $this->success('成功', compact('list'));
}
// 土地列表
public function landList()
{
$list = Land::alias('l')->field('l.*,d.video_url,d.id as device_id')->join('land_product lp', 'lp.land_id=l.id')
->join('product_device pd', 'lp.product_id=pd.product_id')
->join('device d', 'pd.device_id=d.id')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})->select();
return $this->success('成功', compact('list'));
}
public function productList()
{
$list = Product::alias('p')->field('p.*')
->join('land_product lp', 'p.id=lp.product_id')
->join('land l', 'lp.land_id=l.id')
->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
})->select();
return $this->success('成功', compact('list'));
}
public function centralCount()
{
$query = Land::alias('l')->where(function ($query) {
if ($this->streetCode != '') {
$query->where('l.town_code', $this->streetCode);
} else {
$query->where('l.county_code', $this->areaCode);
}
});
// 地块数量
$landCount = $query->count();
// 种植面积
$totalArea = $query->sum('total_area');
// 种植种类
$plantCount = $query->join('land_plant lp', 'l.id = lp.land_id')->group('kind')->count();
return $this->success('成功', compact('landCount', 'totalArea', 'plantCount'));
}
// 第二页 种植面积/种类
public function areaPlantTypeCount()
{
$landId = $this->request->get('land_id');
$query = Land::alias('l')->where('l.id', $landId);
// 种植面积
$totalArea = $query->value('total_area');
// 种植种类
$plantKindList = $query->field('lp.land_id,lp.kind')->join('land_plant lp', 'l.id = lp.land_id')->group('lp.kind')->select();
return $this->success('成功', compact('totalArea', 'plantKindList'));
}
// 第二页 气象环境监测
public function monitorInfo()
{
$landId = $this->request->get('land_id');
// 气象信息
$landCollection = LandCollection::where('land_id', $landId)->order('id', 'desc')->find();
$monitorThreshold = MonitorThreshold::select()->toArray()[0];
$monitorThreshold['ambient_air_pressure_max'] = 120;
$monitorThreshold['ambient_air_pressure_min'] = 10;
return $this->success('成功', compact('landCollection', 'monitorThreshold'));
}
// 监测设备数量统计
public function deviceCount()
{
$landId = $this->request->get('land_id');
$total = Land::alias('l')
->join('land_product lp', 'l.id=lp.land_id')
->join('product_device pd', 'lp.product_id=pd.product_id')
->join('device d', 'pd.device_id=d.id')
->where('l.id', $landId)
->count();
$online = Land::alias('l')
->join('land_product lp', 'l.id=lp.land_id')
->join('product_device pd', 'lp.product_id=pd.product_id')
->join('device d', 'pd.device_id=d.id')
->where('l.id', $landId)
->where('d.is_online', 1)->count();
$offline = Land::alias('l')
->join('land_product lp', 'l.id=lp.land_id')
->join('product_device pd', 'lp.product_id=pd.product_id')
->join('device d', 'pd.device_id=d.id')
->where('l.id', $landId)
->where('d.is_online', 2)->count();
return $this->success('成功', compact('total', 'online', 'offline'));
}
}

View File

@ -14,7 +14,6 @@
namespace app\api\logic;
use app\api\validate\LoginAccountValidate;
use app\common\cache\WebScanLoginCache;
use app\common\logic\BaseLogic;
use app\common\model\auth\Admin;
@ -54,13 +53,7 @@ class LoginLogic extends BaseLogic
$passwordSalt = Config::get('project.unique_identification');
$password = create_password($params['password'], $passwordSalt);
$avatar = ConfigService::get('default_image', 'user_avatar');
// 校验短信验证码
$verifyCode = intval($params['verify_code']);
$params['account'] = $params['mobile'];
if((new LoginAccountValidate())->checkCode($verifyCode, [], $params) === true) {
self::setError('验证码错误');
return false;
}
Db::transaction(function () use($userSn,$password,$avatar,$params) {
$user = User::create([
'sn' => $userSn,

View File

@ -16,7 +16,6 @@ namespace app\api\validate;
use app\common\enum\notice\NoticeEnum;
use app\common\model\user\User;
use app\common\service\JsonService;
use app\common\service\sms\SmsDriver;
use app\common\validate\BaseValidate;
@ -49,31 +48,4 @@ class RegisterValidate extends BaseValidate
'password_confirm.require' => '请确认密码',
'password_confirm.confirm' => '两次输入的密码不一致'
];
public function goCheck($scene = null, array $validateData = []): array
{
//接收参数
if ($this->method == 'GET') {
$params = request()->get();
} else {
$params = request()->post();
}
//合并验证参数
$params = array_merge($params, $validateData);
//场景
if ($scene) {
$result = $this->scene($scene)->check($params);
} else {
$result = $this->check($params);
}
if (!$result) {
$exception = is_array($this->error) ? implode(';', $this->error) : $this->error;
$data = $exception == '手机号已存在' ? ['has_register'=>1] : [];
JsonService::throw($exception,$data);
}
// 3.成功返回数据
return $params;
}
}

View File

@ -13,7 +13,6 @@
class GeoController extends BaseLikeAdminController
{
public array $notNeedLogin=['province','city', 'county','towns','villages','groups'];
// 获取省份
public function province(): Json
{
@ -50,7 +49,7 @@
if(empty($county_code)){
return $this->fail('请选择区县');
}
$data = Town::field('town_code,town_name,lng,lat')->where('county_code',$county_code)->select();
$data = Town::field('town_code,town_name')->where('county_code',$county_code)->select();
return $this->success('请求成功',$data->toArray());
}

View File

@ -1,8 +0,0 @@
<?php
namespace app\common\model;
class LandCollection extends BaseModel
{
protected $name = 'land_collection';
}

View File

@ -1,13 +0,0 @@
<?php
namespace app\common\model\device;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
class DeviceOffline extends BaseModel
{
use SoftDelete;
protected $name = 'device_offline';
}

View File

@ -54,7 +54,7 @@ class User extends BaseModel
public function searchKeywordAttr($query, $value, $data)
{
if ($value) {
$query->where('sn|nickname|account|mobile', 'like', '%' . $value . '%');
$query->where('sn|nickname|mobile', 'like', '%' . $value . '%');
}
}

View File

@ -1 +1 @@
import o from"./error.08561be1.js";import{d as r,o as i,c as p,T as m,K as e,a as t}from"./@vue.108c970a.js";import"./element-plus.5df6f736.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.ed788fee.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const s="/admin/assets/no_perms.a56e95a5.png",a={class:"error404"},u=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),U=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",a,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[u]),_:1})]))}});export{U as default};
import o from"./error.c3e6fbc3.js";import{d as r,o as i,c as p,T as m,K as e,a as t}from"./@vue.108c970a.js";import"./element-plus.7a22678c.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.ed788fee.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const s="/admin/assets/no_perms.a56e95a5.png",a={class:"error404"},u=t("div",{class:"flex justify-center"},[t("img",{class:"w-[150px] h-[150px]",src:s,alt:""})],-1),U=r({__name:"403",setup(c){return(n,_)=>(i(),p("div",a,[m(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1},{content:e(()=>[u]),_:1})]))}});export{U as default};

View File

@ -0,0 +1 @@
import o from"./error.c3e6fbc3.js";import{d as r,o as t,c as m,T as p}from"./@vue.108c970a.js";import"./element-plus.7a22678c.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.ed788fee.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const i={class:"error404"},P=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{P as default};

View File

@ -1 +0,0 @@
import o from"./error.08561be1.js";import{d as r,o as t,c as m,T as p}from"./@vue.108c970a.js";import"./element-plus.5df6f736.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.ed788fee.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const i={class:"error404"},P=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{P as default};

View File

@ -1 +0,0 @@
import"./account-adjust.vue_vue_type_script_setup_true_lang.03f532ae.js";import{_ as M}from"./account-adjust.vue_vue_type_script_setup_true_lang.03f532ae.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.5f547370.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";export{M as default};

View File

@ -0,0 +1 @@
import"./account-adjust.vue_vue_type_script_setup_true_lang.cf56d433.js";import{_ as M}from"./account-adjust.vue_vue_type_script_setup_true_lang.cf56d433.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3956bbcf.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";export{M as default};

View File

@ -1 +1 @@
import{C as k,G as x,H as B,B as R,D as g}from"./element-plus.5df6f736.js";import{P as N}from"./index.5f547370.js";import{f as F}from"./index.1f78e617.js";import{d as q,s as C,_ as A,b as I,w as D,o as S,J as j,K as a,a as G,T as o,R as r,S as b,u as P}from"./@vue.108c970a.js";const T={class:"pr-8"},U=r("\u589E\u52A0\u4F59\u989D"),H=r("\u6263\u51CF\u4F59\u989D"),L=q({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:p}){const i=d,n=C(),u=A({action:1,num:"",remark:""}),s=C(),c=I(()=>Number(i.value)+Number(u.num)*(u.action==1?1:-1)),E={num:[{required:!0,message:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D"}]},w=e=>{if(e.includes("-"))return F.msgError("\u8BF7\u8F93\u5165\u6B63\u6574\u6570");u.num=e},h=async()=>{var e;await((e=n.value)==null?void 0:e.validate()),p("confirm",u)},v=()=>{var e;p("update:show",!1),(e=n.value)==null||e.resetFields()};return D(()=>i.show,e=>{var l,t;e?(l=s.value)==null||l.open():(t=s.value)==null||t.close()}),D(c,e=>{e<0&&(F.msgError("\u8C03\u6574\u540E\u4F59\u989D\u9700\u5927\u4E8E0"),u.num="")}),(e,l)=>{const t=k,f=x,y=B,_=R,V=g;return S(),j(N,{ref_key:"popupRef",ref:s,title:"\u4F59\u989D\u8C03\u6574",width:"500px",onConfirm:h,async:!0,onClose:v},{default:a(()=>[G("div",T,[o(V,{ref_key:"formRef",ref:n,model:u,"label-width":"120px",rules:E},{default:a(()=>[o(t,{label:"\u5F53\u524D\u4F59\u989D"},{default:a(()=>[r("\xA5 "+b(d.value),1)]),_:1}),o(t,{label:"\u4F59\u989D\u589E\u51CF",required:"",prop:"action"},{default:a(()=>[o(y,{modelValue:u.action,"onUpdate:modelValue":l[0]||(l[0]=m=>u.action=m)},{default:a(()=>[o(f,{label:1},{default:a(()=>[U]),_:1}),o(f,{label:2},{default:a(()=>[H]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(t,{label:"\u8C03\u6574\u4F59\u989D",prop:"num"},{default:a(()=>[o(_,{"model-value":u.num,placeholder:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D",type:"number",onInput:w},null,8,["model-value"])]),_:1}),o(t,{label:"\u8C03\u6574\u540E\u4F59\u989D"},{default:a(()=>[r(" \xA5 "+b(P(c)),1)]),_:1}),o(t,{label:"\u5907\u6CE8",prop:"remark"},{default:a(()=>[o(_,{modelValue:u.remark,"onUpdate:modelValue":l[1]||(l[1]=m=>u.remark=m),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{L as _};
import{C as k,G as x,H as B,B as R,D as g}from"./element-plus.7a22678c.js";import{P as N}from"./index.3956bbcf.js";import{f as F}from"./index.bb590457.js";import{d as q,s as C,_ as A,b as I,w as D,o as S,J as j,K as a,a as G,T as o,R as r,S as b,u as P}from"./@vue.108c970a.js";const T={class:"pr-8"},U=r("\u589E\u52A0\u4F59\u989D"),H=r("\u6263\u51CF\u4F59\u989D"),L=q({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:p}){const i=d,n=C(),u=A({action:1,num:"",remark:""}),s=C(),c=I(()=>Number(i.value)+Number(u.num)*(u.action==1?1:-1)),E={num:[{required:!0,message:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D"}]},w=e=>{if(e.includes("-"))return F.msgError("\u8BF7\u8F93\u5165\u6B63\u6574\u6570");u.num=e},h=async()=>{var e;await((e=n.value)==null?void 0:e.validate()),p("confirm",u)},v=()=>{var e;p("update:show",!1),(e=n.value)==null||e.resetFields()};return D(()=>i.show,e=>{var l,t;e?(l=s.value)==null||l.open():(t=s.value)==null||t.close()}),D(c,e=>{e<0&&(F.msgError("\u8C03\u6574\u540E\u4F59\u989D\u9700\u5927\u4E8E0"),u.num="")}),(e,l)=>{const t=k,f=x,y=B,_=R,V=g;return S(),j(N,{ref_key:"popupRef",ref:s,title:"\u4F59\u989D\u8C03\u6574",width:"500px",onConfirm:h,async:!0,onClose:v},{default:a(()=>[G("div",T,[o(V,{ref_key:"formRef",ref:n,model:u,"label-width":"120px",rules:E},{default:a(()=>[o(t,{label:"\u5F53\u524D\u4F59\u989D"},{default:a(()=>[r("\xA5 "+b(d.value),1)]),_:1}),o(t,{label:"\u4F59\u989D\u589E\u51CF",required:"",prop:"action"},{default:a(()=>[o(y,{modelValue:u.action,"onUpdate:modelValue":l[0]||(l[0]=m=>u.action=m)},{default:a(()=>[o(f,{label:1},{default:a(()=>[U]),_:1}),o(f,{label:2},{default:a(()=>[H]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(t,{label:"\u8C03\u6574\u4F59\u989D",prop:"num"},{default:a(()=>[o(_,{"model-value":u.num,placeholder:"\u8BF7\u8F93\u5165\u8C03\u6574\u7684\u91D1\u989D",type:"number",onInput:w},null,8,["model-value"])]),_:1}),o(t,{label:"\u8C03\u6574\u540E\u4F59\u989D"},{default:a(()=>[r(" \xA5 "+b(P(c)),1)]),_:1}),o(t,{label:"\u5907\u6CE8",prop:"remark"},{default:a(()=>[o(_,{modelValue:u.remark,"onUpdate:modelValue":l[1]||(l[1]=m=>u.remark=m),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{L as _};

View File

@ -1 +0,0 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import{_ as Y}from"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.75a5ec45.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.60257d01.js";import"./index.5f547370.js";import"./picker.966d5ace.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";export{Y as default};

View File

@ -0,0 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import{_ as Y}from"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3eeb6b50.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.8ac8cfcb.js";import"./index.3956bbcf.js";import"./picker.4eaaf2e9.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";export{Y as default};

View File

@ -1 +1 @@
import{B,w as D}from"./element-plus.5df6f736.js";import{_ as F}from"./index.75a5ec45.js";import{_ as A}from"./picker.60257d01.js";import{_ as y}from"./picker.966d5ace.js";import{f as p,b as E}from"./index.1f78e617.js";import{D as C}from"./vuedraggable.882c7954.js";import{d as U,b as w,o as c,c as N,a as e,T as t,K as m,J as $,u as r,j as z,R}from"./@vue.108c970a.js";const T={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},j={class:"upload-btn w-[60px] h-[60px]"},I={class:"ml-3 flex-1"},J={class:"flex"},K=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),L={class:"flex mt-[18px]"},P=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),q=R("\u6DFB\u52A0"),X=U({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=E,g=y,h=B,v=A,b=F,k=D;return c(),N("div",null,[e("div",null,[t(r(C),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(b,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",T,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",j,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",I,[e("div",J,[K,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",L,[P,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(k,{type:"primary",onClick:f},{default:m(()=>[q]),_:1})])])}}});export{X as _};
import{B,w as D}from"./element-plus.7a22678c.js";import{_ as F}from"./index.3eeb6b50.js";import{_ as A}from"./picker.8ac8cfcb.js";import{_ as y}from"./picker.4eaaf2e9.js";import{f as p,b as E}from"./index.bb590457.js";import{D as C}from"./vuedraggable.0b47cde1.js";import{d as U,b as w,o as c,c as N,a as e,T as t,K as m,J as $,u as r,j as z,R}from"./@vue.108c970a.js";const T={class:"bg-fill-light flex items-center w-full p-4 mb-4 cursor-move"},j={class:"upload-btn w-[60px] h-[60px]"},I={class:"ml-3 flex-1"},J={class:"flex"},K=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),L={class:"flex mt-[18px]"},P=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),q=R("\u6DFB\u52A0"),X=U({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:i}){const o=_,s=w({get(){return o.modelValue},set(a){i("update:modelValue",a)}}),f=()=>{var a;((a=o.modelValue)==null?void 0:a.length)<o.max?s.value.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):p.msgError(`\u6700\u591A\u6DFB\u52A0${o.max}\u4E2A`)},V=a=>{var u;if(((u=o.modelValue)==null?void 0:u.length)<=o.min)return p.msgError(`\u6700\u5C11\u4FDD\u7559${o.min}\u4E2A`);s.value.splice(a,1)};return(a,u)=>{const x=E,g=y,h=B,v=A,b=F,k=D;return c(),N("div",null,[e("div",null,[t(r(C),{class:"draggable",modelValue:r(s),"onUpdate:modelValue":u[0]||(u[0]=l=>z(s)?s.value=l:null),animation:"300"},{item:m(({element:l,index:d})=>[(c(),$(b,{class:"max-w-[400px]",key:d,onClose:n=>V(d)},{default:m(()=>[e("div",T,[t(g,{modelValue:l.image,"onUpdate:modelValue":n=>l.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",j,[t(x,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",I,[e("div",J,[K,t(h,{modelValue:l.name,"onUpdate:modelValue":n=>l.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",L,[P,t(v,{modelValue:l.link,"onUpdate:modelValue":n=>l.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),e("div",null,[t(k,{type:"primary",onClick:f},{default:m(()=>[q]),_:1})])])}}});export{X as _};

View File

@ -1 +1 @@
import{r as e}from"./index.1f78e617.js";function a(t){return e.get({url:"/article.articleCate/lists",params:t})}function l(t){return e.get({url:"/article.articleCate/all",params:t})}function i(t){return e.post({url:"/article.articleCate/add",params:t})}function c(t){return e.post({url:"/article.articleCate/edit",params:t})}function u(t){return e.post({url:"/article.articleCate/delete",params:t})}function n(t){return e.get({url:"/article.articleCate/detail",params:t})}function s(t){return e.post({url:"/article.articleCate/updateStatus",params:t})}function o(t){return e.get({url:"/article.article/lists",params:t})}function d(t){return e.post({url:"/article.article/add",params:t})}function f(t){return e.post({url:"/article.article/edit",params:t})}function C(t){return e.post({url:"/article.article/delete",params:t})}function p(t){return e.get({url:"/article.article/detail",params:t})}function g(t){return e.post({url:"/article.article/updateStatus",params:t})}export{c as a,i as b,n as c,a as d,u as e,s as f,p as g,l as h,f as i,d as j,o as k,g as l,C as m};
import{r as e}from"./index.bb590457.js";function a(t){return e.get({url:"/article.articleCate/lists",params:t})}function l(t){return e.get({url:"/article.articleCate/all",params:t})}function i(t){return e.post({url:"/article.articleCate/add",params:t})}function c(t){return e.post({url:"/article.articleCate/edit",params:t})}function u(t){return e.post({url:"/article.articleCate/delete",params:t})}function n(t){return e.get({url:"/article.articleCate/detail",params:t})}function s(t){return e.post({url:"/article.articleCate/updateStatus",params:t})}function o(t){return e.get({url:"/article.article/lists",params:t})}function d(t){return e.post({url:"/article.article/add",params:t})}function f(t){return e.post({url:"/article.article/edit",params:t})}function C(t){return e.post({url:"/article.article/delete",params:t})}function p(t){return e.get({url:"/article.article/detail",params:t})}function g(t){return e.post({url:"/article.article/updateStatus",params:t})}export{c as a,i as b,n as c,a as d,u as e,s as f,p as g,l as h,f as i,d as j,o as k,g as l,C as m};

View File

@ -1 +0,0 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.7dd3f842.js";import{_ as bm}from"./attr-setting.vue_vue_type_script_setup_true_lang.7dd3f842.js";import"./index.3e6cce16.js";import"./attr.vue_vue_type_script_setup_true_lang.c325841e.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.75a5ec45.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.60257d01.js";import"./index.5f547370.js";import"./picker.966d5ace.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";import"./content.vue_vue_type_script_setup_true_lang.e2fc3e26.js";import"./decoration-img.be977d66.js";import"./attr.vue_vue_type_script_setup_true_lang.8b6abd04.js";import"./content.cc417c69.js";import"./attr.vue_vue_type_script_setup_true_lang.29b8c481.js";import"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import"./content.ad08ced2.js";import"./attr.vue_vue_type_script_setup_true_lang.bc941db6.js";import"./content.vue_vue_type_script_setup_true_lang.a14319ca.js";import"./attr.vue_vue_type_script_setup_true_lang.5c3426f9.js";import"./content.68253a05.js";import"./decoration.025d06d7.js";import"./attr.vue_vue_type_script_setup_true_lang.688b76f6.js";import"./content.a57edad2.js";import"./attr.vue_vue_type_script_setup_true_lang.653f50f8.js";import"./content.vue_vue_type_script_setup_true_lang.52ced7fa.js";import"./attr.vue_vue_type_script_setup_true_lang.6ea07177.js";import"./content.a4d2d9b0.js";export{bm as default};

View File

@ -0,0 +1 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.10398b49.js";import{_ as bm}from"./attr-setting.vue_vue_type_script_setup_true_lang.10398b49.js";import"./index.f2018a0e.js";import"./attr.vue_vue_type_script_setup_true_lang.99bb2021.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3eeb6b50.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.8ac8cfcb.js";import"./index.3956bbcf.js";import"./picker.4eaaf2e9.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";import"./content.vue_vue_type_script_setup_true_lang.3bdd9a21.js";import"./decoration-img.3509172b.js";import"./attr.vue_vue_type_script_setup_true_lang.2255e55e.js";import"./content.ce6c8dd6.js";import"./attr.vue_vue_type_script_setup_true_lang.40abc3c1.js";import"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import"./content.414c48d7.js";import"./attr.vue_vue_type_script_setup_true_lang.f3e18de6.js";import"./content.vue_vue_type_script_setup_true_lang.4e549f3a.js";import"./attr.vue_vue_type_script_setup_true_lang.5c3426f9.js";import"./content.1f516b85.js";import"./decoration.b9365d02.js";import"./attr.vue_vue_type_script_setup_true_lang.688b76f6.js";import"./content.fbc5731a.js";import"./attr.vue_vue_type_script_setup_true_lang.8c4afd67.js";import"./content.vue_vue_type_script_setup_true_lang.3d3a6a76.js";import"./attr.vue_vue_type_script_setup_true_lang.6ea07177.js";import"./content.7c1fe419.js";export{bm as default};

View File

@ -1 +1 @@
import{e as c}from"./index.3e6cce16.js";import{d as l,o as t,c as p,a as d,S as m,J as r,P as f,u as g,aH as y}from"./@vue.108c970a.js";const b={class:"pages-setting"},u={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},v=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},setup(e){return(w,x)=>{var s,a,n,o,i;return t(),p("div",b,[d("div",u,m((s=e.widget)==null?void 0:s.title),1),(t(),r(y,null,[(t(),r(f((n=g(c)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(i=e.widget)==null?void 0:i.styles,type:e.type},null,8,["content","styles","type"]))],1024))])}}});export{v as _};
import{e as c}from"./index.f2018a0e.js";import{d as l,o as t,c as p,a as d,S as m,J as r,P as f,u as g,aH as y}from"./@vue.108c970a.js";const b={class:"pages-setting"},u={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},v=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},setup(e){return(w,x)=>{var s,a,n,o,i;return t(),p("div",b,[d("div",u,m((s=e.widget)==null?void 0:s.title),1),(t(),r(y,null,[(t(),r(f((n=g(c)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(i=e.widget)==null?void 0:i.styles,type:e.type},null,8,["content","styles","type"]))],1024))])}}});export{v as _};

View File

@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.29b8c481.js";import{_ as Z}from"./attr.vue_vue_type_script_setup_true_lang.29b8c481.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import"./index.75a5ec45.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.60257d01.js";import"./index.5f547370.js";import"./picker.966d5ace.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";export{Z as default};

View File

@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.c325841e.js";import{_ as Y}from"./attr.vue_vue_type_script_setup_true_lang.c325841e.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.75a5ec45.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.60257d01.js";import"./index.5f547370.js";import"./picker.966d5ace.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";export{Y as default};

View File

@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.653f50f8.js";import{_ as Y}from"./attr.vue_vue_type_script_setup_true_lang.653f50f8.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.75a5ec45.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.60257d01.js";import"./index.5f547370.js";import"./picker.966d5ace.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";export{Y as default};

View File

@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.bc941db6.js";import{_ as Z}from"./attr.vue_vue_type_script_setup_true_lang.bc941db6.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import"./index.75a5ec45.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.60257d01.js";import"./index.5f547370.js";import"./picker.966d5ace.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";export{Z as default};

View File

@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.99bb2021.js";import{_ as Y}from"./attr.vue_vue_type_script_setup_true_lang.99bb2021.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3eeb6b50.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.8ac8cfcb.js";import"./index.3956bbcf.js";import"./picker.4eaaf2e9.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";export{Y as default};

View File

@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.8b6abd04.js";import{_ as X}from"./attr.vue_vue_type_script_setup_true_lang.8b6abd04.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./picker.966d5ace.js";import"./index.5f547370.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./index.39d7fad9.js";import"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import"./index.75a5ec45.js";import"./index.301703a6.js";import"./index.vue_vue_type_script_setup_true_lang.dc1b37d1.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.882c7954.js";import"./vue.d688b76a.js";import"./sortablejs.1b122128.js";export{X as default};

View File

@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.2255e55e.js";import{_ as X}from"./attr.vue_vue_type_script_setup_true_lang.2255e55e.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./picker.4eaaf2e9.js";import"./index.3956bbcf.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.3eeb6b50.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";export{X as default};

View File

@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.f3e18de6.js";import{_ as Z}from"./attr.vue_vue_type_script_setup_true_lang.f3e18de6.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import"./index.3eeb6b50.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.8ac8cfcb.js";import"./index.3956bbcf.js";import"./picker.4eaaf2e9.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";export{Z as default};

View File

@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.40abc3c1.js";import{_ as Z}from"./attr.vue_vue_type_script_setup_true_lang.40abc3c1.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import"./index.3eeb6b50.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.8ac8cfcb.js";import"./index.3956bbcf.js";import"./picker.4eaaf2e9.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";export{Z as default};

View File

@ -0,0 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.8c4afd67.js";import{_ as Y}from"./attr.vue_vue_type_script_setup_true_lang.8c4afd67.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3eeb6b50.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./picker.8ac8cfcb.js";import"./index.3956bbcf.js";import"./picker.4eaaf2e9.js";import"./index.efeb5098.js";import"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import"./index.27064586.js";import"./index.vue_vue_type_script_setup_true_lang.aa7eacaa.js";import"./usePaging.2a59f422.js";import"./vue3-video-play.5aacf00d.js";import"./vuedraggable.0b47cde1.js";import"./vue.118acae4.js";import"./sortablejs.9ffc750f.js";export{Y as default};

View File

@ -1 +1 @@
import{B as c,C as i,D as F}from"./element-plus.5df6f736.js";import{_ as p}from"./picker.966d5ace.js";import{d as r,o as f,c as V,T as e,K as o,a as m}from"./@vue.108c970a.js";const B=m("div",{class:"form-tips"},"\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A200*200\u50CF\u7D20\uFF1B\u56FE\u7247\u683C\u5F0F\uFF1Ajpg\u3001png\u3001jpeg",-1),A=r({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(E,l)=>{const a=c,n=i,d=p,s=F;return f(),V("div",null,[e(s,{"label-width":"90px"},{default:o(()=>[e(n,{label:"\u5BA2\u670D\u6807\u9898"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.title,"onUpdate:modelValue":l[0]||(l[0]=u=>t.content.title=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u670D\u52A1\u65F6\u95F4"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.time,"onUpdate:modelValue":l[1]||(l[1]=u=>t.content.time=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u8054\u7CFB\u7535\u8BDD"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.mobile,"onUpdate:modelValue":l[2]||(l[2]=u=>t.content.mobile=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u5BA2\u670D\u4E8C\u7EF4\u7801"},{default:o(()=>[m("div",null,[e(d,{modelValue:t.content.qrcode,"onUpdate:modelValue":l[3]||(l[3]=u=>t.content.qrcode=u),"exclude-domain":""},null,8,["modelValue"]),B])]),_:1})]),_:1})])}}});export{A as _};
import{B as c,C as i,D as F}from"./element-plus.7a22678c.js";import{_ as p}from"./picker.4eaaf2e9.js";import{d as r,o as f,c as V,T as e,K as o,a as m}from"./@vue.108c970a.js";const B=m("div",{class:"form-tips"},"\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A200*200\u50CF\u7D20\uFF1B\u56FE\u7247\u683C\u5F0F\uFF1Ajpg\u3001png\u3001jpeg",-1),A=r({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(E,l)=>{const a=c,n=i,d=p,s=F;return f(),V("div",null,[e(s,{"label-width":"90px"},{default:o(()=>[e(n,{label:"\u5BA2\u670D\u6807\u9898"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.title,"onUpdate:modelValue":l[0]||(l[0]=u=>t.content.title=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u670D\u52A1\u65F6\u95F4"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.time,"onUpdate:modelValue":l[1]||(l[1]=u=>t.content.time=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u8054\u7CFB\u7535\u8BDD"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.mobile,"onUpdate:modelValue":l[2]||(l[2]=u=>t.content.mobile=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u5BA2\u670D\u4E8C\u7EF4\u7801"},{default:o(()=>[m("div",null,[e(d,{modelValue:t.content.qrcode,"onUpdate:modelValue":l[3]||(l[3]=u=>t.content.qrcode=u),"exclude-domain":""},null,8,["modelValue"]),B])]),_:1})]),_:1})])}}});export{A as _};

View File

@ -1 +1 @@
import{G as _,H as i,C as r,B as f,D as p}from"./element-plus.5df6f736.js";import{_ as V}from"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import{d as b,o as E,c as x,T as e,K as t,a as B,R as d}from"./@vue.108c970a.js";const F=d("\u6A2A\u6392"),y=d("\u7AD6\u6392"),C={class:"flex-1"},R=b({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(l){return(D,o)=>{const u=_,s=i,n=r,m=f,c=p;return E(),x("div",null,[e(c,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u6392\u7248\u6837\u5F0F"},{default:t(()=>[e(s,{modelValue:l.content.style,"onUpdate:modelValue":o[0]||(o[0]=a=>l.content.style=a)},{default:t(()=>[e(u,{label:1},{default:t(()=>[F]),_:1}),e(u,{label:2},{default:t(()=>[y]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u6807\u9898\u540D\u79F0"},{default:t(()=>[e(m,{class:"w-[400px]",modelValue:l.content.title,"onUpdate:modelValue":o[1]||(o[1]=a=>l.content.title=a)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[B("div",C,[e(V,{modelValue:l.content.data,"onUpdate:modelValue":o[2]||(o[2]=a=>l.content.data=a)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{R as _};
import{G as _,H as i,C as r,B as f,D as p}from"./element-plus.7a22678c.js";import{_ as V}from"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import{d as b,o as E,c as x,T as e,K as t,a as B,R as d}from"./@vue.108c970a.js";const F=d("\u6A2A\u6392"),y=d("\u7AD6\u6392"),C={class:"flex-1"},R=b({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(l){return(D,o)=>{const u=_,s=i,n=r,m=f,c=p;return E(),x("div",null,[e(c,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u6392\u7248\u6837\u5F0F"},{default:t(()=>[e(s,{modelValue:l.content.style,"onUpdate:modelValue":o[0]||(o[0]=a=>l.content.style=a)},{default:t(()=>[e(u,{label:1},{default:t(()=>[F]),_:1}),e(u,{label:2},{default:t(()=>[y]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u6807\u9898\u540D\u79F0"},{default:t(()=>[e(m,{class:"w-[400px]",modelValue:l.content.title,"onUpdate:modelValue":o[1]||(o[1]=a=>l.content.title=a)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[B("div",C,[e(V,{modelValue:l.content.data,"onUpdate:modelValue":o[2]||(o[2]=a=>l.content.data=a)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{R as _};

View File

@ -1 +1 @@
import{G as D,H as y,C as U,B as v,w,D as N}from"./element-plus.5df6f736.js";import{_ as R}from"./index.75a5ec45.js";import{_ as $}from"./picker.60257d01.js";import{_ as j}from"./picker.966d5ace.js";import{f as F}from"./index.1f78e617.js";import{D as G}from"./vuedraggable.882c7954.js";import{d as I,o as _,c as O,T as e,K as t,a as m,u as T,J as E,Q as H,R as r}from"./@vue.108c970a.js";const J=r("\u5F00\u542F"),K=r("\u505C\u7528"),Q={class:"flex-1"},q=m("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*200px",-1),z={class:"bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"},L={class:"ml-3 flex-1"},M=r("\u6DFB\u52A0\u56FE\u7247"),te=I({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const s=a,c=5,V=()=>{var u;((u=s.content.data)==null?void 0:u.length)<c?s.content.data.push({image:"",name:"",link:{}}):F.msgError(`\u6700\u591A\u6DFB\u52A0${c}\u5F20\u56FE\u7247`)},g=u=>{var l;if(((l=s.content.data)==null?void 0:l.length)<=1)return F.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");s.content.data.splice(u,1)};return(u,l)=>{const i=D,b=y,d=U,h=j,B=v,k=$,x=R,A=w,C=N;return _(),O("div",null,[e(C,{"label-width":"70px"},{default:t(()=>{var p;return[e(d,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(b,{modelValue:a.content.enabled,"onUpdate:modelValue":l[0]||(l[0]=o=>a.content.enabled=o)},{default:t(()=>[e(i,{label:1},{default:t(()=>[J]),_:1}),e(i,{label:0},{default:t(()=>[K]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[m("div",Q,[q,e(T(G),{class:"draggable",modelValue:a.content.data,"onUpdate:modelValue":l[1]||(l[1]=o=>a.content.data=o),animation:"300"},{item:t(({element:o,index:f})=>[(_(),E(x,{key:f,onClose:n=>g(f),class:"max-w-[400px]"},{default:t(()=>[m("div",z,[e(h,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),m("div",L,[e(d,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(B,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(d,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(k,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])])]),_:1}),((p=a.content.data)==null?void 0:p.length)<c?(_(),E(d,{key:0},{default:t(()=>[e(A,{type:"primary",onClick:V},{default:t(()=>[M]),_:1})]),_:1})):H("",!0)]}),_:1})])}}});export{te as _};
import{G as D,H as y,C as U,B as v,w,D as N}from"./element-plus.7a22678c.js";import{_ as R}from"./index.3eeb6b50.js";import{_ as $}from"./picker.8ac8cfcb.js";import{_ as j}from"./picker.4eaaf2e9.js";import{f as F}from"./index.bb590457.js";import{D as G}from"./vuedraggable.0b47cde1.js";import{d as I,o as _,c as O,T as e,K as t,a as m,u as T,J as E,Q as H,R as r}from"./@vue.108c970a.js";const J=r("\u5F00\u542F"),K=r("\u505C\u7528"),Q={class:"flex-1"},q=m("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*200px",-1),z={class:"bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"},L={class:"ml-3 flex-1"},M=r("\u6DFB\u52A0\u56FE\u7247"),te=I({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const s=a,c=5,V=()=>{var u;((u=s.content.data)==null?void 0:u.length)<c?s.content.data.push({image:"",name:"",link:{}}):F.msgError(`\u6700\u591A\u6DFB\u52A0${c}\u5F20\u56FE\u7247`)},g=u=>{var l;if(((l=s.content.data)==null?void 0:l.length)<=1)return F.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");s.content.data.splice(u,1)};return(u,l)=>{const i=D,b=y,d=U,h=j,B=v,k=$,x=R,A=w,C=N;return _(),O("div",null,[e(C,{"label-width":"70px"},{default:t(()=>{var p;return[e(d,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(b,{modelValue:a.content.enabled,"onUpdate:modelValue":l[0]||(l[0]=o=>a.content.enabled=o)},{default:t(()=>[e(i,{label:1},{default:t(()=>[J]),_:1}),e(i,{label:0},{default:t(()=>[K]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(d,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[m("div",Q,[q,e(T(G),{class:"draggable",modelValue:a.content.data,"onUpdate:modelValue":l[1]||(l[1]=o=>a.content.data=o),animation:"300"},{item:t(({element:o,index:f})=>[(_(),E(x,{key:f,onClose:n=>g(f),class:"max-w-[400px]"},{default:t(()=>[m("div",z,[e(h,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),m("div",L,[e(d,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(B,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(d,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(k,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])])]),_:1}),((p=a.content.data)==null?void 0:p.length)<c?(_(),E(d,{key:0},{default:t(()=>[e(A,{type:"primary",onClick:V},{default:t(()=>[M]),_:1})]),_:1})):H("",!0)]}),_:1})])}}});export{te as _};

View File

@ -1 +1 @@
import{G as D,H as U,C as v,B as w,w as N,D as R}from"./element-plus.5df6f736.js";import{_ as $}from"./index.75a5ec45.js";import{_ as j}from"./picker.60257d01.js";import{_ as G}from"./picker.966d5ace.js";import{f as b}from"./index.1f78e617.js";import{D as I}from"./vuedraggable.882c7954.js";import{d as O,o as n,c as T,T as l,K as t,J as s,Q as _,a as r,u as H,R as p}from"./@vue.108c970a.js";const J=p("\u5F00\u542F"),K=p("\u505C\u7528"),Q={class:"flex-1"},S=r("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*340px",-1),q={class:"bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"},z={class:"ml-3 flex-1"},L=p("\u6DFB\u52A0\u56FE\u7247"),te=O({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},setup(o){const c=o,i=5,g=()=>{var d;((d=c.content.data)==null?void 0:d.length)<i?c.content.data.push({image:"",name:"",link:{}}):b.msgError(`\u6700\u591A\u6DFB\u52A0${i}\u5F20\u56FE\u7247`)},k=d=>{var u;if(((u=c.content.data)==null?void 0:u.length)<=1)return b.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");c.content.data.splice(d,1)};return(d,u)=>{const f=D,h=U,m=v,y=G,F=w,B=j,x=$,A=N,C=R;return n(),T("div",null,[l(C,{"label-width":"70px"},{default:t(()=>{var V;return[o.type=="mobile"?(n(),s(m,{key:0,label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[l(h,{modelValue:o.content.enabled,"onUpdate:modelValue":u[0]||(u[0]=e=>o.content.enabled=e)},{default:t(()=>[l(f,{label:1},{default:t(()=>[J]),_:1}),l(f,{label:0},{default:t(()=>[K]),_:1})]),_:1},8,["modelValue"])]),_:1})):_("",!0),l(m,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[r("div",Q,[S,l(H(I),{class:"draggable",modelValue:o.content.data,"onUpdate:modelValue":u[1]||(u[1]=e=>o.content.data=e),animation:"300"},{item:t(({element:e,index:E})=>[(n(),s(x,{key:E,onClose:a=>k(E),class:"max-w-[400px]"},{default:t(()=>[r("div",q,[l(y,{modelValue:e.image,"onUpdate:modelValue":a=>e.image=a,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),r("div",z,[l(m,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[l(F,{modelValue:e.name,"onUpdate:modelValue":a=>e.name=a,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(m,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[o.type=="mobile"?(n(),s(B,{key:0,modelValue:e.link,"onUpdate:modelValue":a=>e.link=a},null,8,["modelValue","onUpdate:modelValue"])):_("",!0),o.type=="pc"?(n(),s(F,{key:1,placeholder:"\u8BF7\u8F93\u5165\u94FE\u63A5",modelValue:e.link.path,"onUpdate:modelValue":a=>e.link.path=a},null,8,["modelValue","onUpdate:modelValue"])):_("",!0)]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])])]),_:1}),((V=o.content.data)==null?void 0:V.length)<i?(n(),s(m,{key:1},{default:t(()=>[l(A,{type:"primary",onClick:g},{default:t(()=>[L]),_:1})]),_:1})):_("",!0)]}),_:1})])}}});export{te as _};
import{G as D,H as U,C as v,B as w,w as N,D as R}from"./element-plus.7a22678c.js";import{_ as $}from"./index.3eeb6b50.js";import{_ as j}from"./picker.8ac8cfcb.js";import{_ as G}from"./picker.4eaaf2e9.js";import{f as b}from"./index.bb590457.js";import{D as I}from"./vuedraggable.0b47cde1.js";import{d as O,o as n,c as T,T as l,K as t,J as s,Q as _,a as r,u as H,R as p}from"./@vue.108c970a.js";const J=p("\u5F00\u542F"),K=p("\u505C\u7528"),Q={class:"flex-1"},S=r("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*340px",-1),q={class:"bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"},z={class:"ml-3 flex-1"},L=p("\u6DFB\u52A0\u56FE\u7247"),te=O({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},setup(o){const c=o,i=5,g=()=>{var d;((d=c.content.data)==null?void 0:d.length)<i?c.content.data.push({image:"",name:"",link:{}}):b.msgError(`\u6700\u591A\u6DFB\u52A0${i}\u5F20\u56FE\u7247`)},k=d=>{var u;if(((u=c.content.data)==null?void 0:u.length)<=1)return b.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");c.content.data.splice(d,1)};return(d,u)=>{const f=D,h=U,m=v,y=G,F=w,B=j,x=$,A=N,C=R;return n(),T("div",null,[l(C,{"label-width":"70px"},{default:t(()=>{var V;return[o.type=="mobile"?(n(),s(m,{key:0,label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[l(h,{modelValue:o.content.enabled,"onUpdate:modelValue":u[0]||(u[0]=e=>o.content.enabled=e)},{default:t(()=>[l(f,{label:1},{default:t(()=>[J]),_:1}),l(f,{label:0},{default:t(()=>[K]),_:1})]),_:1},8,["modelValue"])]),_:1})):_("",!0),l(m,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[r("div",Q,[S,l(H(I),{class:"draggable",modelValue:o.content.data,"onUpdate:modelValue":u[1]||(u[1]=e=>o.content.data=e),animation:"300"},{item:t(({element:e,index:E})=>[(n(),s(x,{key:E,onClose:a=>k(E),class:"max-w-[400px]"},{default:t(()=>[r("div",q,[l(y,{modelValue:e.image,"onUpdate:modelValue":a=>e.image=a,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),r("div",z,[l(m,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[l(F,{modelValue:e.name,"onUpdate:modelValue":a=>e.name=a,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(m,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[o.type=="mobile"?(n(),s(B,{key:0,modelValue:e.link,"onUpdate:modelValue":a=>e.link=a},null,8,["modelValue","onUpdate:modelValue"])):_("",!0),o.type=="pc"?(n(),s(F,{key:1,placeholder:"\u8BF7\u8F93\u5165\u94FE\u63A5",modelValue:e.link.path,"onUpdate:modelValue":a=>e.link.path=a},null,8,["modelValue","onUpdate:modelValue"])):_("",!0)]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])])]),_:1}),((V=o.content.data)==null?void 0:V.length)<i?(n(),s(m,{key:1},{default:t(()=>[l(A,{type:"primary",onClick:g},{default:t(()=>[L]),_:1})]),_:1})):_("",!0)]}),_:1})])}}});export{te as _};

View File

@ -1 +1 @@
import{G as c,H as r,C as i,D as f}from"./element-plus.5df6f736.js";import{_ as p}from"./add-nav.vue_vue_type_script_setup_true_lang.fc8d47fa.js";import{d as F,o as E,c as b,T as e,K as t,a as d,R as s}from"./@vue.108c970a.js";const V=s("\u5F00\u542F"),x=s("\u505C\u7528"),B={class:"flex-1"},A=d("div",{class:"form-tips mb-4"},"\u6700\u591A\u53EF\u6DFB\u52A010\u4E2A\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A100px*100px",-1),D=F({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){return(C,a)=>{const u=c,m=r,n=i,_=f;return E(),b("div",null,[e(_,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(m,{modelValue:o.content.enabled,"onUpdate:modelValue":a[0]||(a[0]=l=>o.content.enabled=l)},{default:t(()=>[e(u,{label:1},{default:t(()=>[V]),_:1}),e(u,{label:0},{default:t(()=>[x]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[d("div",B,[A,e(p,{modelValue:o.content.data,"onUpdate:modelValue":a[1]||(a[1]=l=>o.content.data=l)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{D as _};
import{G as c,H as r,C as i,D as f}from"./element-plus.7a22678c.js";import{_ as p}from"./add-nav.vue_vue_type_script_setup_true_lang.4c54eded.js";import{d as F,o as E,c as b,T as e,K as t,a as d,R as s}from"./@vue.108c970a.js";const V=s("\u5F00\u542F"),x=s("\u505C\u7528"),B={class:"flex-1"},A=d("div",{class:"form-tips mb-4"},"\u6700\u591A\u53EF\u6DFB\u52A010\u4E2A\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A100px*100px",-1),D=F({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){return(C,a)=>{const u=c,m=r,n=i,_=f;return E(),b("div",null,[e(_,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(m,{modelValue:o.content.enabled,"onUpdate:modelValue":a[0]||(a[0]=l=>o.content.enabled=l)},{default:t(()=>[e(u,{label:1},{default:t(()=>[V]),_:1}),e(u,{label:0},{default:t(()=>[x]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[d("div",B,[A,e(p,{modelValue:o.content.data,"onUpdate:modelValue":a[1]||(a[1]=l=>o.content.data=l)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{D as _};

View File

@ -1 +0,0 @@
import"./auth.vue_vue_type_script_setup_true_lang.ef8836be.js";import{_ as O}from"./auth.vue_vue_type_script_setup_true_lang.ef8836be.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./role.89849e2e.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./index.5f547370.js";import"./menu.6c5160df.js";export{O as default};

View File

@ -0,0 +1 @@
import"./auth.vue_vue_type_script_setup_true_lang.68de5424.js";import{_ as O}from"./auth.vue_vue_type_script_setup_true_lang.68de5424.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./role.317e2e6c.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./index.3956bbcf.js";import"./menu.cdf7ffe8.js";export{O as default};

View File

@ -1 +1 @@
import{T as q,E as P,F as H,C as I,D as J,N as M}from"./element-plus.5df6f736.js";import{a as O}from"./role.89849e2e.js";import{P as U}from"./index.5f547370.js";import{q as j}from"./index.1f78e617.js";import{m as z}from"./menu.6c5160df.js";import{d as G,s as p,r as c,_ as Q,o as v,c as W,T as o,K as u,L as X,J as Y,a as k,n as y}from"./@vue.108c970a.js";const Z={class:"edit-popup"},ne=G({__name:"auth",emits:["success","close"],setup($,{expose:C,emit:f}){const t=p(),_=p(),r=p(),x=c(!1),d=c(!0),i=c(!1),h=c([]),m=c([]),s=Q({id:"",name:"",desc:"",sort:0,menu_id:[]}),b={name:[{required:!0,message:"\u8BF7\u8F93\u5165\u540D\u79F0",trigger:["blur"]}]},g=()=>{i.value=!0,z().then(e=>{m.value=e,h.value=j(e),y(()=>{D()}),i.value=!1})},E=()=>{var a,n;const e=(a=t.value)==null?void 0:a.getCheckedKeys(),l=(n=t.value)==null?void 0:n.getHalfCheckedKeys();return e==null||e.unshift.apply(e,l),e},D=()=>{s.menu_id.forEach(e=>{y(()=>{var l;(l=t.value)==null||l.setChecked(e,!0,!1)})})},w=e=>{const l=m.value;for(let a=0;a<l.length;a++)t.value.store.nodesMap[l[a].id].expanded=e},F=e=>{var l,a;e?(l=t.value)==null||l.setCheckedKeys(h.value.map(n=>n.id)):(a=t.value)==null||a.setCheckedKeys([])},A=async()=>{var e,l;await((e=_.value)==null?void 0:e.validate()),s.menu_id=E(),await O(s),(l=r.value)==null||l.close(),f("success")},K=()=>{f("close")},R=()=>{var e;(e=r.value)==null||e.open()},B=async e=>{for(const l in s)e[l]!=null&&e[l]!=null&&(s[l]=e[l])};return g(),C({open:R,setFormData:B}),(e,l)=>{const a=H,n=q,T=I,V=P,S=J,L=M;return v(),W("div",Z,[o(U,{ref_key:"popupRef",ref:r,title:"\u5206\u914D\u6743\u9650",async:!0,width:"550px",onConfirm:A,onClose:K},{default:u(()=>[X((v(),Y(S,{class:"ls-form",ref_key:"formRef",ref:_,rules:b,model:s,"label-width":"60px"},{default:u(()=>[o(V,{class:"h-[400px] sm:h-[600px]"},{default:u(()=>[o(T,{label:"\u6743\u9650",prop:"menu_id"},{default:u(()=>[k("div",null,[o(a,{label:"\u5C55\u5F00/\u6298\u53E0",onChange:w}),o(a,{label:"\u5168\u9009/\u4E0D\u5168\u9009",onChange:F}),o(a,{modelValue:d.value,"onUpdate:modelValue":l[0]||(l[0]=N=>d.value=N),label:"\u7236\u5B50\u8054\u52A8"},null,8,["modelValue"]),k("div",null,[o(n,{ref_key:"treeRef",ref:t,data:m.value,props:{label:"name",children:"children"},"check-strictly":!d.value,"node-key":"id","default-expand-all":x.value,"show-checkbox":""},null,8,["data","check-strictly","default-expand-all"])])])]),_:1})]),_:1})]),_:1},8,["model"])),[[L,i.value]])]),_:1},512)])}}});export{ne as _};
import{T as q,E as P,F as H,C as I,D as J,N as M}from"./element-plus.7a22678c.js";import{a as O}from"./role.317e2e6c.js";import{P as U}from"./index.3956bbcf.js";import{q as j}from"./index.bb590457.js";import{m as z}from"./menu.cdf7ffe8.js";import{d as G,s as p,r as c,_ as Q,o as v,c as W,T as o,K as u,L as X,J as Y,a as k,n as y}from"./@vue.108c970a.js";const Z={class:"edit-popup"},ne=G({__name:"auth",emits:["success","close"],setup($,{expose:C,emit:f}){const t=p(),_=p(),r=p(),x=c(!1),d=c(!0),i=c(!1),h=c([]),m=c([]),s=Q({id:"",name:"",desc:"",sort:0,menu_id:[]}),b={name:[{required:!0,message:"\u8BF7\u8F93\u5165\u540D\u79F0",trigger:["blur"]}]},g=()=>{i.value=!0,z().then(e=>{m.value=e,h.value=j(e),y(()=>{D()}),i.value=!1})},E=()=>{var a,n;const e=(a=t.value)==null?void 0:a.getCheckedKeys(),l=(n=t.value)==null?void 0:n.getHalfCheckedKeys();return e==null||e.unshift.apply(e,l),e},D=()=>{s.menu_id.forEach(e=>{y(()=>{var l;(l=t.value)==null||l.setChecked(e,!0,!1)})})},w=e=>{const l=m.value;for(let a=0;a<l.length;a++)t.value.store.nodesMap[l[a].id].expanded=e},F=e=>{var l,a;e?(l=t.value)==null||l.setCheckedKeys(h.value.map(n=>n.id)):(a=t.value)==null||a.setCheckedKeys([])},A=async()=>{var e,l;await((e=_.value)==null?void 0:e.validate()),s.menu_id=E(),await O(s),(l=r.value)==null||l.close(),f("success")},K=()=>{f("close")},R=()=>{var e;(e=r.value)==null||e.open()},B=async e=>{for(const l in s)e[l]!=null&&e[l]!=null&&(s[l]=e[l])};return g(),C({open:R,setFormData:B}),(e,l)=>{const a=H,n=q,T=I,V=P,S=J,L=M;return v(),W("div",Z,[o(U,{ref_key:"popupRef",ref:r,title:"\u5206\u914D\u6743\u9650",async:!0,width:"550px",onConfirm:A,onClose:K},{default:u(()=>[X((v(),Y(S,{class:"ls-form",ref_key:"formRef",ref:_,rules:b,model:s,"label-width":"60px"},{default:u(()=>[o(V,{class:"h-[400px] sm:h-[600px]"},{default:u(()=>[o(T,{label:"\u6743\u9650",prop:"menu_id"},{default:u(()=>[k("div",null,[o(a,{label:"\u5C55\u5F00/\u6298\u53E0",onChange:w}),o(a,{label:"\u5168\u9009/\u4E0D\u5168\u9009",onChange:F}),o(a,{modelValue:d.value,"onUpdate:modelValue":l[0]||(l[0]=N=>d.value=N),label:"\u7236\u5B50\u8054\u52A8"},null,8,["modelValue"]),k("div",null,[o(n,{ref_key:"treeRef",ref:t,data:m.value,props:{label:"name",children:"children"},"check-strictly":!d.value,"node-key":"id","default-expand-all":x.value,"show-checkbox":""},null,8,["data","check-strictly","default-expand-all"])])])]),_:1})]),_:1})]),_:1},8,["model"])),[[L,i.value]])]),_:1},512)])}}});export{ne as _};

View File

@ -1 +1 @@
import{K as U,B as K,C as N,Q as P,R,w as I,D as O,I as S,L as j,M as z,N as $}from"./element-plus.5df6f736.js";import{_ as q}from"./index.vue_vue_type_script_setup_true_lang.1938e45e.js";import{_ as J}from"./index.1f78e617.js";import{_ as M}from"./index.vue_vue_type_script_setup_true_lang.2b417e0a.js";import{d as w,_ as Q,o as r,c as b,T as e,K as o,a8 as G,u,U as H,a6 as W,L as X,J as h,a as m,R as p,S as B,O as Y,j as Z}from"./@vue.108c970a.js";import{g as ee,a as te}from"./finance.9455230a.js";import{u as oe}from"./useDictOptions.8d220934.js";import{u as ae}from"./usePaging.2a59f422.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const ne=p("\u67E5\u8BE2"),le=p("\u91CD\u7F6E"),ue={class:"flex items-center"},ie={class:"flex justify-end mt-4"},se=w({name:"articleLists"}),We=w({...se,setup(re){const a=Q({user_info:"",change_type:"",start_time:"",end_time:""}),{pager:i,getLists:_,resetPage:c,resetParams:E}=ae({fetchFun:te,params:a}),{optionsData:C}=oe({change_type:{api:ee}});return _(),(me,n)=>{const D=U,v=K,s=N,d=P,y=R,x=M,f=I,V=O,g=S,l=j,T=J,A=z,k=q,L=$;return r(),b("div",null,[e(g,{class:"!border-none",shadow:"never"},{default:o(()=>[e(D,{type:"warning",title:"\u6E29\u99A8\u63D0\u793A\uFF1A\u7528\u6237\u8D26\u6237\u53D8\u52A8\u8BB0\u5F55",closable:!1,"show-icon":""}),e(V,{ref:"formRef",class:"mb-[-16px] mt-[16px]",model:a,inline:!0},{default:o(()=>[e(s,{label:"\u7528\u6237\u4FE1\u606F"},{default:o(()=>[e(v,{class:"w-[280px]",modelValue:a.user_info,"onUpdate:modelValue":n[0]||(n[0]=t=>a.user_info=t),placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u7F16\u53F7/\u6635\u79F0/\u624B\u673A\u53F7",clearable:"",onKeyup:G(u(c),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),e(s,{label:"\u53D8\u52A8\u7C7B\u578B"},{default:o(()=>[e(y,{class:"w-[280px]",modelValue:a.change_type,"onUpdate:modelValue":n[1]||(n[1]=t=>a.change_type=t)},{default:o(()=>[e(d,{label:"\u5168\u90E8",value:""}),(r(!0),b(H,null,W(u(C).change_type,(t,F)=>(r(),h(d,{key:F,label:t,value:F},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(s,{label:"\u8BB0\u5F55\u65F6\u95F4"},{default:o(()=>[e(x,{startTime:a.start_time,"onUpdate:startTime":n[2]||(n[2]=t=>a.start_time=t),endTime:a.end_time,"onUpdate:endTime":n[3]||(n[3]=t=>a.end_time=t)},null,8,["startTime","endTime"])]),_:1}),e(s,null,{default:o(()=>[e(f,{type:"primary",onClick:u(c)},{default:o(()=>[ne]),_:1},8,["onClick"]),e(f,{onClick:u(E)},{default:o(()=>[le]),_:1},8,["onClick"])]),_:1})]),_:1},8,["model"])]),_:1}),e(g,{class:"!border-none mt-4",shadow:"never"},{default:o(()=>[X((r(),h(A,{size:"large",data:u(i).lists},{default:o(()=>[e(l,{label:"\u7528\u6237\u7F16\u53F7",prop:"sn","min-width":"100"}),e(l,{label:"\u7528\u6237\u6635\u79F0","min-width":"160"},{default:o(({row:t})=>[m("div",ue,[e(T,{class:"flex-none mr-2",src:t.avatar,width:40,height:40,"preview-teleported":"",fit:"contain"},null,8,["src"]),p(" "+B(t.nickname),1)])]),_:1}),e(l,{label:"\u624B\u673A\u53F7\u7801",prop:"mobile","min-width":"100"}),e(l,{label:"\u53D8\u52A8\u91D1\u989D",prop:"change_amount","min-width":"100"},{default:o(({row:t})=>[m("span",{class:Y({"text-error":t.action==2})},B(t.change_amount),3)]),_:1}),e(l,{label:"\u5269\u4F59\u91D1\u989D",prop:"left_amount","min-width":"100"}),e(l,{label:"\u53D8\u52A8\u7C7B\u578B",prop:"change_type_desc","min-width":"120"}),e(l,{label:"\u6765\u6E90\u5355\u53F7",prop:"source_sn","min-width":"100"}),e(l,{label:"\u8BB0\u5F55\u65F6\u95F4",prop:"create_time","min-width":"120"})]),_:1},8,["data"])),[[L,u(i).loading]]),m("div",ie,[e(k,{modelValue:u(i),"onUpdate:modelValue":n[4]||(n[4]=t=>Z(i)?i.value=t:null),onChange:u(_)},null,8,["modelValue","onChange"])])]),_:1})])}}});export{We as default};
import{K as U,B as K,C as N,Q as P,R,w as I,D as O,I as S,L as j,M as z,N as $}from"./element-plus.7a22678c.js";import{_ as q}from"./index.vue_vue_type_script_setup_true_lang.cabb2d32.js";import{_ as J}from"./index.bb590457.js";import{_ as M}from"./index.vue_vue_type_script_setup_true_lang.f8debc0c.js";import{d as w,_ as Q,o as r,c as b,T as e,K as o,a8 as G,u,U as H,a6 as W,L as X,J as h,a as m,R as p,S as B,O as Y,j as Z}from"./@vue.108c970a.js";import{g as ee,a as te}from"./finance.7666a466.js";import{u as oe}from"./useDictOptions.eb677e88.js";import{u as ae}from"./usePaging.2a59f422.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const ne=p("\u67E5\u8BE2"),le=p("\u91CD\u7F6E"),ue={class:"flex items-center"},ie={class:"flex justify-end mt-4"},se=w({name:"articleLists"}),We=w({...se,setup(re){const a=Q({user_info:"",change_type:"",start_time:"",end_time:""}),{pager:i,getLists:_,resetPage:c,resetParams:E}=ae({fetchFun:te,params:a}),{optionsData:C}=oe({change_type:{api:ee}});return _(),(me,n)=>{const D=U,v=K,s=N,d=P,y=R,x=M,f=I,V=O,g=S,l=j,T=J,A=z,k=q,L=$;return r(),b("div",null,[e(g,{class:"!border-none",shadow:"never"},{default:o(()=>[e(D,{type:"warning",title:"\u6E29\u99A8\u63D0\u793A\uFF1A\u7528\u6237\u8D26\u6237\u53D8\u52A8\u8BB0\u5F55",closable:!1,"show-icon":""}),e(V,{ref:"formRef",class:"mb-[-16px] mt-[16px]",model:a,inline:!0},{default:o(()=>[e(s,{label:"\u7528\u6237\u4FE1\u606F"},{default:o(()=>[e(v,{class:"w-[280px]",modelValue:a.user_info,"onUpdate:modelValue":n[0]||(n[0]=t=>a.user_info=t),placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u7F16\u53F7/\u6635\u79F0/\u624B\u673A\u53F7",clearable:"",onKeyup:G(u(c),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),e(s,{label:"\u53D8\u52A8\u7C7B\u578B"},{default:o(()=>[e(y,{class:"w-[280px]",modelValue:a.change_type,"onUpdate:modelValue":n[1]||(n[1]=t=>a.change_type=t)},{default:o(()=>[e(d,{label:"\u5168\u90E8",value:""}),(r(!0),b(H,null,W(u(C).change_type,(t,F)=>(r(),h(d,{key:F,label:t,value:F},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(s,{label:"\u8BB0\u5F55\u65F6\u95F4"},{default:o(()=>[e(x,{startTime:a.start_time,"onUpdate:startTime":n[2]||(n[2]=t=>a.start_time=t),endTime:a.end_time,"onUpdate:endTime":n[3]||(n[3]=t=>a.end_time=t)},null,8,["startTime","endTime"])]),_:1}),e(s,null,{default:o(()=>[e(f,{type:"primary",onClick:u(c)},{default:o(()=>[ne]),_:1},8,["onClick"]),e(f,{onClick:u(E)},{default:o(()=>[le]),_:1},8,["onClick"])]),_:1})]),_:1},8,["model"])]),_:1}),e(g,{class:"!border-none mt-4",shadow:"never"},{default:o(()=>[X((r(),h(A,{size:"large",data:u(i).lists},{default:o(()=>[e(l,{label:"\u7528\u6237\u7F16\u53F7",prop:"sn","min-width":"100"}),e(l,{label:"\u7528\u6237\u6635\u79F0","min-width":"160"},{default:o(({row:t})=>[m("div",ue,[e(T,{class:"flex-none mr-2",src:t.avatar,width:40,height:40,"preview-teleported":"",fit:"contain"},null,8,["src"]),p(" "+B(t.nickname),1)])]),_:1}),e(l,{label:"\u624B\u673A\u53F7\u7801",prop:"mobile","min-width":"100"}),e(l,{label:"\u53D8\u52A8\u91D1\u989D",prop:"change_amount","min-width":"100"},{default:o(({row:t})=>[m("span",{class:Y({"text-error":t.action==2})},B(t.change_amount),3)]),_:1}),e(l,{label:"\u5269\u4F59\u91D1\u989D",prop:"left_amount","min-width":"100"}),e(l,{label:"\u53D8\u52A8\u7C7B\u578B",prop:"change_type_desc","min-width":"120"}),e(l,{label:"\u6765\u6E90\u5355\u53F7",prop:"source_sn","min-width":"100"}),e(l,{label:"\u8BB0\u5F55\u65F6\u95F4",prop:"create_time","min-width":"120"})]),_:1},8,["data"])),[[L,u(i).loading]]),m("div",ie,[e(k,{modelValue:u(i),"onUpdate:modelValue":n[4]||(n[4]=t=>Z(i)?i.value=t:null),onChange:u(_)},null,8,["modelValue","onChange"])])]),_:1})])}}});export{We as default};

View File

@ -1 +0,0 @@
import"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.8306c976.js";import{_ as O}from"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.8306c976.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./useDictOptions.8d220934.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./index.5f547370.js";import"./product.b8535e4b.js";export{O as default};

View File

@ -0,0 +1 @@
import"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.31dfd6b1.js";import{_ as N}from"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.31dfd6b1.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3956bbcf.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./land.e99066e6.js";export{N as default};

View File

@ -1 +0,0 @@
import"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.d3a4505a.js";import{_ as O}from"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.d3a4505a.js";import"./element-plus.5df6f736.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./useDictOptions.8d220934.js";import"./index.1f78e617.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./index.5f547370.js";import"./land.814edfce.js";export{O as default};

View File

@ -0,0 +1 @@
import"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.ed20e5af.js";import{_ as N}from"./bind.vue_vue_type_script_setup_true_name_landEdit_lang.ed20e5af.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.3956bbcf.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";import"./product.6d9e1810.js";export{N as default};

View File

@ -0,0 +1 @@
import{B as P,C as x,Q as I,R as L,D as U}from"./element-plus.7a22678c.js";import{P as O}from"./index.3956bbcf.js";import{a as $,b as S}from"./land.e99066e6.js";import"./lodash.ec5da75f.js";import{d as E,s as v,r as i,b as T,_ as F,o as p,c as b,T as a,K as s,u as j,U as q,a6 as J,J as K}from"./@vue.108c970a.js";const N={class:"edit-popup"},Q=E({name:"landEdit"}),Z=E({...Q,props:{dictData:{type:Object,default:()=>({})}},emits:["success","close"],setup(z,{expose:D,emit:m}){const f=v(),d=v(),_=i("add"),B=T(()=>_.value="\u7ED1\u5B9A\u4EA7\u54C1"),o=F({id:"",title:"",product_id:""}),y=F({product_id:[{required:!0,message:"\u8BF7\u9009\u62E9\u7ED1\u5B9A\u4EA7\u54C1",trigger:["blur"]}]}),C=async l=>{for(const e in o)l[e]!=null&&l[e]!=null&&(o[e]=l[e])},n=i([]),r=i(!1),V=async l=>{if(l){r.value=!0;const e=await S({name:l});r.value=!1,e.count>0?n.value=e.lists.map(t=>({value:`${t.id}`,label:`ID: ${t.id} / \u540D\u79F0: ${t.name}`})):n.value=[],r.value=!1}else n.value=[]},g=async()=>{var e,t;await((e=f.value)==null?void 0:e.validate());const l={...o};await $(l),(t=d.value)==null||t.close(),m("success")},k=(l="add")=>{var e;_.value=l,(e=d.value)==null||e.open()},w=()=>{m("close")};return D({open:k,setFormData:C,setProduct:async l=>{console.log(l)}}),(l,e)=>{const t=P,c=x,A=I,R=L,h=U;return p(),b("div",N,[a(O,{ref_key:"popupRef",ref:d,title:j(B),async:!0,width:"650px",onConfirm:g,onClose:w},{default:s(()=>[a(h,{ref_key:"formRef",ref:f,model:o,"label-width":"120px",rules:y},{default:s(()=>[a(c,{label:"\u571F\u5730ID",prop:"id"},{default:s(()=>[a(t,{modelValue:o.id,"onUpdate:modelValue":e[0]||(e[0]=u=>o.id=u),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u571F\u5730ID"},null,8,["modelValue"])]),_:1}),a(c,{label:"\u571F\u5730\u540D\u79F0",prop:"title"},{default:s(()=>[a(t,{modelValue:o.title,"onUpdate:modelValue":e[1]||(e[1]=u=>o.title=u),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u571F\u5730\u540D\u79F0"},null,8,["modelValue"])]),_:1}),a(c,{label:"\u7ED1\u5B9A\u4EA7\u54C1",prop:"product_id"},{default:s(()=>[a(R,{modelValue:o.product_id,"onUpdate:modelValue":e[2]||(e[2]=u=>o.product_id=u),filterable:"",remote:"","reserve-keyword":"",placeholder:"\u8BF7\u8F93\u5165\u4EA7\u54C1\u4FE1\u606F","remote-method":V,loading:r.value},{default:s(()=>[(p(!0),b(q,null,J(n.value,u=>(p(),K(A,{key:u.value,label:u.label,value:u.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["title"])])}}});export{Z as _};

View File

@ -1 +0,0 @@
import{B as L,C as O,Q as P,R as S,D as T}from"./element-plus.5df6f736.js";import{u as j}from"./useDictOptions.8d220934.js";import{P as J}from"./index.5f547370.js";import{a as _,b as K}from"./product.b8535e4b.js";import"./lodash.33f675f2.js";import{d as F,s as v,r as B,b as N,_ as E,o as r,c as b,T as t,K as u,u as D,U as Q,a6 as z,J as G}from"./@vue.108c970a.js";const H={class:"edit-popup"},M=F({name:"landEdit"}),oe=F({...M,props:{dictData:{type:Object,default:()=>({})}},emits:["success","close"],setup(W,{expose:C,emit:c}){const p=v(),n=v(),m=B("add"),V=N(()=>m.value="\u7ED1\u5B9A\u8BBE\u5907"),l=E({id:"",name:"",device_id:""}),k=E({device_id:[{required:!0,message:"\u8BF7\u9009\u62E9\u7ED1\u5B9A\u8BBE\u5907",trigger:["blur"]}]}),w=async o=>{for(const e in l)o[e]!=null&&o[e]!=null&&(l[e]=o[e])},{optionsData:f}=j({device:{api:_}}),d=B(!1),g=async o=>{d.value=!0;const e=await _({name:o!=null?o:""});f.device=e,d.value=!1},y=async()=>{var e,s;await((e=p.value)==null?void 0:e.validate());const o={...l};await K(o),(s=n.value)==null||s.close(),c("success")},A=(o="add")=>{var e;m.value=o,(e=n.value)==null||e.open()},R=()=>{c("close")};return C({open:A,setFormData:w}),(o,e)=>{const s=L,i=O,h=P,x=S,I=T;return r(),b("div",H,[t(J,{ref_key:"popupRef",ref:n,title:D(V),async:!0,width:"650px",onConfirm:y,onClose:R},{default:u(()=>[t(I,{ref_key:"formRef",ref:p,model:l,"label-width":"120px",rules:k},{default:u(()=>[t(i,{label:"\u4EA7\u54C1ID",prop:"id"},{default:u(()=>[t(s,{modelValue:l.id,"onUpdate:modelValue":e[0]||(e[0]=a=>l.id=a),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u4EA7\u54C1ID"},null,8,["modelValue"])]),_:1}),t(i,{label:"\u4EA7\u54C1\u540D\u79F0",prop:"name"},{default:u(()=>[t(s,{modelValue:l.name,"onUpdate:modelValue":e[1]||(e[1]=a=>l.name=a),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u4EA7\u54C1\u540D\u79F0"},null,8,["modelValue"])]),_:1}),t(i,{label:"\u7ED1\u5B9A\u8BBE\u5907",prop:"device_id"},{default:u(()=>[t(x,{modelValue:l.device_id,"onUpdate:modelValue":e[2]||(e[2]=a=>l.device_id=a),filterable:"",multiple:"",remote:"","reserve-keyword":"",placeholder:"\u8BF7\u8F93\u5165\u8BBE\u5907\u4FE1\u606F","remote-method":g,loading:d.value},{default:u(()=>[(r(!0),b(Q,null,z(D(f).device,(a,U)=>(r(),G(h,{key:U,label:a.deviceinfo,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["title"])])}}});export{oe as _};

View File

@ -1 +0,0 @@
import{B as L,C as U,Q as O,R as S,D as T}from"./element-plus.5df6f736.js";import{u as j}from"./useDictOptions.8d220934.js";import{P as J}from"./index.5f547370.js";import{a as _,b as K}from"./land.814edfce.js";import"./lodash.33f675f2.js";import{d as B,s as F,r as b,b as N,_ as E,o as p,c as v,T as u,K as a,u as D,U as Q,a6 as z,J as G}from"./@vue.108c970a.js";const H={class:"edit-popup"},M=B({name:"landEdit"}),te=B({...M,props:{dictData:{type:Object,default:()=>({})}},emits:["success","close"],setup(W,{expose:C,emit:c}){const i=F(),n=F(),m=b("add"),V=N(()=>m.value="\u7ED1\u5B9A\u4EA7\u54C1"),t=E({id:"",title:"",product_id:""}),g=E({product_id:[{required:!0,message:"\u8BF7\u9009\u62E9\u7ED1\u5B9A\u4EA7\u54C1",trigger:["blur"]}]}),k=async o=>{for(const e in t)o[e]!=null&&o[e]!=null&&(t[e]=o[e])},{optionsData:f}=j({product:{api:_}}),d=b(!1),w=async o=>{d.value=!0;const e=await _({name:o!=null?o:""});f.product=e,d.value=!1},y=async()=>{var e,s;await((e=i.value)==null?void 0:e.validate());const o={...t};await K(o),(s=n.value)==null||s.close(),c("success")},A=(o="add")=>{var e;m.value=o,(e=n.value)==null||e.open()},R=()=>{c("close")};return C({open:A,setFormData:k,setProduct:async o=>{console.log(o)}}),(o,e)=>{const s=L,r=U,h=O,P=S,x=T;return p(),v("div",H,[u(J,{ref_key:"popupRef",ref:n,title:D(V),async:!0,width:"650px",onConfirm:y,onClose:R},{default:a(()=>[u(x,{ref_key:"formRef",ref:i,model:t,"label-width":"120px",rules:g},{default:a(()=>[u(r,{label:"\u571F\u5730ID",prop:"id"},{default:a(()=>[u(s,{modelValue:t.id,"onUpdate:modelValue":e[0]||(e[0]=l=>t.id=l),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u571F\u5730ID"},null,8,["modelValue"])]),_:1}),u(r,{label:"\u571F\u5730\u540D\u79F0",prop:"title"},{default:a(()=>[u(s,{modelValue:t.title,"onUpdate:modelValue":e[1]||(e[1]=l=>t.title=l),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u571F\u5730\u540D\u79F0"},null,8,["modelValue"])]),_:1}),u(r,{label:"\u7ED1\u5B9A\u4EA7\u54C1",prop:"product_id"},{default:a(()=>[u(P,{modelValue:t.product_id,"onUpdate:modelValue":e[2]||(e[2]=l=>t.product_id=l),remote:"",filterable:"",placeholder:"\u8BF7\u8F93\u5165\u4EA7\u54C1\u4FE1\u606F","remote-method":w,loading:d.value},{default:a(()=>[(p(!0),v(Q,null,z(D(f).product,(l,I)=>(p(),G(h,{key:I,label:l.productinfo,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["title"])])}}});export{te as _};

View File

@ -0,0 +1 @@
import{B as x,C as I,Q as U,R as L,D as O}from"./element-plus.7a22678c.js";import{P}from"./index.3956bbcf.js";import{a as $,b as S}from"./product.6d9e1810.js";import"./lodash.ec5da75f.js";import{d as b,s as v,r as c,b as T,_ as B,o as p,c as E,T as t,K as s,u as j,U as q,a6 as J,J as K}from"./@vue.108c970a.js";const N={class:"edit-popup"},Q=b({name:"landEdit"}),Y=b({...Q,props:{dictData:{type:Object,default:()=>({})}},emits:["success","close"],setup(z,{expose:F,emit:m}){const f=v(),r=v(),_=c("add"),D=T(()=>_.value="\u7ED1\u5B9A\u8BBE\u5907"),a=B({id:"",name:"",device_id:""}),y=B({device_id:[{required:!0,message:"\u8BF7\u9009\u62E9\u7ED1\u5B9A\u8BBE\u5907",trigger:["blur"]}]}),C=async l=>{for(const e in a)l[e]!=null&&l[e]!=null&&(a[e]=l[e])},n=c([]),d=c(!1),V=async l=>{if(l){d.value=!0;const e=await S({name:l});d.value=!1,e.count>0?n.value=e.lists.map(o=>({value:`${o.id}`,label:`ID: ${o.id} / \u540D\u79F0: ${o.name}`})):n.value=[],d.value=!1}else n.value=[]},k=async()=>{var e,o;await((e=f.value)==null?void 0:e.validate());const l={...a};await $(l),(o=r.value)==null||o.close(),m("success")},w=(l="add")=>{var e;_.value=l,(e=r.value)==null||e.open()},g=()=>{m("close")};return F({open:w,setFormData:C}),(l,e)=>{const o=x,i=I,A=U,R=L,h=O;return p(),E("div",N,[t(P,{ref_key:"popupRef",ref:r,title:j(D),async:!0,width:"650px",onConfirm:k,onClose:g},{default:s(()=>[t(h,{ref_key:"formRef",ref:f,model:a,"label-width":"120px",rules:y},{default:s(()=>[t(i,{label:"\u4EA7\u54C1ID",prop:"id"},{default:s(()=>[t(o,{modelValue:a.id,"onUpdate:modelValue":e[0]||(e[0]=u=>a.id=u),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u4EA7\u54C1ID"},null,8,["modelValue"])]),_:1}),t(i,{label:"\u4EA7\u54C1\u540D\u79F0",prop:"name"},{default:s(()=>[t(o,{modelValue:a.name,"onUpdate:modelValue":e[1]||(e[1]=u=>a.name=u),disabled:"",clearable:"",placeholder:"\u8BF7\u8F93\u5165\u4EA7\u54C1\u540D\u79F0"},null,8,["modelValue"])]),_:1}),t(i,{label:"\u7ED1\u5B9A\u8BBE\u5907",prop:"device_id"},{default:s(()=>[t(R,{modelValue:a.device_id,"onUpdate:modelValue":e[2]||(e[2]=u=>a.device_id=u),filterable:"",multiple:"",remote:"","reserve-keyword":"",placeholder:"\u8BF7\u8F93\u5165\u8BBE\u5907\u4FE1\u606F","remote-method":V,loading:d.value},{default:s(()=>[(p(!0),E(q,null,J(n.value,u=>(p(),K(A,{key:u.value,label:u.label,value:u.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["title"])])}}});export{Y as _};

View File

@ -1 +1 @@
import{K as s,I as c,L as l,w as _,M as d}from"./element-plus.5df6f736.js";import{s as F}from"./system.3931f2c5.js";import{f as B}from"./index.1f78e617.js";import{d as r,r as E,o as C,c as f,T as t,K as o,R as h}from"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.50c3b6f7.js";import"./axios.c2a2014a.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./lodash.33f675f2.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.5d5b8bda.js";import"./color.da05fa89.js";import"./clone.06747a68.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.1c707d7b.js";import"./ms.a9ae1d6d.js";import"./nprogress.fc605139.js";import"./vue-clipboard3.dc900a40.js";import"./clipboard.6beb87aa.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const b={class:"cache"},D=h("\u6E05\u9664\u7CFB\u7EDF\u7F13\u5B58"),w=r({name:"cache"}),nt=r({...w,setup(A){const a=E([{content:"\u7CFB\u7EDF\u7F13\u5B58",desc:"\u7CFB\u7EDF\u8FD0\u884C\u8FC7\u7A0B\u4E2D\u4EA7\u751F\u7684\u5404\u7C7B\u7F13\u5B58\u6570\u636E"}]),i=async()=>{await B.confirm("\u786E\u8BA4\u6E05\u9664\u7CFB\u7EDF\u7F13\u5B58\uFF1F"),await F()};return(k,x)=>{const m=s,u=c,e=l,n=_,p=d;return C(),f("div",b,[t(u,{class:"!border-none",shadow:"never"},{default:o(()=>[t(m,{type:"warning",title:"\u6E29\u99A8\u63D0\u793A\uFF1A\u7BA1\u7406\u7CFB\u7EDF\u8FD0\u884C\u8FC7\u7A0B\u4E2D\u4EA7\u751F\u7684\u7F13\u5B58",closable:!1,"show-icon":""})]),_:1}),t(u,{class:"!border-none mt-4",shadow:"never"},{default:o(()=>[t(p,{data:a.value,size:"large"},{default:o(()=>[t(e,{label:"\u7BA1\u7406\u5185\u5BB9",prop:"content","min-width":"130"}),t(e,{label:"\u5185\u5BB9\u8BF4\u660E",prop:"desc","min-width":"180"}),t(e,{label:"\u64CD\u4F5C",width:"130",fixed:"right"},{default:o(()=>[t(n,{type:"primary",link:"",onClick:i},{default:o(()=>[D]),_:1})]),_:1})]),_:1},8,["data"])]),_:1})])}}});export{nt as default};
import{K as s,I as c,L as l,w as _,M as d}from"./element-plus.7a22678c.js";import{s as F}from"./system.55a0a8dd.js";import{f as B}from"./index.bb590457.js";import{d as r,r as E,o as C,c as f,T as t,K as o,R as h}from"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";const b={class:"cache"},D=h("\u6E05\u9664\u7CFB\u7EDF\u7F13\u5B58"),w=r({name:"cache"}),nt=r({...w,setup(A){const a=E([{content:"\u7CFB\u7EDF\u7F13\u5B58",desc:"\u7CFB\u7EDF\u8FD0\u884C\u8FC7\u7A0B\u4E2D\u4EA7\u751F\u7684\u5404\u7C7B\u7F13\u5B58\u6570\u636E"}]),i=async()=>{await B.confirm("\u786E\u8BA4\u6E05\u9664\u7CFB\u7EDF\u7F13\u5B58\uFF1F"),await F()};return(k,x)=>{const m=s,u=c,e=l,n=_,p=d;return C(),f("div",b,[t(u,{class:"!border-none",shadow:"never"},{default:o(()=>[t(m,{type:"warning",title:"\u6E29\u99A8\u63D0\u793A\uFF1A\u7BA1\u7406\u7CFB\u7EDF\u8FD0\u884C\u8FC7\u7A0B\u4E2D\u4EA7\u751F\u7684\u7F13\u5B58",closable:!1,"show-icon":""})]),_:1}),t(u,{class:"!border-none mt-4",shadow:"never"},{default:o(()=>[t(p,{data:a.value,size:"large"},{default:o(()=>[t(e,{label:"\u7BA1\u7406\u5185\u5BB9",prop:"content","min-width":"130"}),t(e,{label:"\u5185\u5BB9\u8BF4\u660E",prop:"desc","min-width":"180"}),t(e,{label:"\u64CD\u4F5C",width:"130",fixed:"right"},{default:o(()=>[t(n,{type:"primary",link:"",onClick:i},{default:o(()=>[D]),_:1})]),_:1})]),_:1},8,["data"])]),_:1})])}}});export{nt as default};

View File

@ -1,4 +1,4 @@
import{c as $,g as B}from"./axios.c2a2014a.js";var R={exports:{}};/*!
import{c as $,g as B}from"./axios.eb055ccc.js";var R={exports:{}};/*!
* clipboard.js v2.0.11
* https://clipboardjs.com/
*

View File

@ -0,0 +1 @@
import"./code-preview.vue_vue_type_script_setup_true_lang.d2a1da0d.js";import{_ as L}from"./code-preview.vue_vue_type_script_setup_true_lang.d2a1da0d.js";import"./element-plus.7a22678c.js";import"./@vue.108c970a.js";import"./@vueuse.d3d080b7.js";import"./@element-plus.d6eabd08.js";import"./lodash-es.29c53eac.js";import"./dayjs.ff93117e.js";import"./axios.eb055ccc.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.bb590457.js";import"./lodash.ec5da75f.js";import"./vue-router.ed788fee.js";import"./pinia.eff1ffd5.js";import"./vue-demi.ebc8116b.js";import"./css-color-function.31dc130b.js";import"./color.b6d632a4.js";import"./clone.7a47b02c.js";import"./color-convert.755d189f.js";import"./color-name.e7a4e1d3.js";import"./color-string.e356f5de.js";import"./balanced-match.d2a36341.js";import"./debug.3a33898e.js";import"./ms.a9ae1d6d.js";import"./nprogress.fa64f2fc.js";import"./vue-clipboard3.be0dfeee.js";import"./clipboard.824ba320.js";import"./echarts.8d7a50ae.js";import"./zrender.1084fa23.js";import"./tslib.60310f1a.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.241b9b5d.js";export{L as default};

Some files were not shown because too many files have changed in this diff Show More