Compare commits

...

127 Commits

Author SHA1 Message Date
fcc7c7dc68 更新 2025-07-17 18:05:15 +08:00
3f4fa2dd0e 删除对于文件 2025-07-17 17:45:35 +08:00
26a946daae 更新 2025-07-17 17:44:24 +08:00
b470f5946b 更新图片解析 2025-07-17 17:29:41 +08:00
6367754737 更新 2025-07-17 12:02:43 +08:00
ba54ca1efb 更新数据 2025-07-17 11:58:57 +08:00
f80a0e5539 更新 2025-07-17 11:45:03 +08:00
a03780b352 更新 2025-07-17 11:28:18 +08:00
7407a43c85 更新 2025-07-16 20:59:42 +08:00
726bae2652 更新 2025-07-16 20:07:29 +08:00
596760a707 新增解析的js 2025-07-16 18:34:49 +08:00
122208d9cb 更新 2025-07-16 18:33:13 +08:00
e2c18bf8df 跟新 2025-07-16 13:49:12 +08:00
b98625f344 更新 2025-07-16 11:54:27 +08:00
3019295319 更新数据 2025-07-16 11:45:07 +08:00
91cadd297c 更新页面 2025-07-16 11:10:37 +08:00
896590f35c 更新 2025-07-16 11:03:44 +08:00
186f647473 更新 2025-07-16 10:21:53 +08:00
dfae83dae9 更新 2025-07-16 10:09:58 +08:00
ee12595e1f 更新 2025-07-15 20:55:29 +08:00
b6818d430e 更新 2025-07-15 20:46:37 +08:00
f01d911476 更新 2025-07-15 20:19:13 +08:00
9b9b2e6e8f 更新 2025-07-15 19:27:43 +08:00
0f5f6c27d2 更新 2025-07-15 18:20:55 +08:00
498caf263d 更新 2025-07-15 17:43:28 +08:00
a94687d5fa 更新 2025-07-15 17:32:57 +08:00
42cb2cb268 更新组件 2025-07-15 16:56:26 +08:00
3b6e0d6912 跟香港 2025-07-15 16:20:18 +08:00
26b52c0175 更新 2025-07-14 21:08:51 +08:00
6ff3f78b75 更新 2025-07-14 21:05:39 +08:00
b288168070 更新 2025-07-14 19:34:37 +08:00
39ae9755db 更新 2025-07-14 19:22:33 +08:00
c7c239e1ee 更新 2025-07-14 19:09:21 +08:00
b30a8b4a33 更新 2025-07-14 18:18:21 +08:00
446304ae1b 更新大屏 2025-07-14 18:15:09 +08:00
694ad9a54c 更新 2025-07-14 17:33:04 +08:00
e940744dd8 更新数据 2025-07-14 17:31:24 +08:00
09a47e5369 更新 2025-07-14 16:56:58 +08:00
6a2b4e12c5 更新 2025-07-14 16:53:38 +08:00
dc43ddd3c5 更新 2025-07-14 16:34:26 +08:00
f6d433fd65 更新 2025-07-14 16:12:14 +08:00
bfc6504e2d 更新大屏 2025-07-14 14:21:12 +08:00
813e5a9c97 更新 2025-07-14 10:34:19 +08:00
d32f7fe5bc 更新大屏 2025-07-14 10:09:55 +08:00
cd4f8a95d2 更新 2025-07-12 18:34:34 +08:00
7c9b3152f8 更新 2025-07-12 18:28:29 +08:00
15e23797ac 更新 2025-07-12 18:25:16 +08:00
bf1b90c578 更新 2025-07-12 18:21:54 +08:00
c438006604 更新 2025-07-12 18:14:01 +08:00
342754ca20 更新页面 2025-07-12 18:11:10 +08:00
0fe250f0fd 更新 2025-07-12 17:33:59 +08:00
f65adab730 更新 2025-07-12 16:45:32 +08:00
9039840986 更新 2025-07-12 16:43:04 +08:00
9cb8877486 跟香港 2025-07-11 18:01:15 +08:00
d3031e0aee 更新 2025-07-11 16:19:46 +08:00
193cc06752 更新 2025-07-11 16:17:18 +08:00
69bee283a8 更新页面 2025-07-11 15:08:23 +08:00
f5d605fc23 更新 2025-07-10 21:18:19 +08:00
f8559da65b 更新页面 2025-07-10 20:53:34 +08:00
a903362712 更新页面 2025-07-10 20:46:20 +08:00
2f443e33bd 更新页面 2025-07-10 20:37:45 +08:00
529089b73c 更新目录 2025-07-10 20:07:17 +08:00
a487cf59a1 更新 2025-07-10 19:55:38 +08:00
b90aa5371a 更新 2025-07-10 19:51:22 +08:00
e07beea359 更新页面 2025-07-10 19:07:56 +08:00
5e9638fba3 更新 2025-07-10 18:27:50 +08:00
d0d3da243c 更新 2025-07-10 18:00:22 +08:00
b2880cd82c 更新页面 2025-07-10 17:59:39 +08:00
5f6f37a166 更新页面 2025-07-10 12:09:51 +08:00
be93c68817 更新数据 2025-07-10 10:53:48 +08:00
7705b46451 更新 2025-07-09 21:12:24 +08:00
df1e33c9bf 更新 2025-07-09 20:00:38 +08:00
f3e0a1823e 更新 2025-07-09 14:01:00 +08:00
3346582af9 更新 2025-07-08 20:59:58 +08:00
e5ca357876 解决冲突 2025-07-08 20:12:45 +08:00
f6390c9002 更新页面 2025-07-08 20:10:24 +08:00
a825e90ec4 Merge branch 'main' of http://61.139.16.27:26684/zy_oyj/sgxt_web 2025-07-08 19:50:38 +08:00
e0ae89616b 优化代码 2025-07-08 19:50:28 +08:00
28d7d0e8f0 更新 2025-07-08 14:16:05 +08:00
f4e4b36851 更新数据 2025-07-08 14:14:34 +08:00
c9fa01cfe7 更新数据 2025-07-08 14:12:52 +08:00
9ccca009ef 更新 2025-07-08 13:51:06 +08:00
b0b4644c2b 更新 2025-07-08 10:37:12 +08:00
b4852c5b5c update 2025-07-08 10:26:48 +08:00
a36c2e8646 更新 2025-07-08 10:18:56 +08:00
234bf6ecc4 更新 2025-07-07 20:24:43 +08:00
87926cd75e 更新 2025-07-07 20:19:00 +08:00
f25fc6ef15 更新下班 2025-07-07 19:47:22 +08:00
105da72904 更新数据 2025-07-07 17:36:07 +08:00
f173a1e1f3 更新 2025-07-07 16:17:59 +08:00
d7862aa6b9 更新会议 2025-07-07 15:42:18 +08:00
c78e353780 更新 2025-07-07 11:40:59 +08:00
82f2f3b2c6 更新 2025-07-07 10:29:55 +08:00
1b19b0268d 更新 2025-07-07 10:29:09 +08:00
23be579c8f 新增工作绩效 2025-07-07 10:14:09 +08:00
2d178ce75c 更新数据 2025-07-07 09:41:59 +08:00
07dd70fe39 更新数据 2025-07-07 09:38:52 +08:00
73ad4b3bb6 更新数据 2025-07-06 18:51:22 +08:00
4fa85505cf 更新 2025-07-06 17:23:11 +08:00
f2eb08b935 更新 2025-07-06 15:43:45 +08:00
4312177138 更新数据 2025-07-06 15:38:03 +08:00
11a32b8fe8 更新页面 2025-07-06 15:07:33 +08:00
a1ac6938f1 更新 2025-07-06 14:19:53 +08:00
db830fcfd2 更新页面 2025-07-05 19:58:42 +08:00
0b048b4a48 更新 2025-07-05 19:49:14 +08:00
54711e4a34 更新页面 2025-07-05 19:37:28 +08:00
38e04e095c 更新页面 2025-07-05 12:03:00 +08:00
ea13f83283 更新数据 2025-07-04 11:19:35 +08:00
19677b36a6 更新页面 2025-07-04 10:57:21 +08:00
c82e2f1972 更新 2025-07-04 10:09:13 +08:00
05a9a884e7 更新 2025-07-03 21:32:25 +08:00
8bb83821ea 更新 2025-07-03 21:24:21 +08:00
29444fbdc2 更新页面 2025-07-03 21:15:39 +08:00
a72b8782bc 更新 2025-07-03 17:47:01 +08:00
1d3534bcb9 更新列表 2025-07-03 15:13:09 +08:00
fe5bd8324c 更新 2025-07-03 15:02:32 +08:00
jy
1ce78e69b6 Merge branch 'main' of http://183.222.39.242:3000/zy_oyj/sgxt_web 2025-06-17 20:06:32 +08:00
jy
6dcd327ac9 修改 2025-06-17 20:04:43 +08:00
70d54261a8 解决冲突 2025-06-10 09:32:38 +08:00
be453d2230 更新 2025-06-10 09:26:48 +08:00
jy
a5c65af987 feat: 对接任务调度增删查改功能 2025-06-06 15:23:27 +08:00
jy
e34b2bbdae 更新 2025-06-05 09:16:27 +08:00
jy
1ecca030f8 feat: 对接采纳功能 2025-06-04 18:23:31 +08:00
jy
d8bee57f6b feat: 1.对接全域布控下菜单的增删查改功能,以及用户操作流程优化。2.对接人力情报采集系统采集流转列表,搜索,新增接口 2025-06-04 17:27:57 +08:00
jy
2b3da38702 更新 2025-05-27 10:19:13 +08:00
jy
f217eddce2 修改我的布控编辑页面 2025-05-27 10:01:47 +08:00
jy
65947c2eb4 对接’我的布控的增删查改‘,布控审核送审 2025-05-26 21:03:06 +08:00
205 changed files with 16647 additions and 35785 deletions

View File

@ -4,5 +4,5 @@ ENV='development'
# base api
# VUE_APP_BASE_API = '/api'
VUE_APP_GATEWAY_API = '/mosty-api/mosty-base'
VUE_APP_GATEWAY_BASE_URL = 'http://123.60.110.230'
VUE_APP_GATEWAY_BASE_URL = 'http://172.20.19.62'
VUE_APP_GATEWAY_HOST = '123.60.110.230'

View File

@ -1,5 +0,0 @@
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.use(express.static('./www'))
app.listen(3000, () => console.log('Example app listening on port 3000!'))

20521
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,8 @@
"@fullcalendar/timegrid": "^5.9.0",
"@fullcalendar/vue3": "^5.9.0",
"@types/video.js": "^7.3.42",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^0.26.0",
"core-js": "^3.6.5",
"echarts": "^5.3.3",
@ -25,6 +27,7 @@
"gifler": "^0.1.0",
"lodash": "^4.17.21",
"mitt": "^3.0.0",
"moment": "^2.30.1",
"ol": "^6.14.1",
"pinia": "^3.0.1",
"vue": "^3.2.8",

View File

@ -20,8 +20,8 @@
<%= htmlWebpackPlugin.options.title %>
</title>
<!-- 地图 -->
<script type="text/javascript" src="./pgis/eliMapboxgl.min.js"></script>
<!-- 地图 -->
<script type="text/javascript" src="./pgis/eliMapboxgl.min.js"></script>
<!-- 视频 -->
<script src="./static/js/vconsole.min.js"></script>
@ -31,26 +31,33 @@
<script src="./static/js/antd.min.js"></script>
<script src="./static/js/antd-with-locales.min.js"></script>
<!-- 文本提取 -->
<script src="./textPdf/pdf.min.js"></script>
<!-- 引入mammoth.js处理Word文件 -->
<script src="./textPdf/mammoth.browser.min.js"></script>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
properly without JavaScript enabled. Please enable it to
continue.</strong>
</noscript>
<!-- 语音- 视频 提取 -->
<script src="./textVideo/recorder-core.js" charset="UTF-8"></script>
<script src="./textVideo/wav.js" charset="UTF-8"></script>
<script src="./textVideo/pcm.js" charset="UTF-8"></script>
<noscript><strong></strong> </noscript>
<div id="app"></div>
<script>
document.documentElement.addEventListener(
"touchmove",
var videoText = ''
// 初始化PDF.js
pdfjsLib.GlobalWorkerOptions.workerSrc = "./textPdf/pdf.worker.min.js";
document.documentElement.addEventListener("touchmove",
function (event) {
if (event.touches.length > 1) {
event.preventDefault();
}
},
false
);
if (event.touches.length > 1) event.preventDefault();
}, false);
</script>
<script src="./textVideo/wsconnecter.js" charset="utf-8"></script>
<script src="./textVideo/textVideo.js" charset="utf-8"></script>
</body>
</html>

18
public/textPdf/mammoth.browser.min.js vendored Normal file

File diff suppressed because one or more lines are too long

22
public/textPdf/pdf.min.js vendored Normal file

File diff suppressed because one or more lines are too long

22
public/textPdf/pdf.worker.min.js vendored Normal file

File diff suppressed because one or more lines are too long

96
public/textVideo/pcm.js Normal file
View File

@ -0,0 +1,96 @@
/*
pcm编码器+编码引擎
https://github.com/xiangyuecn/Recorder
编码原理本编码器输出的pcm格式数据其实就是Recorder中的buffers原始数据经过了重新采样16位时为LE小端模式Little Endian并未经过任何编码处理
编码的代码和wav.js区别不大pcm加上一个44字节wav头即成wav文件所以要播放pcm就很简单了直接转成wav文件来播放已提供转换函数 Recorder.pcm2wav
*/
(function(){
"use strict";
Recorder.prototype.enc_pcm={
stable:true
,testmsg:"pcm为未封装的原始音频数据pcm数据文件无法直接播放支持位数8位、16位填在比特率里面采样率取值无限制"
};
Recorder.prototype.pcm=function(res,True,False){
var This=this,set=This.set
,size=res.length
,bitRate=set.bitRate==8?8:16;
var buffer=new ArrayBuffer(size*(bitRate/8));
var data=new DataView(buffer);
var offset=0;
// 写入采样数据
if(bitRate==8) {
for(var i=0;i<size;i++,offset++) {
//16转8据说是雷霄骅的 https://blog.csdn.net/sevennight1989/article/details/85376149 细节比blqw的按比例的算法清晰点虽然都有明显杂音
var val=(res[i]>>8)+128;
data.setInt8(offset,val,true);
};
}else{
for (var i=0;i<size;i++,offset+=2){
data.setInt16(offset,res[i],true);
};
};
True(new Blob([data.buffer],{type:"audio/pcm"}));
};
/**pcm直接转码成wav可以直接用来播放需同时引入wav.js
data: {
sampleRate:16000 pcm的采样率
bitRate:16 pcm的位数 取值8 或 16
blob:blob对象
}
data如果直接提供的blob将默认使用16位16khz的配置仅用于测试
True(wavBlob,duration)
False(msg)
**/
Recorder.pcm2wav=function(data,True,False){
if(data.slice && data.type!=null){//Blob 测试用
data={blob:data};
};
var sampleRate=data.sampleRate||16000,bitRate=data.bitRate||16;
if(!data.sampleRate || !data.bitRate){
console.warn("pcm2wav必须提供sampleRate和bitRate");
};
if(!Recorder.prototype.wav){
False("pcm2wav必须先加载wav编码器wav.js");
return;
};
var reader=new FileReader();
reader.onloadend=function(){
var pcm;
if(bitRate==8){
//8位转成16位
var u8arr=new Uint8Array(reader.result);
pcm=new Int16Array(u8arr.length);
for(var j=0;j<u8arr.length;j++){
pcm[j]=(u8arr[j]-128)<<8;
};
}else{
pcm=new Int16Array(reader.result);
};
Recorder({
type:"wav"
,sampleRate:sampleRate
,bitRate:bitRate
}).mock(pcm,sampleRate).stop(function(wavBlob,duration){
True(wavBlob,duration);
},False);
};
reader.readAsArrayBuffer(data.blob);
};
})();

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,275 @@
/**
* Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights
* Reserved. MIT License (https://opensource.org/licenses/MIT)
*/
/* 2022-2023 by zhaoming,mali aihealthx.com */
// 连接; 定义socket连接类对象与语音对象
var wsconnecter = new WebSocketConnectMethod({ msgHandle: getJsonMessage, stateHandle: getConnState });
var audioBlob;
var isfilemode = true; // if it is in file mode
// 录音; 定义录音对象,wav格式
var rec = Recorder({
type: "pcm",
bitRate: 16,
sampleRate: 16000,
onProcess: recProcess
});
var sampleBuf = new Int16Array();
var rec_text = ""; // for online rec asr result
var offline_text = ""; // for offline rec asr result
var file_ext = "";
var file_sample_rate = 16000; //for wav file sample rate
var file_data_array; // array to save file data
var totalsend = 0;
addresschange();
function addresschange() {
var Uri = 'ws://192.168.0.232:10095';
Uri = Uri.replace(/wss/g, "https");
window.open(Uri, '_blank');
}
var readWavInfo = function (bytes) {
//读取wav文件头统一成44字节的头
if (bytes.byteLength < 44) {
return null;
};
var wavView = bytes;
var eq = function (p, s) {
for (var i = 0; i < s.length; i++) {
if (wavView[p + i] != s.charCodeAt(i)) {
return false;
};
};
return true;
};
if (eq(0, "RIFF") && eq(8, "WAVEfmt ")) {
var numCh = wavView[22];
if (wavView[20] == 1 && (numCh == 1 || numCh == 2)) {//raw pcm 单或双声道
var sampleRate = wavView[24] + (wavView[25] << 8) + (wavView[26] << 16) + (wavView[27] << 24);
var bitRate = wavView[34] + (wavView[35] << 8);
var heads = [wavView.subarray(0, 12)], headSize = 12;//head只保留必要的块
//搜索data块的位置
var dataPos = 0; // 44 或有更多块
for (var i = 12, iL = wavView.length - 8; i < iL;) {
if (wavView[i] == 100 && wavView[i + 1] == 97 && wavView[i + 2] == 116 && wavView[i + 3] == 97) {//eq(i,"data")
heads.push(wavView.subarray(i, i + 8));
headSize += 8;
dataPos = i + 8; break;
}
var i0 = i;
i += 4;
i += 4 + wavView[i] + (wavView[i + 1] << 8) + (wavView[i + 2] << 16) + (wavView[i + 3] << 24);
if (i0 == 12) {//fmt
heads.push(wavView.subarray(i0, i));
headSize += i - i0;
}
}
if (dataPos) {
var wavHead = new Uint8Array(headSize);
for (var i = 0, n = 0; i < heads.length; i++) {
wavHead.set(heads[i], n); n += heads[i].length;
}
return {
sampleRate: sampleRate
, bitRate: bitRate
, numChannels: numCh
, wavHead44: wavHead
, dataPos: dataPos
};
};
};
};
return null;
};
function upfileOnchange(files) {
this.files = [files];
var len = this.files.length;
for (let i = 0; i < len; i++) {
let fileAudio = new FileReader();
fileAudio.readAsArrayBuffer(this.files[i]);
file_ext = this.files[i].name.split('.').pop().toLowerCase();
var audioblob;
fileAudio.onload = function () {
audioblob = fileAudio.result;
file_data_array = audioblob;
}
fileAudio.onerror = function (e) {
console.log('error' + e);
}
}
// for wav file, we get the sample rate
if (file_ext == "wav") {
for (let i = 0; i < len; i++) {
let fileAudio = new FileReader();
fileAudio.readAsArrayBuffer(this.files[i]);
fileAudio.onload = function () {
audioblob = new Uint8Array(fileAudio.result);
var info = readWavInfo(audioblob);
file_sample_rate = info.sampleRate;
}
}
}
}
function play_file() {
var audioblob = new Blob([new Uint8Array(file_data_array)], { type: "audio/wav" });
var audio_record = document.getElementById('audio_record');
audio_record.src = (window.URL || webkitURL).createObjectURL(audioblob);
audio_record.controls = true;
}
function start_file_send() {
sampleBuf = new Uint8Array(file_data_array);
var chunk_size = 960; // for asr chunk_size [5, 10, 5]
while (sampleBuf.length >= chunk_size) {
sendBuf = sampleBuf.slice(0, chunk_size);
totalsend = totalsend + sampleBuf.length;
sampleBuf = sampleBuf.slice(chunk_size, sampleBuf.length);
wsconnecter.wsSend(sendBuf);
}
stop();
}
function stop() {
var chunk_size = new Array(5, 10, 5);
var request = {
"chunk_size": chunk_size,
"wav_name": "h5",
"is_speaking": false,
"chunk_interval": 10,
"mode": getAsrMode(),
};
if (sampleBuf.length > 0) {
wsconnecter.wsSend(sampleBuf);
sampleBuf = new Int16Array();
}
wsconnecter.wsSend(JSON.stringify(request));
// 控件状态更新
isRec = false;
if (isfilemode == false) {
//wait 3s for asr result
setTimeout(function () {
wsconnecter.wsStop();
}, 3000);
rec.stop(function (blob, duration) {
var audioBlob = Recorder.pcm2wav(data = { sampleRate: 16000, bitRate: 16, blob: blob },
function (theblob, duration) {
console.log(theblob);
var audio_record = document.getElementById('audio_record');
audio_record.src = (window.URL || webkitURL).createObjectURL(theblob);
audio_record.controls = true;
}, function (msg) {
console.log(msg);
}
);
}, function (errMsg) {
console.log("errMsg: " + errMsg);
});
}
// 停止连接
}
function getAsrMode() {
return 'offline';
}
function getHotwords() {
return null
}
function handleWithTimestamp(tmptext, tmptime) {
if (tmptime == null || tmptime == "undefined" || tmptext.length <= 0) {
return tmptext;
}
tmptext = tmptext.replace(/。|||、|\?|\.|\ /g, ","); // in case there are a lot of "。"
var words = tmptext.split(","); // split to chinese sentence or english words
var jsontime = JSON.parse(tmptime); //JSON.parse(tmptime.replace(/\]\]\[\[/g, "],[")); // in case there are a lot segments by VAD
var char_index = 0; // index for timestamp
var text_withtime = "";
for (var i = 0; i < words.length; i++) {
if (words[i] == "undefined" || words[i].length <= 0) {
continue;
}
if (/^[a-zA-Z]+$/.test(words[i])) { // if it is english
text_withtime = text_withtime + jsontime[char_index][0] / 1000 + ":" + words[i] + "\n";
char_index = char_index + 1; //for english, timestamp unit is about a word
}
else {
text_withtime = text_withtime + jsontime[char_index][0] / 1000 + ":" + words[i] + "\n";
char_index = char_index + words[i].length; //for chinese, timestamp unit is about a char
}
}
return text_withtime;
}
// 语音识别结果; 对jsonMsg数据解析,将识别结果附加到编辑框中
function getJsonMessage(jsonMsg) {
var rectxt = "" + JSON.parse(jsonMsg.data)['text'];
var asrmodel = JSON.parse(jsonMsg.data)['mode'];
var is_final = JSON.parse(jsonMsg.data)['is_final'];
var timestamp = JSON.parse(jsonMsg.data)['timestamp'];
if (asrmodel == "2pass-offline" || asrmodel == "offline") {
offline_text = offline_text + handleWithTimestamp(rectxt, timestamp); //rectxt; //.replace(/ +/g,"");
rec_text = offline_text;
} else {
rec_text = rec_text + rectxt;
}
videoText = rec_text;
if (is_final == true) {
play_file();
wsconnecter.wsStop();
btnConnect.disabled = false;
}
}
// 连接状态响应
function getConnState(connState) {
if (connState === 0) start_file_send();
}
// 识别启动、停止、清空操作
function start() {
var ret = wsconnecter.wsStart();//启动连接
return ret == 1 ? 1 : 0;
}
function recProcess(buffer, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) {
if (isRec === true) {
var data_48k = buffer[buffer.length - 1];
var array_48k = new Array(data_48k);
var data_16k = Recorder.SampleData(array_48k, bufferSampleRate, 16000).data;
sampleBuf = Int16Array.from([...sampleBuf, ...data_16k]);
var chunk_size = 960; // for asr chunk_size [5, 10, 5]
while (sampleBuf.length >= chunk_size) {
sendBuf = sampleBuf.slice(0, chunk_size);
sampleBuf = sampleBuf.slice(chunk_size, sampleBuf.length);
wsconnecter.wsSend(sendBuf);
}
}
}
function getUseITN() {
return false;
}

86
public/textVideo/wav.js Normal file
View File

@ -0,0 +1,86 @@
/*
wav编码器+编码引擎
https://github.com/xiangyuecn/Recorder
当然最佳推荐使用mp3、wav格式代码也是优先照顾这两种格式
浏览器支持情况
https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
编码原理给pcm数据加上一个44直接的wav头即成wav文件pcm数据就是Recorder中的buffers原始数据重新采样16位时为LE小端模式Little Endian实质上是未经过任何编码处理
*/
(function(){
"use strict";
Recorder.prototype.enc_wav={
stable:true
,testmsg:"支持位数8位、16位填在比特率里面采样率取值无限制"
};
Recorder.prototype.wav=function(res,True,False){
var This=this,set=This.set
,size=res.length
,sampleRate=set.sampleRate
,bitRate=set.bitRate==8?8:16;
//编码数据 https://github.com/mattdiamond/Recorderjs https://www.cnblogs.com/blqw/p/3782420.html https://www.cnblogs.com/xiaoqi/p/6993912.html
var dataLength=size*(bitRate/8);
var buffer=new ArrayBuffer(44+dataLength);
var data=new DataView(buffer);
var offset=0;
var writeString=function(str){
for (var i=0;i<str.length;i++,offset++) {
data.setUint8(offset,str.charCodeAt(i));
};
};
var write16=function(v){
data.setUint16(offset,v,true);
offset+=2;
};
var write32=function(v){
data.setUint32(offset,v,true);
offset+=4;
};
/* RIFF identifier */
writeString('RIFF');
/* RIFF chunk length */
write32(36+dataLength);
/* RIFF type */
writeString('WAVE');
/* format chunk identifier */
writeString('fmt ');
/* format chunk length */
write32(16);
/* sample format (raw) */
write16(1);
/* channel count */
write16(1);
/* sample rate */
write32(sampleRate);
/* byte rate (sample rate * block align) */
write32(sampleRate*(bitRate/8));// *1 声道
/* block align (channel count * bytes per sample) */
write16(bitRate/8);// *1 声道
/* bits per sample */
write16(bitRate);
/* data chunk identifier */
writeString('data');
/* data chunk length */
write32(dataLength);
// 写入采样数据
if(bitRate==8) {
for(var i=0;i<size;i++,offset++) {
//16转8据说是雷霄骅的 https://blog.csdn.net/sevennight1989/article/details/85376149 细节比blqw的按比例的算法清晰点虽然都有明显杂音
var val=(res[i]>>8)+128;
data.setInt8(offset,val,true);
};
}else{
for (var i=0;i<size;i++,offset+=2){
data.setInt16(offset,res[i],true);
};
};
True(new Blob([data.buffer],{type:"audio/wav"}));
}
})();

View File

@ -0,0 +1,119 @@
/**
* Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights
* Reserved. MIT License (https://opensource.org/licenses/MIT)
*/
/* 2021-2023 by zhaoming,mali aihealthx.com */
function WebSocketConnectMethod( config ) { //定义socket连接方法类
var speechSokt;
var connKeeperID;
var msgHandle = config.msgHandle;
var stateHandle = config.stateHandle;
this.wsStart = function () {
var Uri = 'ws://192.168.0.232:10095'; //"wss://111.205.137.58:5821/wss/" //设置wss asr online接口地址 如 wss://X.X.X.X:port/wss/
if(Uri.match(/wss:\S*|ws:\S*/))
{
console.log("Uri"+Uri);
}
else
{
alert("请检查wss地址正确性");
return 0;
}
if ( 'WebSocket' in window ) {
speechSokt = new WebSocket( Uri ); // 定义socket连接对象
speechSokt.onopen = function(e){onOpen(e);}; // 定义响应函数
speechSokt.onclose = function(e){
console.log("onclose ws!");
//speechSokt.close();
onClose(e);
};
speechSokt.onmessage = function(e){onMessage(e);};
speechSokt.onerror = function(e){onError(e);};
return 1;
}
else {
alert('当前浏览器不支持 WebSocket');
return 0;
}
};
// 定义停止与发送函数
this.wsStop = function () {
if(speechSokt != undefined) {
console.log("stop ws!");
speechSokt.close();
}
};
this.wsSend = function ( oneData ) {
if(speechSokt == undefined) return;
if ( speechSokt.readyState === 1 ) { // 0:CONNECTING, 1:OPEN, 2:CLOSING, 3:CLOSED
speechSokt.send( oneData );
}
};
// SOCEKT连接中的消息与状态响应
function onOpen( e ) {
// 发送json
var chunk_size = new Array( 5, 10, 5 );
var request = {
"chunk_size": chunk_size,
"wav_name": "h5",
"is_speaking": true,
"chunk_interval":10,
"itn":getUseITN(),
"mode":getAsrMode(),
};
if(isfilemode)
{
request.wav_format=file_ext;
if(file_ext=="wav")
{
request.wav_format="PCM";
request.audio_fs=file_sample_rate;
}
}
var hotwords=getHotwords();
if(hotwords!=null )
{
request.hotwords=hotwords;
}
console.log(JSON.stringify(request));
speechSokt.send(JSON.stringify(request));
console.log("连接成功");
stateHandle(0);
}
function onClose( e ) {
stateHandle(1);
}
function onMessage( e ) {
msgHandle( e );
}
function onError( e ) {
info_div.innerHTML="连接"+e;
console.log(e);
stateHandle(2);
}
}

View File

@ -9,7 +9,6 @@
import { ref, nextTick, provide, onMounted } from "vue";
import { useStore } from "vuex";
import { getItem } from "@/utils/storage";
import { qcckPost, qcckGet, qcckPut, qcckDelete } from "@/api/qcckApi.js";
import { generateNewStyle, writeNewStyle } from "@/utils/theme";
const store = useStore();
generateNewStyle(store.getters.mainColor).then((newStyle) => {

View File

@ -156,6 +156,7 @@
right: 20px;
top: 22px;
font-size: 17px;
z-index: 9;
span {
color: #0bb7ff;
cursor: pointer;
@ -208,7 +209,7 @@
width: calc(100% - 890px);
height: 80px;
z-index: 9;
background: #fff;
background: #052249;
}
.home-foot-t{

BIN
src/assets/images/bg44.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/assets/images/bg46.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
src/assets/images/car.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,223 @@
<template>
<el-dialog
:title="titleValue"
width="1400px"
:model-value="modelValue"
append-to-body
@close="closed"
>
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="标签名称">
<el-input
placeholder="请输入标签名称"
v-model="listQuery.bqMc"
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset"> 重置 </el-button>
</el-form-item>
</el-form>
<div
class="tabBox"
:class="props.Single ? 'tabBoxRadio' : ''"
:key="keyVal"
style="margin-top: 0px"
>
<el-table
ref="multipleUserRef"
@selection-change="handleSelectionChange"
:data="tableData"
v-loading="loading"
border
:row-key="keyid"
style="width: 100%"
height="450"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column prop="bqMc" align="center" label="标签名称" />
<el-table-column prop="bqDm" align="center" label="标签代码" />
<el-table-column prop="bqDj" align="center" label="标签等级">
<template #default="{ row }">
<DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
</template>
</el-table-column>
<el-table-column prop="bqYs" align="center" label="标签颜色">
<template #default="{ row }">
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@pageSize-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[10, 20, 50, 100]"
:page-pageSize="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { qcckGet } from "@/api/qcckApi.js";
import { defineProps, ref, getCurrentInstance, watch } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_BQ_DJ, D_GS_SSYJ } = proxy.$dict("D_GS_BQ_DJ", "D_GS_SSYJ"); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
titleValue: {
type: String,
default: "选择标签"
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: false
},
roleIds: {
type: Array,
default: []
}
});
const loading = ref(false);
const total = ref(0);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20
});
const keyVal = ref();
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosed"]);
const keyid = (row) => {
return row.id;
};
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { pageCurrent: 1, pageSize: 20 };
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosed", list);
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
const getListData = () => {
keyVal.value++;
loading.value = true;
const params = { ...listQuery.value, bqLb: "02" };
qcckGet(params, "/mosty-gsxt/tbGsxtBqgl/selectPage")
.then((res) => {
loading.value = false;
tableData.value = res.records || [];
total.value = res.total;
multipleUser();
})
.catch(() => {
loading.value = false;
});
};
//列表回显
function multipleUser() {
tableData.value.forEach((item) => {
multipleUserRef.value.toggleRowSelection(item, false);
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
watch(
() => props.modelValue,
(val) => {
if (val) handleFilter();
},
{ immediate: true }
);
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -0,0 +1,213 @@
<template>
<el-dialog width="1400px" :model-value="modelValue" append-to-body @close="closed">
<template #title>
<span class="mr10 f16">选择布控群体</span>
</template>
<el-form :model="listQuery" :inline="true">
<el-form-item label="群体名称">
<el-input placeholder="请输入群体名称" v-model="listQuery.qtMc" clearable ></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table ref="multipleUserRef" v-loading="loading" :key="keyTabel" @selection-change="handleSelectionChange" :data="tableData" border :row-key="keyid" style="width: 100%" height="450">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column type="expand">
<template #default="props">
<div class="pl20 pr10 pt10 pb10">
<el-table :data="props.row.zdryList" >
<el-table-column label="姓名" prop="ryXm" align="center" />
<el-table-column prop="rySfzh" align="center" label="身份证"/>
<el-table-column prop="ryXb" align="center" label="性别">
<template #default="{ row }">
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
</template>
</el-table-column>
<el-table-column prop="ryMz" align="center" label="民族">
<template #default="{ row }">
<DictTag :value="row.ryMz" :tag="false" :options="D_BZ_MZ" />
</template>
</el-table-column>
<el-table-column prop="ryLxdh" align="center" label="手机号"/>
<el-table-column prop="xzdXz" align="center" label="现居住址"/>
<el-table-column prop="bqList" align="center" label="人员标签">
<template #default="{ row }">
<span v-if="row.bqList">
<span v-for="(it,idx) in row.bqList" :key="idx"> {{ it.bqMc }}</span>
</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
</el-table-column>
<el-table-column prop="qtMc" align="center" label="群体名称"/>
<el-table-column prop="qtFxdj" align="center" label="风险等级">
<template #default="{ row }">
<DictTag :value="row.qtFxdj" :tag="false" :options="D_GS_ZDQT_FXDJ" />
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye flex just-end " :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
<template #footer>
<div class="flex just-center">
<el-button type="primary" @click="onComfirm">确认</el-button>
<el-button @click="closed">取消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { qcckGet} from "@/api/qcckApi.js";
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
const { proxy } = getCurrentInstance();
const { D_BZ_XB,D_GS_ZDQT_FXDJ,D_BZ_MZ } = proxy.$dict("D_BZ_XB","D_GS_ZDQT_FXDJ","D_BZ_MZ"); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default:false
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: false
},
roleIds: {
type: Array,
default: []
},
});
const loading = ref(false)
const total = ref(0);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20
});
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosed"]);
const keyTabel = ref(0)
const keyid = (row) => {
return row.id;
};
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { pageCurrent: 1, pageSize: 20, };
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosed", list);
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
const getListData = () => {
keyTabel.value++
loading.value = true;
const params = {...listQuery.value}
qcckGet(params,'/mosty-gsxt/tbGsxtZdqt/selectPage').then(res=>{
loading.value = false;
tableData.value = res.records || [];
total.value = res.total;
multipleUser();
}).catch(()=>{
loading.value = false;
})
};
//列表回显
function multipleUser() {
tableData.value.forEach((item) => {
multipleUserRef.value.toggleRowSelection(item, false);
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
watch(()=>props.modelValue,val=>{
if(val) handleFilter();
},{immediate:true})
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -44,7 +44,11 @@
style="width: 100%"
height="450"
>
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column
prop="loginName"
align="center"
@ -131,7 +135,7 @@ const props = defineProps({
roleIds: {
type: Array,
default: []
},
}
});
const total = ref(0);
const listQuery = ref({
@ -142,7 +146,16 @@ const form = ref({});
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosedUsers"]);
onMounted(() => {
handleFilter();
});
watch(()=>props.modelValue, (val) => {
if (val) {
nextTick(() => {
getListData();
});
}
},{
immediate: true
});
const closed = () => {
emits("update:modelValue", false);
@ -163,16 +176,17 @@ const keyid = (row) => {
//
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = []
let listId = []
userList.forEach(val=>{
if(listId.indexOf(val.id) == -1) {
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
})
});
emits("choosedUsers", list);
let data = { type: props.LeaderType, userList: userList };
emits("choosedUsersLeader", data);
closed();
};
@ -193,20 +207,20 @@ const handleCurrentChange = (currentPage) => {
};
const getListData = () => {
const params = listQuery.value;
selectUserDeptPage(params).then(res=>{
selectUserDeptPage(params).then((res) => {
tableData.value = res?.records;
total.value = Number(res.total);
multipleUser()
multipleUser();
});
};
//
function multipleUser() {
tableData.value.forEach(item=>{
if(props.roleIds.some(id=>id == item.id)){
tableData.value.forEach((item) => {
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
})
});
}
const handleFilter = () => {
@ -226,7 +240,6 @@ const handleSelectionChange = (val) => {
} else {
multipleSelectionUser.value = val;
}
};
</script>
@ -241,10 +254,5 @@ const handleSelectionChange = (val) => {
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
.el-dialog{
background: #050e33;
}
.el-dialog__title{
color: #fff;
}
</style>

View File

@ -0,0 +1,195 @@
<template>
<el-dialog :title="titleValue" width="1400px" :model-value="modelValue" append-to-body @close="closed">
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="标签名称">
<el-input placeholder="请输入标签名称" v-model="listQuery.bqMc" clearable ></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table ref="multipleUserRef" v-loading="loading" :key="keyTabel" @selection-change="handleSelectionChange" :data="tableData" border :row-key="keyid" style="width: 100%" height="450">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column prop="xsBh" align="center" label="线索编号"/>
<el-table-column prop="xsMc" align="center" label="线索名称"/>
<el-table-column prop="xlLx" align="center" label="线索类型">
<template #default="{ row }">
<DictTag :tag="false" :value="row.xlLx" :options="D_GS_XS_LX" />
</template>
</el-table-column>
<el-table-column prop="qbLy" align="center" label="线索来源">
<template #default="{ row }">
<DictTag :value="row.qbLy" :tag="false" :options="D_GS_XS_LY" />
</template>
</el-table-column>
<el-table-column prop="xsNr" align="center" label="线索内容"/>
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { qcckGet} from "@/api/qcckApi.js";
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_XS_LX,D_GS_XS_LY } = proxy.$dict("D_GS_XS_LX","D_GS_XS_LY"); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default:false
},
titleValue: {
type: String,
default: "选择线索"
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: true
},
roleIds: {
type: Array,
default: []
}
});
const loading = ref(false)
const total = ref(0);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20
});
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosed"]);
const keyTabel = ref(0)
const keyid = (row) => {
return row.id;
};
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { pageCurrent: 1, pageSize: 20, };
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosed", list);
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
const getListData = () => {
keyTabel.value++
const params = {...listQuery.value}
loading.value = true;
qcckGet(params,'/mosty-gsxt/qbcj/selectPage').then(res=>{
loading.value = false;
tableData.value = res.records || [];
total.value = res.total;
multipleUser();
}).catch(()=>{
loading.value = false;
})
};
//列表回显
function multipleUser() {
tableData.value.forEach((item) => {
multipleUserRef.value.toggleRowSelection(item, false);
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
watch(()=>props.modelValue,val=>{
if(val) handleFilter();
},{immediate:true})
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -0,0 +1,100 @@
<template>
<el-dialog v-model="showDialog" :destroy-on-close="true" title="新增人员" @close="close" :close-on-click-modal="false">
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
<template #bqList>
<div class="marks pointer" @click="chooseMarksVisible = true">
<span style="color: rgb(175 178 184);padding-left: 10px;" v-if="!listQuery.bqList || listQuery.bqList.length == 0 ">请选择标签</span>
<span v-else >
<el-tag @close.stop="closeTag(idx)" type="success" closable v-for="(it,idx) in listQuery.bqList" :key="idx">{{ it.bqMc }}</el-tag >
</span>
</div>
</template>
</FormMessage>
<template #footer>
<div class="flex just-center">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</div>
</template>
</el-dialog>
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
</template>
<script setup>
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { reactive, ref,getCurrentInstance } from 'vue';
const { proxy } = getCurrentInstance();
const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 获取字典数据
const elform = ref()
const roleIds = ref([])
const showDialog = ref(false)
const chooseMarksVisible = ref(false)
const emit = defineEmits(['change'])
const listQuery = ref({})
const formData = ref([
{ label: "人员姓名", prop: "ryXm", type: "input" ,width:'45%'},
{ label: "性别", prop: "ryXb", type: "select" ,width:'45%',options:D_BZ_XB},
{ label: "身份证号", prop: "rySfzh", type: "input" ,width:'45%'},
{ label: "手机号码", prop: "ryLxdh", type: "input",width:'45%' },
{ label: "户籍地址", prop: "hjdXz", type: "input",width:'100%'},
{ label: "现居住地址", prop: "xzdXz", type: "input",width:'100%'},
{ label: "特征描述", prop: "qtTzms", type: "input" ,width:'100%'},
{ label: "人员标签", prop: "bqList", type: "slot" ,width:'100%'},
{ label: "车牌号", prop: "clCph", type: "input" ,width:'45%'},
{ label: "车架号", prop: "clCjh", type: "input" ,width:'45%'},
{ label: "人员照片", prop: "fjZp", type: "upload" ,width:'100%'},
])
const rules = reactive({
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
ryXb: [{ required: true, message: "请选择性别", trigger: "change" }],
ryLxdh: [{ required: true, message: "请输入手机号码", trigger: "blur" }],
hjdXz: [{ required: true, message: "请输入户籍地", trigger: "blur" }],
xzdXz: [{ required: true, message: "请输入现居住地址", trigger: "blur" }],
})
const init = () =>{
showDialog.value = true;
}
// 选择标签
const choosed = (val) => {
listQuery.value.bqList = val.map(v=>{
return { bqZl:v.bqLb , bqId:v.id, bqLx:v.bqLx, bqLb:v.bqLb, bqMc:v.bqMc, bqDm:v.bqDm }
});
roleIds.value = val.map(v=>v.id)
}
// 删除数据
const closeTag = (idx) =>{
listQuery.value.bqList.splice(idx,1)
roleIds.value.splice(idx,1)
}
const submitForm = () =>{
elform.value.submit((val)=>{
val.id = new Date().getTime()
emit('change',val)
showDialog.value = false;
})
}
const close = () =>{
elform.value.reset();
listQuery.value.bqList = []
roleIds.value = []
showDialog.value = false;
}
defineExpose({init})
</script>
<style lang="scss" scoped>
.marks{
width: 100%;
min-height: 32px;
border: 1px solid #e9e9e9;
border-radius: 4px;
}
</style>

View File

@ -0,0 +1,224 @@
<template>
<el-dialog width="1400px" :model-value="modelValue" append-to-body @close="closed">
<template #title>
<span class="mr10 f16">选择布控人员</span>
<el-button type="primary" size="small" @click="zdyaddPerson">添加其他人员</el-button>
</template>
<el-form :model="listQuery" :inline="true">
<el-form-item label="人员姓名">
<el-input placeholder="请输入人员姓名" v-model="listQuery.ryxm" clearable ></el-input>
</el-form-item>
<el-form-item label="身份证号">
<el-input placeholder="请输入身份证号" v-model="listQuery.sfzh" clearable ></el-input>
</el-form-item>
<el-form-item label="手机号码">
<el-input placeholder="请输入手机号码" v-model="listQuery.sjhm" clearable ></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table ref="multipleUserRef" :key="keyTabel" v-loading="loading" @selection-change="handleSelectionChange" :data="tableData" border :row-key="keyid" style="width: 100%" height="450">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column prop="ryXm" align="center" label="姓名"/>
<el-table-column prop="rySfzh" align="center" label="身份证"/>
<el-table-column prop="ryXb" align="center" label="性别">
<template #default="{ row }">
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
</template>
</el-table-column>
<el-table-column prop="ryMz" align="center" label="民族">
<template #default="{ row }">
<DictTag :value="row.ryMz" :tag="false" :options="D_BZ_MZ" />
</template>
</el-table-column>
<el-table-column prop="hjdXz" align="center" label="户籍地"/>
<el-table-column prop="xzdXz" align="center" label="现居住址"/>
<el-table-column prop="ryLxdh" align="center" label="手机号"/>
<el-table-column prop="qtXnsf" align="center" label="虚拟身份"/>
<el-table-column prop="clCph" align="center" label="车牌号"/>
<el-table-column prop="clCjh" align="center" label="车架号"/>
<el-table-column prop="qtTzms" align="center" label="特征描述"/>
<el-table-column prop="bqList" align="center" label="人员标签">
<template #default="{ row }">
<span v-if="row.bqList">
<span v-for="(it,idx) in row.bqList" :key="idx"> {{ it.bqMc }}</span>
</span>
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye flex just-end " :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
<template #footer>
<div class="flex just-center">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
<!-- 自定义选添加人 -->
<AddPeo ref="addPerson" @change="changeZdy"></AddPeo>
</template>
<script setup>
import AddPeo from './addPeo.vue'
import { qcckGet} from "@/api/qcckApi.js";
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
const { proxy } = getCurrentInstance();
const { D_BZ_XB,D_BZ_MZ } = proxy.$dict("D_BZ_XB","D_BZ_MZ"); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default:false
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: false
},
roleIds: {
type: Array,
default: []
},
});
const loading = ref(false)
const total = ref(0);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20
});
const addPerson = ref()
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosed","choosedAdd"]);
const keyTabel = ref(0)
const keyid = (row) => {
return row.id;
};
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { pageCurrent: 1, pageSize: 20, };
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosed", list);
closed();
};
// 自定义加人
const changeZdy = (val) => {
emits("choosedAdd", val);
closed();
}
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
const getListData = () => {
keyTabel.value++
const params = {...listQuery.value}
loading.value = true;
qcckGet(params,'/mosty-gsxt/tbGsxtZdry/selectPage').then(res=>{
loading.value = false;
tableData.value = res.records || [];
total.value = res.total;
multipleUser();
}).catch(()=>{
loading.value = false;
})
};
//列表回显
function multipleUser() {
tableData.value.forEach((item) => {
multipleUserRef.value.toggleRowSelection(item, false);
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
const zdyaddPerson = () => {
addPerson.value.init();
};
watch(()=>props.modelValue,val=>{
if(val) handleFilter();
},{immediate:true})
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -7,6 +7,8 @@
:key="item.value"
:index="index"
:class="item.elTagType"
@click="handleItem(item)"
:style="{color: props.color}"
>{{ item.label || item.zdmc }}</span>
<el-tag
v-else
@ -14,6 +16,7 @@
:key="item.value + ''"
:index="index"
:type="item.elTagType === 'primary' ? '' : item.elTagType"
@click="handleItem(item)"
:class="item.elTagType"
>{{ item.label || item.zdmc }}</el-tag
>
@ -23,7 +26,7 @@
</template>
<script setup>
import { computed } from "vue";
import { computed,defineEmits } from "vue";
const props = defineProps({
// 数据
@ -31,10 +34,16 @@ const props = defineProps({
type: Array,
default: null
},
color:{
type:String,
default:'#6f6f74'
},
tag: false,
value: [Number, String, Array]
});
const emit = defineEmits(['clickTag'])
const values = computed(() => {
if (props.value !== null && typeof props.value !== "undefined") {
return Array.isArray(props.value) ? props.value : [String(props.value)];
@ -42,6 +51,11 @@ const values = computed(() => {
return [];
}
});
// 处理数据
const handleItem = (item) =>{
emit('clickTag',item)
}
</script>
<style scoped>

View File

@ -0,0 +1,385 @@
<template>
<div>
<el-dialog v-model="modelValue" title="文件解析" width="1000px" :show-close="true" :center="true" :close-on-click-modal="false" :before-close="handleClose" >
<div class="flex align-center">
<h3>提取文件类型</h3>
<el-radio-group v-model="active" @change="changeRadio">
<el-radio :label="'文件解析'">文件解析</el-radio>
<el-radio :label="'图片解析'">图片解析</el-radio>
</el-radio-group>
</div>
<!-- 文件解析 -->
<div v-show="active == '文件解析'">
<h1>文件文本提取工具</h1>
<p>上传文件提取文本内容支持 .txt, .pdf, .docx, mp4 , mp3, wav</p>
<div class="container">
<input type="file" id="file-input" accept=".txt,.pdf,.docx,'.mp4','.mp3','.wav'"/>
<button @click="chooseFile">选择文件</button>
<p id="file-info">未选择文件</p>
</div>
<button id="extract-btn" disabled>提取文本</button>
<h3>提取结果</h3>
<div id="result">请先上传文件...</div>
</div>
<!-- 图片解析 -->
<div v-show="active == '图片解析'" v-loading="loading" element-loading-text="模型加载中......">
<div class="flex align-center just-between">
<h1>文件文本提取工具</h1>
<span title="刷新" class="pointer" >
<el-icon color="#0072ff" size="30px" @click="initPage"><RefreshRight /></el-icon>
<el-icon color="#23c044" size="14px" v-if="hasLoadingJS"><CircleCheckFilled /></el-icon>
<el-icon color="#e60e0e" size="14px" v-if="!hasLoadingJS"><CircleCloseFilled /></el-icon>
</span>
</div>
<p>上传文件提取文本内容支持 .png, .jpg </p>
<div class="container flex" style="height: 248px;">
<div class="mr10">
<el-upload class="upload-demo" action="abc" :auto-upload="false" :on-change="onHandleChange" :show-file-list="false">
<el-button size="medium" type="primary">上传图片</el-button>
</el-upload>
<p id="file-info">{{ files.name || '未选择文件' }} </p>
</div>
<div class="box">
<div class="imd">
<img :src="image" v-if="image" style="width: 340px; max-height: 200px"/>
<img :src="image" ref="imageRef" v-show="false" />
</div>
<div class="imd" v-show="false">
<canvas ref="canvasRef"></canvas>
</div>
</div>
</div>
<h3>提取结果</h3>
<div class="textModel noScollLine" v-loading="linadingImg" element-loading-text="图片解析中......">
<p v-if="texts.length == 0">{{ alertText }}</p>
<template v-else>
<p v-for="(text, index) in texts" :key="index">{{ text }}</p>
</template>
</div>
</div>
<template #footer>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup>
import * as ocr from "@paddlejs-models/ocr";
import { drawBox } from "@/utils/ocrUtils";
import { nextTick, onMounted,reactive, ref,getCurrentInstance, watch } from "vue";
import { init } from "echarts";
const props = defineProps({
modelValue: {
type: Boolean,
default: false
}
});
const { proxy } = getCurrentInstance();
const emits = defineEmits(["update:modelValue", "change"]);
const active = ref('文件解析')
const files = ref({})
const loading = ref(true)
const linadingImg = ref(false)
const image = ref('')
const alertText = ref('请先上传文件...')
const texts = ref([])
const imageRef = ref()
const canvasRef = ref()
const textStyle = reactive({
width: "",
height: ""
})
const hasLoadingJS = ref(false)
watch(()=>props.modelValue,val=>{
if(val) initDemo();
},{immediate:true,deep:true})
const initDemo = () =>{
if(!hasLoadingJS.value) initPage();
nextTick(() => {
const fileInput = document.getElementById("file-input");
const fileInfo = document.getElementById("file-info");
const extractBtn = document.getElementById("extract-btn");
const resultDiv = document.getElementById("result");
let selectedFile = null;
// 监听文件选择
fileInput.addEventListener("change", function (e) {
if (e.target.files.length > 0) {
selectedFile = e.target.files[0];
fileInfo.textContent = `已选择: ${selectedFile.name} (${(
selectedFile.size / 1024
).toFixed(2)} KB)`;
extractBtn.disabled = false;
} else {
selectedFile = null;
fileInfo.textContent = "未选择文件";
extractBtn.disabled = true;
}
if (selectedFile.type == "video/mp4") {
upfileOnchange(selectedFile);
}
});
// 提取文本按钮点击事件
extractBtn.addEventListener("click", async function () {
if (!selectedFile) return (resultDiv.textContent = "请先选择文件");
resultDiv.textContent = "正在处理文件...";
try {
let text = "";
const fileType = selectedFile.name.split(".").pop().toLowerCase();
console.log(selectedFile);
console.log(fileType,'===fileType');
if (fileType === "txt") {
// 处理文本文件
text = await readTextFile(selectedFile);
} else if (fileType === "pdf") {
// 处理PDF文件
text = await extractTextFromPDF(selectedFile);
} else if (fileType === "docx") {
// 处理Word文件
text = await extractTextFromDocx(selectedFile);
console.log(text, "===word");
} else if (["mp4", "mp3", "wav"].includes(fileType)) {
// 处理mp4,mp3,wav文件
await start();
text = "数据加载有点慢,请稍等。。。。";
setTimeout(() => {
resultDiv.textContent = videoText;
}, 2000);
}else {
throw new Error("不支持的文件类型");
}
resultDiv.textContent = text || "未提取到文本内容";
} catch (error) {
resultDiv.textContent = `处理失败: ${error.message}`;
console.error(error);
}
});
});
}
// 读取文本文件
function readTextFile(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => resolve(e.target.result);
reader.onerror = (e) => reject(new Error("文件读取失败"));
reader.readAsText(file);
});
}
// 提取PDF文本
async function extractTextFromPDF(file) {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.onload = async function () {
try {
const typedArray = new Uint8Array(this.result);
const pdf = await pdfjsLib.getDocument(typedArray).promise;
let fullText = "";
for (let i = 1; i <= pdf.numPages; i++) {
const page = await pdf.getPage(i);
const textContent = await page.getTextContent();
const text = textContent.items.map((item) => item.str).join(" ");
fullText += text + "\n\n";
}
resolve(fullText);
} catch (error) {
reject(error);
}
};
fileReader.onerror = reject;
fileReader.readAsArrayBuffer(file);
});
}
// 提取Word文档文本
async function extractTextFromDocx(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (event) {
const arrayBuffer = event.target.result;
mammoth
.extractRawText({ arrayBuffer: arrayBuffer })
.then(function (result) {
resolve(result.value);
})
.catch(function (error) {
reject(error);
});
};
reader.onerror = reject;
reader.readAsArrayBuffer(file);
});
}
/**
*@Descripttion:图片页面初始化
*@Author: PengShuai
*/
const initPage = async () => {
loading.value = true;
try {
await ocr.init();// 模型初始化
proxy.$message({ type: "success", message: "加载成功" });
loading.value = false;
hasLoadingJS.value = true;
} catch (err) {
proxy.$message({ type: "error", message: "加载失败,请刷新页面" });
loading.value = false;
hasLoadingJS.value = false;
}
}
/**
*@Descripttion:图片上传事件
*@Author: PengShuai
*@Date: 2023-12-21 10:49:36
*/
const onHandleChange = (file) => {
files.value = file;
image.value = URL.createObjectURL(file.raw);
linadingImg.value = true;
alertText.value = '图片文件解析中。。。'
setTimeout(() => {
getRecognize();
}, 600);
}
// 图片解析
const getRecognize = async () => {
const image = imageRef.value;
const canvas = canvasRef.value;
const res = await ocr.recognize(image);
const { text, points } = res;
drawBox(points, image, canvas);
textStyle.width = image.width - 40 + "px";
texts.value = text;
linadingImg.value = false;
alertText.value = '解析失败,请选择清晰一点的图片重试!'
}
// 切换标签
const changeRadio = (val) =>{
if(val == '图片解析') {
if(!hasLoadingJS.value) initPage()
}
const resultDiv = document.getElementById("result");
resultDiv.textContent = "请先上传文件...";
const fileInfo = document.getElementById("file-info");
fileInfo.textContent = "选择文件";
files.value = {}
alertText.value = '请先上传文件...';
texts.value = []
image.value = ''
}
const onComfirm = () => {
if(active == '文件解析'){
const resultDiv = document.getElementById("result");
let obj = {
text: resultDiv.textContent
};
emits("change", obj);
}else{
emits("change", {text:texts.value});
}
};
// 关闭
const handleClose = () => {
const resultDiv = document.getElementById("result");
resultDiv.textContent = "请先上传文件";
const fileInfo = document.getElementById("file-info");
fileInfo.textContent = "未选择文件";
fileInfo.textContent = "选择文件";
files.value = {}
alertText.value = '请先上传文件...';
texts.value = []
image.value = ''
active.value = '文件解析'
emits("update:modelValue", false);
};
const chooseFile = () => {
document.getElementById("file-input").click();
};
</script>
<style lang="scss" scoped>
.container {
border: 2px dashed #ccc;
padding: 20px;
text-align: center;
margin-bottom: 20px;
}
#file-input {
display: none;
}
button {
background: #0072ff;
color: white;
padding: 10px 15px;
border: none;
cursor: pointer;
font-size: 16px;
border-radius: 4px;
}
button:hover {
background: #0072ff;
}
#result {
margin-top: 20px;
white-space: pre-wrap;
background: #f9f9f9;
padding: 15px;
border: 1px solid #ddd;
border-radius: 4px;
height: 270px;
overflow-y: auto;
}
#file-info {
margin: 10px 0;
font-style: italic;
color: #666;
}
::v-deep .el-dialog {
margin-top: 10px;
}
.box{
display: flex;
.imd{
flex: 1;
}
}
.textModel{
margin-top: 20px;
white-space: pre-wrap;
background: #f9f9f9;
padding: 15px;
border: 1px solid #ddd;
border-radius: 4px;
height: 195px;
overflow-y: auto;
}
</style>

View File

@ -712,50 +712,8 @@ export function MapUtil(map) {
// 打开详情弹窗
MapUtil.prototype.openInfoDetail = (flag, data) => {
switch (flag) {
case "rx":
emitter.emit('showJzInfo', data);
break;
case 'gaj':
case 'pcs':
case 'jwz':
case 'xfq':
case 'zdfkd':
emitter.emit('showGazy', data);
break;
case 'kfd':
emitter.emit("changeGroupPoint", { lx: 'kfd', xffwlx: '2', xffwid: data.kfdId });
emitter.emit('showGazy', [data]);
break;
case 'sp':
emitter.emit('showGzy', data);
emitter.emit("showGzyInfo", data);
break;
case 'kk':
emitter.emit('showGzy', data);
break;
case 'aj':
case 'jqMap':
emitter.emit('showAj', data);
break;
case 'yj':
case 'yjMap':
emitter.emit("showYjxq", data);
break;
case 'dzjg':
case 'school':
case 'hospital':
case 'banck':
case 'shop':
emitter.emit("showShzy", data);
break;
case 'qchzc_map':
case 'jczMap_hm':
case 'jczMap_hhx':
emitter.emit("showJcz", [data]);
break;
case 'cyryMap':
console.log(data, '从业人员');
emitter.emit("showCyry", [data]);
case 'home_yj_map':
emitter.emit("showHomeYJ", data);
break;
}
}

View File

@ -1,8 +1,15 @@
<template>
<!--选择图标-->
<div class="form-item-box choose-icon-zj" :style="{ width: width }">
<el-autocomplete v-bind="$attrs" v-model="modelValue" :fetch-suggestions="querySearch"
popper-class="choose-icon-zj-autocomplete" :placeholder="placeholder" @change="onInput" @select="handleSelect">
<el-autocomplete
v-bind="$attrs"
v-model="modelValue"
:fetch-suggestions="querySearch"
popper-class="choose-icon-zj-autocomplete"
:placeholder="placeholder"
@change="onInput"
@select="handleSelect"
>
<template #prefix>
<SvgIcon :icon="modelValue"></SvgIcon>
</template>
@ -57,8 +64,7 @@ const handleSelect = (item) => {
emits("update:modelValue", item.value);
};
const handleIconClick = (ev) => {
};
const handleIconClick = (ev) => {};
const loadAll = () => {
const svgRequire = require.context("@/icons/svg", false, /\.svg$/);

View File

@ -1,6 +1,6 @@
<template>
<div class="form-item-box" :style="{ width: width }">
<el-date-picker style="width:100%" v-model="modelValue" type="date" v-bind="$attrs" @change="onInput" :placeholder="placeholder" value-format="YYYY-MM-DD"/>
<el-date-picker style="width:100%" v-model="modelValue" type="date" v-bind="$attrs" @change="onInput" :placeholder="placeholder" :value-format="props.format"/>
</div>
</template>
@ -13,6 +13,10 @@ const props = defineProps({
default: "请填写",
type: String
},
format:{
default: "YYYY-MM-DD",
type: String
},
modelValue: {
default: "",
type: String

View File

@ -74,7 +74,6 @@ const endProps = {
const tableData = ref([]);
const getSysMenuTree = async () => {
const res = await selectDeptPage(listQuery.value);
debugger
tableData.value = res;
depList.value = res
};

View File

@ -125,20 +125,11 @@ const nodeClick = (node) => {
}else{
emits("update:modelValue", node.orgCode);
}
emits("change", node);
};
const emits = defineEmits(["update:modelValue"]);
const handleChange = (e) => {
if (props.multiple === true) {
const data = e.map((item) => {
return item[item.length - 1];
});
emits("update:modelValue", data);
} else {
const data = e[0];
emits("update:modelValue", data);
}
};
const emits = defineEmits(["update:modelValue",'change']);
</script>
<style lang="scss" scoped>

View File

@ -1,287 +0,0 @@
<template>
<div>
<el-dialog
:title="titleValue"
width="1400px"
:model-value="modelValue"
@close="closed"
>
<el-form :model="listQuery" :inline="true">
<el-form-item label="所属部门">
<MOSTY.Department width="100%" clearable v-model="listQuery.ssbmdm" />
</el-form-item>
<el-form-item label="圈层名称">
<el-input
v-model="listQuery.qcmc"
placeholder="请输入圈层名称"
clearable
/>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" style="margin-top: 0px" v-if="modelValue">
<el-table
ref="multipleUserRef"
@selection-change="handleSelectionChange"
:data="tableData"
border
style="width: 100%"
:row-key="keyid"
height="450"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
v-if="props.multiple"
/>
<el-table-column width="55" #default="{ row }" v-else>
<el-radio v-model="ridioIndex" :label="row.id"></el-radio>
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
sortable
width="80"
/>
<el-table-column
sortable
prop="ssbm"
label="所属部门"
show-overflow-tooltip
align="center"
></el-table-column>
<el-table-column
sortable
prop="qcmc"
show-overflow-tooltip
label="圈层名称"
align="center"
>
</el-table-column>
<el-table-column
sortable
prop="qclx"
show-overflow-tooltip
label="圈层类型"
align="center"
>
<template #default="{ row }">
<dict-tag :options="D_BZ_QCLX" :value="row.qclx" :tag="false" />
</template>
</el-table-column>
<el-table-column
sortable
prop="qcjb"
show-overflow-tooltip
label="圈层等级"
align="center"
>
<template #default="{ row }">
<dict-tag :options="D_BZ_QCDJ" :value="row.qcjb" :tag="false" />
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[2, 5, 10, 20]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import * as rule from "@/utils/rules.js";
import * as MOSTY from "@/components/MyComponents/index";
import { ElMessage } from "element-plus";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import {
defineProps,
watch,
ref,
onMounted,
nextTick,
getCurrentInstance
} from "vue";
const { proxy } = getCurrentInstance();
const { D_BZ_QCLX, D_BZ_QCDJ } = proxy.$dict("D_BZ_QCLX", "D_BZ_QCDJ");
const props = defineProps({
//是否显示
modelValue: {
type: Boolean,
required: true
},
//标题
titleValue: {
type: String,
default: "选择圈层"
},
//是否多选
multiple: {
default: true,
type: Boolean
},
//已经选中得数据回显
data: {
type: Array,
default: []
}
});
const keyid = (row) => {
return row.id;
};
const total = ref(0);
const ridioIndex = ref(null);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20,
qcmc: "",
ssbmdm: ""
});
const form = ref({});
const tableData = ref([]);
const emits = defineEmits(["close", "choosedQc"]);
const closed = () => {
emits("close", false);
};
const reset = () => {
listQuery.value = {
pageCurrent: 1,
pageSize: 20,
qcmc: "",
ssbmdm: ""
};
getListData();
};
//确认选中
const onComfirm = () => {
if (props.multiple) {
//多选
const List = JSON.parse(JSON.stringify(multipleSelectionUser.value));
if (List.length === 0) {
proxy.$message.warning("请选择圈层");
return;
}
emits("choosedQc", List);
} else {
//单选
if (![ridioIndex.value][0]) {
proxy.$message.warning("请选择圈层");
return;
}
const info = tableData.value.find((item) => {
return item.id === ridioIndex.value;
});
emits("choosedQc", [info]);
}
closed();
};
onMounted(() => {
getListData();
});
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageSize = currentPage;
getListData();
};
//圈层数据
const getListData = async () => {
qcckGet(listQuery.value, "/mosty-jcgl/qc/selectQcList").then((res) => {
tableData.value = res?.records;
multipleUser(props.data, tableData.value);
total.value = Number(res.total);
});
};
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const multipleUserRef = ref(null); //表单
//多选选中的数据
const multipleSelectionUser = ref([]);
const handleSelectionChange = (val) => {
multipleSelectionUser.value = val;
};
//回显
function multipleUser(row, list) {
if (row) {
if (props.multiple) {
row.forEach((item) => {
list.forEach((select) => {
if (item.id == select.id) {
if (multipleUserRef.value) {
multipleUserRef.value.toggleRowSelection(select, true);
}
}
});
});
}
}
}
watch(
() => props.modelValue,
(val) => {
if (val === true) {
handleFilter();
}
}
);
watch(
() => props.data,
(val) => {
if (multipleUserRef.value) multipleUser(val, tableData.value);
}
);
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
::v-deep .el-form--inline {
padding-left: 0 !important;
}
::v-deep .el-radio__label {
display: none;
}
</style>
<style lang="scss">
.el-dialog {
// --el-dialog-bg-color: #fff !important;
}
// .el-dialog__title {
// color: #fff !important;
// }
</style>

View File

@ -1,8 +1,19 @@
<template>
<div class="Select-wrap" :style="{ width: width }">
<el-select :disabled="props.disabled" v-bind="$attrs" v-model="modelValue" @change="hanlderSelect" :popper-class="selectOption.length > 20 ? 'nation-select' : ''" :placeholder="placeholder">
<el-option v-for="item in dictEnum" :key="item.value" :label="item.zdmc || item.label" :value="item.dm || item.value">
<el-select
:disabled="props.disabled"
v-bind="$attrs"
v-model="modelValue"
@change="hanlderSelect"
:popper-class="selectOption.length > 20 ? 'nation-select' : ''"
:placeholder="placeholder"
>
<el-option
v-for="item in dictEnum"
:key="item.value"
:label="item.zdmc || item.label"
:value="item.dm || item.value"
>
</el-option>
</el-select>
</div>
@ -16,20 +27,24 @@ const props = defineProps({
default: "请选择",
type: String
},
disabled:{
disabled: {
default: false,
type: Boolean
},
modelValue: {
default: "",
type: String
type: [String, Array], // 允许 String 或 Array
default: "", // 默认值设为空字符串
validator: (value) => {
// 允许:空字符串、非空字符串、数组
return typeof value === "string" || Array.isArray(value);
}
},
dictEnum: {
default: Array,
type: String
default: [],
type: Array
},
width: {
default: '100%',
default: "100%",
type: String
}
});

View File

@ -1,6 +1,11 @@
<template>
<div class="form-item-box" :style="{ width: width }">
<el-select :disabled="disabled" v-model="sex" placeholder="请选择性别" @change="onChange">
<el-select
:disabled="disabled"
v-model="sex"
placeholder="请选择性别"
@change="onChange"
>
<el-option
v-for="item in D_BZ_XB"
:key="item"
@ -29,9 +34,9 @@ const props = defineProps({
type: String,
default: ""
},
disabled:{
type:Boolean,
default:false
disabled: {
type: Boolean,
default: false
},
width: {
default: COMPONENT_WIDTH,

View File

@ -1,5 +1,9 @@
<template>
<div class="form-item-box" :style="{ width: width }">
<div
class="form-item-box"
:class="props.showBtn ? 'showBtn-upload' : ''"
:style="{ width: width }"
>
<el-upload
v-bind="$attrs"
:headers="headers"
@ -7,7 +11,7 @@
class="avatar-uploader"
:limit="props.limit"
:action="actionUrl"
list-type="picture-card"
:list-type="props.showBtn ? '' : 'picture-card'"
:file-list="fileList"
show-file-list
:on-exceed="handleExceed"
@ -15,16 +19,20 @@
:before-upload="beforeImgUpload"
>
<template #default>
<el-icon> <Plus /> </el-icon>
<el-button v-if="props.showBtn" size="small" type="primary"
>上传文件</el-button
>
<el-icon v-else> <Plus /> </el-icon>
</template>
<template #file="{ file }">
<template #file="{ file }" v-if="!props.showBtn">
<div v-if="props.isImg">
<img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
<el-icon>
<zoom-in />
</el-icon>
<span
class="el-upload-list__item-preview"
@click="handlePictureCardPreview(file)"
>
<el-icon> <zoom-in /></el-icon>
</span>
<span
v-if="!disabled"
@ -75,17 +83,8 @@
<script setup>
import { COMPONENT_WIDTH } from "@/constant";
import {
ref,
defineProps,
defineEmits,
defineExpose,
computed,
watch,
onMounted
} from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import type from "element-plus/es/components/upload/src/upload.type";
import { ref, defineProps, defineEmits, computed, watch, onMounted } from "vue";
import { ElMessage } from "element-plus";
import { useStore } from "vuex";
const props = defineProps({
//获取组件传值
@ -104,6 +103,10 @@ const props = defineProps({
width: {
default: COMPONENT_WIDTH,
type: String
},
showBtn: {
type: Boolean,
default: false
}
});
@ -146,17 +149,7 @@ const getSuffix = (fileName) => {
if (suffix === "pdf") return "PDF";
//视频 音频
var videolist = [
"mp4",
"m2v",
"mkv",
"rmvb",
"wmv",
"avi",
"flv",
"mov",
"m4v"
];
var videolist = [ "mp4", "m2v", "mkv", "rmvb", "wmv", "avi", "flv", "mov", "m4v" ];
if (videolist.includes(suffix)) return "VIDEO";
var musiclist = ["mp3", "wav", "wmv"];
@ -172,8 +165,6 @@ const getSuffix = (fileName) => {
//否则返回other
return "OTHER";
};
const imageUrl = ref("");
const store = useStore();
const dialogImageUrl = ref("");
const dialogVisible = ref(false);
@ -182,24 +173,37 @@ const headers = ref({
Authorization: store.getters.token
});
onMounted(() => {
if (props.modelValue) {
fileList.value = props.modelValue.map((el) => {
return {
url: `/mosty-api/mosty-base/minio/image/download/` + el
};
});
}
});
const fileList = ref([]);
;
watch(
() => props.modelValue,
(val) => {
let arr = val ? val : [];
if (arr && arr.length > 0) {
if (!props.sfUrl) {
fileList.value = arr.map((el) => {
return { url: `/mosty-api/mosty-base/minio/image/download/` + el };
});
} else {
fileList.value = arr.map((el) => {
return { url: el };
});
}
}
},
{ immediate: true }
);
const handlerSuccess = (res, file) => {
file.url = `/mosty-api/mosty-base/minio/image/download/` + res.data;
fileList.value.push(file);
props.modelValue.push(res.data);
let arr = props.modelValue ? props.modelValue : [];
arr.push(res.data);
emits("update:modelValue", arr);
emits("handleChange", props.modelValue);
// emits("update:modelValue", props.modelValue);
};
const handlePreview = (file) => {};
const handleExceed = (files, fileList) => {
ElMessage.warning(`限制,只能上传${props.limit}个文件或图片`);
};
@ -222,9 +226,6 @@ const beforeImgUpload = (file) => {
return true;
}
};
const handleAvatarSuccess = (res, file) => {
imageUrl.value = URL.createObjectURL(file.raw);
};
//查询图片
const handlePictureCardPreview = (file) => {
dialogImageUrl.value = file.url;
@ -240,8 +241,10 @@ const handleRemove = (file) => {
fileList.value.splice(index, 1);
props.modelValue.splice(index, 1);
emits("handleChange", props.modelValue);
// emits("update:modelValue", props.modelValue);
emits("update:modelValue", props.modelValue);
};
const propsModelValue = ref();
</script>
<style lang="scss" scoped>
@ -296,4 +299,4 @@ const handleRemove = (file) => {
-webkit-line-clamp: 2;
}
}
</style>
</style>

View File

@ -16,7 +16,6 @@ import StationSelect from "./StationSelect/index.vue";
import Provinces from "./Provinces2/index.vue";
import MarkdownEdit from "./MarkdownEdit/index.vue";
import FileUpload from "./FileUpload/index.vue";
import RichOnly from "./RichOnly/index.vue";
import Date from "./Date/index.vue";
import Empty from "./Empty/index.vue";
export {
@ -38,7 +37,6 @@ export {
Provinces,
MarkdownEdit,
FileUpload,
RichOnly,
Date,
Empty
};

View File

@ -313,7 +313,7 @@ const createScroll = () => {
}
};
// 触底加载
// 滚动-触底加载
const loadTable = () => {
emit("changePage",props.tabelModel);
};

View File

@ -1,48 +1,178 @@
<template>
<el-form ref="elform" :model="listQuery" :label-width="props.labelWidth" :rules="props.rules" :inline="true" label-position="right">
<el-form-item v-for="item in props.formList" :style="{ width: item.width }" :prop="item.prop" :label="item.label" :label-width="item.labelWidth" :key="item">
<el-form
ref="elform"
:model="listQuery"
:label-width="props.labelWidth"
:rules="props.rules"
:inline="props.inline"
label-position="right"
:disabled="props.disabled"
>
<el-form-item
v-for="(item,idx) in props.formList"
:style="item.width && { width: item.width }"
:prop="item.prop"
:label="item.label"
:label-width="item.labelWidth"
:key="idx"
>
<!-- input表单 input-->
<MOSTY.Other v-if="item.type == 'input'" width="100%" clearable v-model="listQuery[item.prop]" :placeholder="`请输入${item.label}`"/>
<el-input v-model="listQuery[item.prop]" v-else-if="item.type == 'textarea'" type="textarea" :rows="3" :placeholder="`请输入${item.label}`" />
<MOSTY.Other
v-if="item.type == 'input'"
width="100%"
clearable
v-model="listQuery[item.prop]"
:placeholder="`请输入${item.label}`"
:disabled="item.disabled"
/>
<el-input
v-model="listQuery[item.prop]"
v-else-if="item.type == 'textarea'"
type="textarea"
:rows="3"
:placeholder="`请输入${item.label}`"
:disabled="item.disabled"
/>
<!-- 数值 inputNumber-->
<el-input type="number" v-model="listQuery[item.prop]" v-else-if="item.type == 'inputNumber'" :placeholder="`请输入${item.label}`" />
<el-input
type="number"
v-model="listQuery[item.prop]"
v-else-if="item.type == 'inputNumber'"
:placeholder="`请输入${item.label}`"
:disabled="item.disabled"
/>
<!-- 数值 number-->
<el-input-number v-model="listQuery[item.prop]" v-else-if="item.type == 'number'" style="width:100%" :min="item.min || 0" :max="item.max || 1000" />
<el-input-number
v-model="listQuery[item.prop]"
v-else-if="item.type == 'number'"
style="width: 100%"
:min="item.min || 0"
:max="item.max || 1000"
:disabled="item.disabled"
/>
<!--选择 select-->
<MOSTY.Select v-else-if="item.type == 'select'" filterable :multiple="item.multiple" v-model="listQuery[item.prop]" :dictEnum="item.options" width="100%" clearable :placeholder="`请选择${item.label}`"/>
<!-- 部门department -->
<MOSTY.Select
v-else-if="item.type == 'select'"
filterable
:multiple="item.multiple"
v-model="listQuery[item.prop]"
:dictEnum="item.options"
width="100%"
clearable
:placeholder="`请选择${item.label}`"
:disabled="item.disabled"
/>
<!-- 部门department -->
<template v-else-if="item.type === 'department'">
<MOSTY.Department clearable v-model="listQuery[item.prop]" />
<MOSTY.Department
style="width: 100%;"
clearable
@getDepValue="getdep($event,item.depMc)"
v-model="listQuery[item.prop]"
:placeholder="listQuery[item.depMc] ? listQuery[item.depMc]:'请选择'"
/>
</template>
<!-- 上传 upload -->
<MOSTY.Upload v-else-if="item.type == 'upload'" width="100%" v-model="listQuery[item.prop]"/>
<MOSTY.Upload
v-else-if="item.type == 'upload'"
width="100%"
v-model="listQuery[item.prop]"
:isImg="item.isImg"
:disabled="item.disabled"
/>
<!--选择checkbox -->
<MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]" :checkList="item.options" :placeholder="`请选择${item.label}`"/>
<MOSTY.CheckBox
v-else-if="item.type == 'checkbox'"
width="100%"
clearable
v-model="listQuery[item.prop]"
:checkList="item.options"
:placeholder="`请选择${item.label}`"
:disabled="item.disabled"
/>
<!-- 单选radio -->
<el-radio-group v-model="listQuery[item.prop]" v-else-if="item.type == 'radio'">
<el-radio v-for="obj in item.options" :key="obj.value" :label="obj.value" >{{ obj.label }}</el-radio>
<el-radio-group
v-model="listQuery[item.prop]"
v-else-if="item.type == 'radio'"
:disabled="item.disabled"
>
<el-radio
v-for="obj in item.options"
:key="obj.value"
:label="obj.value"
>{{ obj.label }}</el-radio
>
</el-radio-group>
<!-- 时间选择 -->
<el-time-picker v-else-if="item.type == 'time'" v-model="listQuery[item.prop]" placeholder="选择时间" style="width:100%;" />
<el-date-picker v-else-if="item.type == 'date'" v-model="listQuery[item.prop]" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width:100%;" />
<el-date-picker v-else-if="item.type == 'datetime'" v-model="listQuery[item.prop]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择时间" style="width:100%;" />
<el-date-picker v-else-if="item.type == 'datetimerange'" v-model="listQuery[item.prop]" type="datetimerange" :shortcuts="shortcuts" range-separator="To" value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="选择开始时间" end-placeholder="选择结束时间" style="width:100%;" />
<el-date-picker v-else-if="item.type == 'daterange'" v-model="listQuery[item.prop]" type="daterange" range-separator="To" value-format="YYYY-MM-DD" start-placeholder="选择开始日期" end-placeholder="选择开始日期" style="width:100%;" />
<el-switch v-else-if="item.type == 'switch'" v-model="listQuery[item.prop]" class="ml-2" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"/>
<el-time-picker
v-else-if="item.type == 'time'"
v-model="listQuery[item.prop]"
placeholder="选择时间"
style="width: 100%"
:disabled="item.disabled"
/>
<el-date-picker
v-else-if="item.type == 'date'"
v-model="listQuery[item.prop]"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择日期"
style="width: 100%"
:disabled="item.disabled"
/>
<el-date-picker
v-else-if="item.type == 'datetime'"
v-model="listQuery[item.prop]"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择时间"
style="width: 100%"
:disabled="item.disabled"
/>
<el-date-picker
v-else-if="item.type == 'datetimerange'"
v-model="listQuery[item.prop]"
type="datetimerange"
:shortcuts="shortcuts"
range-separator="To"
value-format="YYYY-MM-DD HH:mm:ss"
start-placeholder="选择开始时间"
end-placeholder="选择结束时间"
style="width: 100%"
:disabled="item.disabled"
/>
<el-date-picker
v-else-if="item.type == 'daterange'"
v-model="listQuery[item.prop]"
type="daterange"
range-separator="To"
value-format="YYYY-MM-DD"
start-placeholder="选择开始日期"
end-placeholder="选择开始日期"
style="width: 100%"
:disabled="item.disabled"
/>
<el-switch
v-else-if="item.type == 'switch'"
v-model="listQuery[item.prop]"
class="ml-2"
:disabled="item.disabled"
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
/>
<template v-else-if="item.type === 'slot'">
<slot :name="item.prop"></slot>
</template>
</el-form-item>
</el-form>
</template>
<script setup>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import { ref, defineProps, defineEmits, defineExpose, watch } from "vue";
import { ref, defineProps, defineEmits, defineExpose, watch, watchEffect } from "vue";
const props = defineProps({
//循环的值
formList: {
@ -61,6 +191,10 @@ const props = defineProps({
type: Object,
default: {}
},
inline:{
type:Boolean,
default:true
}
});
const elform = ref();
const listQuery = ref({});
@ -73,16 +207,25 @@ const submit = (resfun) => {
});
};
const getdep = (e,val) =>{
if(val)listQuery.value[val] = e ? e.orgName : '';
}
const reset = () =>{
elform.value.resetFields()
}
watch(() => listQuery.value,(newVal) => {
emits('update:modelValue', newVal)
},{ immediate: true, deep: true }
);
if(newVal) emits("update:modelValue", newVal);
},{ immediate: true, deep: true });
watch(() => props.modelValue,(newVal) => {
listQuery.value = newVal; //赋值
},{ immediate: true, deep: true }
);
// 只有在新值确实变化时才更新(避免空值覆盖)
if (newVal && Object.keys(newVal).length > 0) {
listQuery.value = { ...newVal };
}
},{ immediate: true, deep: true });
defineExpose({ submit });
defineExpose({ submit,reset });
</script>

View File

@ -45,7 +45,7 @@
width="60"
:align="getConfiger?.align"
/>
<el-table-column
v-for="(item, index) in tableColumn"
:align="getConfiger?.align"
@ -208,7 +208,7 @@ function setDefaultChoose() {
});
}
</script>
<style lang = "scss">
</style>
</style>

View File

@ -9,12 +9,7 @@
<template>
<div class="fenye" :style="{ top: tableHeight+10 + 'px' }">
<el-pagination
:current-page="
pageData.configer.currentPage ||
pageData.configer.pageNo ||
pageData.configer.current ||
pageData.configer.pageCurrent ||
pageData.configer.pageNum"
:current-page=" pageData.configer.currentPage || pageData.configer.pageNo || pageData.configer.current || pageData.configer.pageCurrent || pageData.configer.pageNum"
:page-size="pageData.configer.pageSize || pageData.configer.size"
:page-sizes="pageSizeArr"
:small="small"

View File

@ -42,6 +42,17 @@
:disabledDate="disabledDate"
value-format="YYYY-MM-DD"
/>
<el-date-picker
v-else-if="item.showType === 'datetimerange'"
v-model="searchObj[item.prop]"
type="datetimerange"
unlink-panels
:range-separator="item.rangeSeparator || ''"
:start-placeholder="item.startPlaceholder || '开始日期'"
:end-placeholder="item.endPlaceholder || '结束日期'"
:shortcuts="item.shortcuts"
value-format="YYYY-MM-DD HH:mm:ss"
/>
<el-date-picker
v-else-if="item.showType === 'date'"
v-model="searchObj[item.prop]"
@ -583,4 +594,8 @@ watchEffect(() => {
}
}
}
::v-deep .el-date-editor .el-range-separator{
color: #333;
}
</style>

View File

@ -0,0 +1,408 @@
<template>
<el-dialog
:title="titleValue"
width="1500px"
:model-value="modelValue"
append-to-body
@close="closed"
>
<div class="table_class">
<div style="width: 48%">
<el-tabs v-model="activeTab" type="card" @tab-click="handleTabClick">
<el-tab-pane
v-for="tab in tabs"
:key="tab.dm"
:label="tab.label"
:name="tab.dm"
>
<!-- 添加 v-if 条件 -->
<template v-if="activeTab !== '03'">
<el-button
v-for="(it, idx) in props.dic.D_GS_BQ_LB"
:key="idx"
:type="type == it.zdmc ? 'success' : ''"
@click="chooseListType(it.zdmc)"
>
<span style="vertical-align: middle">{{ it.zdmc }}</span>
</el-button>
</template>
<el-table
v-loading="loading"
ref="multipleUserRef"
@selection-change="handleSelectionChange"
:data="tableData"
border
:row-key="keyid"
style="width: 100%"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column prop="bqMc" align="center" label="标签名称" />
<el-table-column prop="bqDm" align="center" label="标签代码" />
<el-table-column prop="bqZl" align="center" label="标签种类">
<template #default="{ row }">
<DictTag
:value="row.bqZl"
:tag="false"
:options="props.dic.D_GS_BQ_ZL"
/>
</template>
</el-table-column>
<el-table-column prop="bqLx" align="center" label="标签类型">
<template #default="{ row }">
<DictTag
:value="row.bqLx"
:tag="false"
:options="props.dic.D_GS_BQ_LX"
/>
</template>
</el-table-column>
<el-table-column prop="bqLb" align="center" label="标签类别">
<template #default="{ row }">
<DictTag
:value="row.bqLb"
:tag="false"
:options="props.dic.D_GS_BQ_LB"
/>
</template>
</el-table-column>
</el-table>
<div class="fenye">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div style="width: 48%">
<div class="selected-tabBox">
<el-table
:data="selectedData"
border
:row-key="keyid"
style="width: 100%"
>
<el-table-column prop="bqDm" align="center" label="标签代码" />
<el-table-column prop="bqLb" align="center" label="标签类别">
<template #default="{ row }">
<DictTag
:value="row.bqLb"
:tag="false"
:options="props.dic.D_GS_BQ_LB"
/>
</template>
</el-table-column>
<el-table-column prop="bqLx" align="center" label="标签类型">
<template #default="{ row }">
<DictTag
:value="row.bqLx"
:tag="false"
:options="props.dic.D_GS_BQ_LX"
/>
</template>
</el-table-column>
<el-table-column prop="bqMc" align="center" label="标签名称" />
<el-table-column prop="bqZl" align="center" label="标签种类">
<template #default="{ row }">
<DictTag
:value="row.bqZl"
:tag="false"
:options="props.dic.D_GS_BQ_ZL"
/>
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="{ row }">
<el-button
type="danger"
@click="handleRemoveFromSelectedData(row)"
>移除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye">
<el-pagination
class="pagination"
@size-change="handleSizeChangeRight"
@current-change="handleCurrentChangeRight"
:current-page="listQuery.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.sizeRight"
layout="total, sizes, prev, pager, next, jumper"
:total="selectedData.length"
></el-pagination>
</div>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { defineProps, ref, onMounted, nextTick } from "vue";
import { qcckGet } from "@/api/qcckApi.js";
const props = defineProps({
modelValue: {
type: Boolean,
required: true
},
dic: {
type: Object,
default: () => {}
},
bqDl: {
type: String,
default: "01"
},
bqLx: {
type: String,
default: "01"
},
titleValue: {
type: String,
default: "选择大类"
},
LeaderType: {
type: String,
default: ""
},
// 是否单选
Single: {
type: Boolean,
default: false
},
roleIds: {
type: Array,
default: []
}
});
const tabs = ref([]);
const activeTab = ref("");
const total = ref(0);
const listQuery = ref({
current: 1,
size: 20,
bqZl: activeTab.value
});
const loading = ref(false);
const tableData = ref([]);
const selectedData = ref([]);
const multipleUserRef = ref(null);
const emits = defineEmits(["update:modelValue", "chooseDate"]);
const type = ref("标签大类");
onMounted(() => {
console.log(props.dic.D_GS_BQ_ZL, "props.dic.D_GS_BQ_ZL");
tabs.value = props.dic.D_GS_BQ_ZL;
activeTab.value = tabs.value?.[0]?.dm || "01";
handleFilter();
});
// 选择列表的大类和细类
const chooseListType = (val) => {
type.value = val;
listQuery.current = 1;
getDataList();
};
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { current: 1, size: 20, bqZl: activeTab.value };
getDataList();
};
const keyid = (row) => {
return row.id;
};
// 为用户分配角色
const onComfirm = () => {
emits("chooseDate", selectedData.value);
let data = { type: props.LeaderType, userList: selectedData.value };
emits("chooseDateLeader", data);
closed();
};
//数据回显
const setValues = (list) => {
selectedData.value = list.map((item) => {
// 统一id字段处理逻辑
if (item.bqId) {
return { ...item, id: item.bqId };
}
return item;
});
nextTick(() => {
multipleUser();
});
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.size = currentSize;
getDataList();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.current = currentPage;
getDataList();
};
// 查询标签组合列表
const getDataList = () => {
listQuery.value.bqZl = activeTab.value;
loading.value = true;
//根据顶部标签切换不同的接口
let url =
activeTab.value == "01"
? "/mosty-gsxt/tbGsxtBqgl/selectPage"
: activeTab.value == "02"
? "/mosty-gsxt/tbGsxtBqgl/selectPage"
: "/mosty-gsxt/tbGsxtBqzh/selectPage";
let params = {};
console.log(activeTab.value, "activeTab.value");
if (activeTab.value === "01") {
params.bqLx = "01";
} else if (activeTab.value === "02") {
params.bqLx = "02";
} // activeTab.value 等于 "03" 时不传递参数
if (type.value === "标签大类") {
params.bqLb = "01";
} else if (type.value === "标签细类") {
params.bqLb = "02";
}
qcckGet(params, url).then((res) => {
// 添加 bqZl 字段
tableData.value = res?.records?.map((item) => ({
bqDm: item.bqDm,
bqId: item.id ? item.id : item.bqId ? item.bqId : row.bqDlId,
bqLb: item.bqLb,
bqLx: item.bqLx,
bqMc: item.bqMc,
bqZl: activeTab.value
}));
total.value = Number(res.total);
loading.value = false;
//确保在这里调用 multipleUser
multipleUser();
});
};
// 修改 multipleUser 函数
function multipleUser() {
nextTick(() => {
if (multipleUserRef.value && tableData.value.length > 0) {
tableData.value.forEach((item) => {
if (selectedData.value.some((selected) => selected.bqId == item.bqId)) {
// 因为 multipleUserRef 是数组,需要确定正确的索引
// 如果你只有一个表格,可以使用 [0]
multipleUserRef.value[0]?.toggleRowSelection(item, true);
}
});
}
});
}
const handleFilter = () => {
listQuery.value.current = 1;
getDataList();
};
const handleTabClick = () => {
reset();
};
const handleAddToSelectedData = (row) => {
console.log(row, selectedData.value, "handleAddToSelectedData row");
if (selectedData.value.some((item) => item.bqId === row.bqId)) {
return;
}
if (props.Single && selectedData.value.length > 0) {
selectedData.value = [];
}
selectedData.value.push({
bqDm: row.bqDm,
bqId: row.id ? row.id : row.bqId ? row.bqId : row.bqDlId,
bqLb: row.bqLb,
bqLx: row.bqLx,
bqMc: row.bqMc,
bqZl: activeTab.value
});
};
const handleRemoveFromSelectedData = (row) => {
const index = selectedData.value.findIndex((item) => item.bqId === row.bqId);
if (index !== -1) {
selectedData.value.splice(index, 1);
}
// 取消左侧表格中对应行的选中状态
multipleUserRef.value.toggleRowSelection(row, false);
};
const multipleSelectionUser = ref([]);
const handleSelectionChange = (val) => {
multipleSelectionUser.value = val;
multipleSelectionUser.value.forEach((row) => {
handleAddToSelectedData(row);
});
};
// 必须暴露方法父组件才能调用
defineExpose({
setValues
});
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
.selected-tabBox {
margin-top: 56px;
}
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
:deep(.el-dialog) {
background: #fff !important;
border-radius: 8px !important;
/* 其他样式 */
}
.table_class {
display: flex;
justify-content: space-between;
}
</style>

View File

@ -1,35 +1,17 @@
<template>
<div class="exportBox">
<el-dialog
v-model="show"
title="导入文件"
width="400px"
:show-close="true"
:center="true"
:before-close="handleClose"
>
<el-dialog v-model="show" title="导入文件" width="400px" :show-close="true" :center="true" :before-close="handleClose">
<div class="uplodBox">
<el-upload
action="#"
drag
:on-success="handleSuccess"
:on-change="handleChange"
:show-file-list="true"
:file-list="fileDate"
accept=".xls,.xlsx"
:auto-upload="false"
>
<el-upload action="#" drag :on-success="handleSuccess" :on-change="handleChange" :show-file-list="true" :file-list="fileDate" accept=".xls,.xlsx" :auto-upload="false">
<el-icon class="el-icon-upload" size="100"><upload-filled /></el-icon>
<div class="el-upload-text">
拖动或者点击上传或者<span @click.stop="downloadModel" class="model">下载模板</span>
</div>
<div>仅支持扩展名.xls , xlsx</div>
<div>仅支持扩展名.xls , xlsx</div>
</el-upload>
</div>
<div class="check">
<el-checkbox true-label="true" false-label="false" v-model="isSelect"
>是否替换已存在的数据</el-checkbox
>
<el-checkbox true-label="true" false-label="false" v-model="isSelect">是否替换已存在的数据</el-checkbox>
</div>
<div class="foot">
<el-button @click="handleClose">取消</el-button>
@ -42,7 +24,6 @@
<script setup>
import axios from "axios";
import { ElMessage } from "element-plus";
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
import { useStore } from "vuex";
import { ref, defineProps, defineEmits, watch } from "vue";
const store = useStore();
@ -60,28 +41,30 @@ const filesList = ref({});
const baseUrl = ref('')//上传地址
const modelUrl = ref('')//下载模板地址
watch(()=>props.lx,(val)=>{
let url = ''
let moyRL = ''
switch (val) {
case 'policeF':
baseUrl.value = '/mosty-api/mosty-jcgl/tbJcglXfll/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tbJcglXfll/importTemplate'
break;
case 'car':
baseUrl.value = '/mosty-api/mosty-jcgl/tpJcglXfcl/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tpJcglXfcl/importTemplate'
break;
case 'jyqx':
baseUrl.value = '/mosty-api/mosty-jcgl/tpJcglJyqx/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tpJcglJyqx/importTemplate'
break;
case 'znzb':
baseUrl.value = '/mosty-api/mosty-jcgl/tpjcglZnzb/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tpjcglZnzb/importTemplate'
break;
default:
break;
}
switch (val) {
case 'policeF':
baseUrl.value = '/mosty-api/mosty-jcgl/tbJcglXfll/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tbJcglXfll/importTemplate'
break;
case 'car':
baseUrl.value = '/mosty-api/mosty-jcgl/tpJcglXfcl/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tpJcglXfcl/importTemplate'
break;
case 'jyqx':
baseUrl.value = '/mosty-api/mosty-jcgl/tpJcglJyqx/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tpJcglJyqx/importTemplate'
break;
case 'znzb':
baseUrl.value = '/mosty-api/mosty-jcgl/tpjcglZnzb/importData'
modelUrl.value = '/mosty-api/mosty-jcgl/tpjcglZnzb/importTemplate'
break;
case 'fjnr':
baseUrl.value = '/mosty-api/mosty-gsxt/tbGsxtRqfjNr/importFxnr'
// modelUrl.value = '/mosty-api/mosty-jcgl/tpjcglZnzb/importTemplate'
break;
default:
break;
}
},{
immediate:true
@ -126,8 +109,8 @@ function onComfirm() {
let formData = new FormData();
formData.append("file", file);
formData.append("updateSupport", isSelect.value);
axios.post(baseUrl.value, formData, {"Content-type": "multipart/form-data"})
.then((res) => {
let token = localStorage.getItem('token')
axios.post(baseUrl.value, formData, {"Content-type": "multipart/form-data",headers:{"Authorization": `${token}`}}).then((res) => {
if (res.status == 200) {
let { data, message, code } = res.data;
if (code == -1) ElMessage({ type:'warning', message:message, dangerouslyUseHTMLString:true });
@ -174,6 +157,6 @@ function onComfirm() {
</style>
<style>
.el-upload-list__item-name {
color: #fff;
color: #0072ff;
}
</style>

View File

@ -29,7 +29,8 @@ export const privateRoutes = [
{
path: "/user/department-ist",
name: "departmentList",
component: () => import("@/views/backOfficeSystem/systemConfig/department-list/index"),
component: () =>
import("@/views/backOfficeSystem/systemConfig/department-list/index"),
meta: {
title: "部门管理",
icon: "article-ranking"
@ -39,7 +40,8 @@ export const privateRoutes = [
{
path: "/user/userList",
name: "userList",
component: () => import("@/views/backOfficeSystem/systemConfig/user-list/index"),
component: () =>
import("@/views/backOfficeSystem/systemConfig/user-list/index"),
meta: {
title: "用户管理",
icon: "article-ranking"
@ -48,7 +50,8 @@ export const privateRoutes = [
{
path: "/user/role",
name: "userRoleIndex",
component: () => import("@/views/backOfficeSystem/systemConfig/role-list/index"),
component: () =>
import("@/views/backOfficeSystem/systemConfig/role-list/index"),
meta: {
title: "角色列表",
icon: "article-ranking"
@ -57,7 +60,8 @@ export const privateRoutes = [
{
path: "/user/menuList",
name: "menuList",
component: () => import("@/views/backOfficeSystem/systemConfig/menu-list/index"),
component: () =>
import("@/views/backOfficeSystem/systemConfig/menu-list/index"),
meta: {
title: "菜单管理",
icon: "article-ranking"
@ -67,7 +71,8 @@ export const privateRoutes = [
{
path: "/dict/detail",
name: "dictDetail",
component: () => import("@/views/backOfficeSystem/systemConfig/dict/detail"),
component: () =>
import("@/views/backOfficeSystem/systemConfig/dict/detail"),
meta: {
title: "字典数据"
}
@ -75,7 +80,8 @@ export const privateRoutes = [
{
path: "/dict/index",
name: "dictIndex",
component: () => import("@/views/backOfficeSystem/systemConfig/dict/index"),
component: () =>
import("@/views/backOfficeSystem/systemConfig/dict/index"),
meta: {
title: "字典列表",
icon: "article-ranking"
@ -85,7 +91,10 @@ export const privateRoutes = [
{
path: "/user/deptAllocationUser/:id",
name: "deptAllocationUser",
component: () => import("@/views/backOfficeSystem/systemConfig/department-list/deptAllocationUser"),
component: () =>
import(
"@/views/backOfficeSystem/systemConfig/department-list/deptAllocationUser"
),
meta: {
title: "管理用户"
}
@ -93,7 +102,10 @@ export const privateRoutes = [
{
path: "/user/allocationUser/:id",
name: "allocationUser",
component: () => import("@/views/backOfficeSystem/systemConfig/role-list/allocationUser"),
component: () =>
import(
"@/views/backOfficeSystem/systemConfig/role-list/allocationUser"
),
meta: {
title: "分配用户"
}
@ -102,7 +114,10 @@ export const privateRoutes = [
{
path: "/user/systemConfig",
name: "systemConfig",
component: () => import("@/views/backOfficeSystem/systemConfig/system-config-list/index"),
component: () =>
import(
"@/views/backOfficeSystem/systemConfig/system-config-list/index"
),
meta: {
title: "系统配置",
icon: "article-ranking"
@ -144,7 +159,10 @@ export const publicRoutes = [
{
path: "/IdentityManage",
name: "IdentityManage",
component: () => import("@/views/backOfficeSystem/fourColorManage/IdentityManage/index"),
component: () =>
import(
"@/views/backOfficeSystem/fourColorManage/IdentityManage/index"
),
meta: {
title: "身份标签管理",
icon: "article"
@ -153,7 +171,10 @@ export const publicRoutes = [
{
path: "/BehaviorLabels",
name: "BehaviorLabels",
component: () => import("@/views/backOfficeSystem/fourColorManage/BehaviorLabels/index"),
component: () =>
import(
"@/views/backOfficeSystem/fourColorManage/BehaviorLabels/index"
),
meta: {
title: "行为标签管理",
icon: "article"
@ -162,7 +183,10 @@ export const publicRoutes = [
{
path: "/tagManage",
name: "tagManage",
component: () => import("@/views/backOfficeSystem/fourColorManage/tagManage/index"),
component: () =>
import(
"@/views/backOfficeSystem/fourColorManage/tagManage/index"
),
meta: {
title: "标签组合管理",
icon: "article"
@ -180,7 +204,16 @@ export const publicRoutes = [
name: "warningControl",
component: () => import("@/views/backOfficeSystem/IntelligentControl/warningControl/index"),
meta: {
title: "预警布控",
title: "预警中心",
icon: "article"
}
},
{
path: "/DeploymentArea",
name: "DeploymentArea",
component: () => import("@/views/backOfficeSystem/IntelligentControl/DeploymentArea/index"),
meta: {
title: "布控区域",
icon: "article"
}
},
@ -193,12 +226,21 @@ export const publicRoutes = [
icon: "article"
}
},
{
path: "/DeploymentAudit",
name: "DeploymentAudit",
component: () => import("@/views/backOfficeSystem/IntelligentControl/DeploymentAudit/index"),
meta: {
title: "我的审核",
icon: "article"
}
},
{
path: "/ControlApproval",
name: "ControlApproval",
component: () => import("@/views/backOfficeSystem/IntelligentControl/ControlApproval/index"),
meta: {
title: "布控审批",
title: "我的审批",
icon: "article"
}
}
@ -242,21 +284,10 @@ export const publicRoutes = [
meta: { title: "情报流转", icon: "article" },
redirect: "/InformationFlow",
children: [
{
path: "/InformationFlow",
name: "InformationFlow",
component: () =>
import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/InformationFlow/index"),
meta: {
title: "情报信息流转",
icon: "article"
}
},
{
path: "/InstructionInformation",
name: "InstructionInformation",
component: () =>
import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/InstructionInformation/index"),
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/InstructionInformation/index"),
meta: {
title: "指令信息",
icon: "article"
@ -265,8 +296,7 @@ export const publicRoutes = [
{
path: "/StatisticalAnalysis",
name: "StatisticalAnalysis",
component: () =>
import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/StatisticalAnalysis/index"),
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/StatisticalAnalysis/index"),
meta: {
title: "情报统计分析",
icon: "article"
@ -290,28 +320,38 @@ export const publicRoutes = [
name: "HumanIntelligence",
meta: { title: "人力情报采集管理系统", icon: "article" },
children: [
{
path: "/RlStatisticalAnalysis",
name: "RlStatisticalAnalysis",
component: () => import("@/views/backOfficeSystem/HumanIntelligence/RlStatisticalAnalysis/index"),
meta: {
title: "人力情报统计分析",
icon: "article"
}
},
{
path: "/CollectCrculate",
name: "CollectCrculate",
component: () => import("@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"),
component: () =>
import(
"@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"
),
meta: {
title: "人力情报信息采集流转",
icon: "article"
}
},
{
path: "/RlStatisticalAnalysis",
name: "RlStatisticalAnalysis",
component: () =>
import(
"@/views/backOfficeSystem/HumanIntelligence/RlStatisticalAnalysis/index"
),
meta: {
title: "人力情报统计分析",
icon: "article"
}
},
{
path: "/TaskScheduling",
name: "TaskScheduling",
component: () => import("@/views/backOfficeSystem/HumanIntelligence/TaskScheduling/index"),
component: () =>
import(
"@/views/backOfficeSystem/HumanIntelligence/TaskScheduling/index"
),
meta: {
title: "人力情报信息搜索任务调度",
icon: "article"
@ -320,12 +360,24 @@ export const publicRoutes = [
{
path: "/ConstructionManagement",
name: "ConstructionManagement",
component: () => import("@/views/backOfficeSystem/HumanIntelligence/ConstructionManagement/index"),
component: () =>
import(
"@/views/backOfficeSystem/HumanIntelligence/ConstructionManagement/index"
),
meta: {
title: "社会信息人员建设管理",
icon: "article"
}
}
},
{
path: "/JobAppraisal",
name: "JobAppraisal",
component: () => import("@/views/backOfficeSystem/HumanIntelligence/JobAppraisal/index"),
meta: {
title: "社会员工工作信息考核",
icon: "article"
}
},
]
},
{
@ -333,28 +385,37 @@ export const publicRoutes = [
name: "ExcavationResearch",
meta: { title: "重点人发掘研判", icon: "article" },
children: [
{
path: "/ZdryFjyp",
name: "ZdryFjyp",
component: () => import("@/views/backOfficeSystem/ExcavationResearch/ZdryFjyp/index"),
meta: {
title: "重点人员发掘研判",
icon: "article"
}
},
{
path: "/PreliminaryExcavations",
name: "PreliminaryExcavations",
component: () => import("@/views/backOfficeSystem/ExcavationResearch/PreliminaryExcavations/index"),
component: () =>
import(
"@/views/backOfficeSystem/ExcavationResearch/PreliminaryExcavations/index"
),
meta: {
title: "重点人员初步发掘",
icon: "article"
}
},
{
path: "/ZdryFjyp",
name: "ZdryFjyp",
component: () =>
import(
"@/views/backOfficeSystem/ExcavationResearch/ZdryFjyp/index"
),
meta: {
title: "重点人员深度发掘",
icon: "article"
}
},
{
path: "/LandingAudit",
name: "LandingAudit",
component: () => import("@/views/backOfficeSystem/ExcavationResearch/LandingAudit/index"),
component: () =>
import(
"@/views/backOfficeSystem/ExcavationResearch/LandingAudit/index"
),
meta: {
title: "重点人员落地审核",
icon: "article"
@ -363,17 +424,21 @@ export const publicRoutes = [
{
path: "/WarningModel",
name: "WarningModel",
component: () => import("@/views/backOfficeSystem/ExcavationResearch/WarningModel/index"),
component: () =>
import(
"@/views/backOfficeSystem/ExcavationResearch/WarningModel/index"
),
meta: {
title: "重点人员预警模型",
icon: "article"
}
}
},
]
},
{
path: "/Research",
name: "Research",
path: "/JudgmentHome",
name: "JudgmentHome",
redirect: "/ResearchHome",
meta: {
title: "研判首页",
@ -383,21 +448,21 @@ export const publicRoutes = [
{
path: "/ResearchHome",
name: "ResearchHome",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/ResearchHome/index"),
component: () => import("@/views/backOfficeSystem/JudgmentHome/ResearchHome/index"),
meta: {
title: "研判首页",
icon: "article"
},
}
},
{
path: "/MeetingRoom",
name: "MeetingRoom",
component: () => import("@/views/backOfficeSystem/MeetingRoom/index"),
component: () => import("@/views/backOfficeSystem/JudgmentHome/MeetingRoom/index"),
meta: {
title: "网上会商室",
icon: "article"
}
},
}
]
},
{
@ -409,26 +474,67 @@ export const publicRoutes = [
icon: "article"
},
children: [
{
path: "/mpvGroup",
name: "mpvGroup",
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"),
meta: {
title: "重点群体管理",
icon: "article"
},
},
{
path: "/mpvPeo",
name: "mpvPeo",
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
meta: {
title: "重点人管理",
icon: "article"
},
}
},
{
path: "/mpvPeoSh",
name: "mpvPeoSh",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeoSh/index"),
meta: {
title: "重点人审批",
icon: "article"
}
},
{
path: "/mpvGroup",
name: "mpvGroup",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"),
meta: {
title: "重点群体管理",
icon: "article"
}
},
{
path: "/mpvGroupSh",
name: "mpvGroupSh",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroupSh/index"),
meta: {
title: "重点群体审核",
icon: "article"
}
},
]
},
{
path: "/BasicManagement",
name: "BasicManagement",
meta: {
title: "基础管理",
icon: "article"
},
children: [
{
path: "/surveillanceControl",
name: "surveillanceControl",
component: () =>
import(
"@/views/backOfficeSystem/BasicManagement/surveillanceControl/index"
),
meta: {
title: "布控监视",
icon: "article"
}
}
]
}
]
}
];
@ -441,7 +547,7 @@ const router = createRouter({
export function resetRouter() {
if (store.getters?.routeReady && store.getters?.userInfo?.permission?.menus) {
const menus = store.getters.userInfo.permission.menus;
menus.forEach(menu => {
menus.forEach((menu) => {
router.removeRoute(menu);
});
}

View File

@ -83,24 +83,16 @@ export default {
*登录请求动作
*/
login(ctx, userInfo) {
const {
userName,
password,
kaptcha
} = userInfo;
const { userName, password, kaptcha } = userInfo;
return new Promise((resolve, reject) => {
login({
userName,
password: Base64.encode(password),
kaptcha
})
.then((data) => {
if (data.deptList.length === 1) {
login({userName, password: Base64.encode(password), kaptcha }).then((data) => {
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem('isOatuh', 0)
setItem("USERNAME", data.userName);
setItem("roleList", data.sysRole ? data.sysRole : []);
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
@ -130,45 +122,38 @@ export default {
*单点登录
*/
oatuhLogin(ctx, userInfo) {
const {
token,
systemId,
} = userInfo;
const { token, systemId, } = userInfo;
return new Promise((resolve, reject) => {
unifiedLogin({
token,
systemId,
})
.then((data) => {
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem("USERNAME", data.userName);
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
this.commit("user/setMenuList", data.menuList);
setItem("menusPermission", data.menuCodeSet);
setItem('isOatuh', 1)
setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", {
token: data.jwtToken,
permission: {
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList,
deptList: data.deptList
});
}
// 保存登录时间
setTimeStamp();
resolve(data);
})
.catch((err) => {
reject(err);
});
unifiedLogin({ token, systemId, }).then((data) => {
if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName);
setItem("USERNAME", data.userName);
setItem("SFRH", data.sfrh);
setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo);
this.commit("user/setMenuList", data.menuList);
setItem("menusPermission", data.menuCodeSet);
setItem('isOatuh', 1)
setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", {
token: data.jwtToken,
permission: {
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList,
deptList: data.deptList
});
}
// 保存登录时间
setTimeStamp();
resolve(data);
})
.catch((err) => {
reject(err);
});
});
},

52
src/utils/ocrUtils.js Normal file
View File

@ -0,0 +1,52 @@
// utils文件夹下创建 ocrUtils.js
export function drawBox(points, imgElement, canvasOutput) {
canvasOutput.width = imgElement.width
canvasOutput.height = imgElement.height
const ratio = imgElement.naturalHeight / imgElement.height
const ctx = canvasOutput.getContext('2d')
ctx.drawImage(imgElement, 0, 0, canvasOutput.width, canvasOutput.height)
points.forEach((point) => {
// 开始一个新的绘制路径
ctx.beginPath()
// 设置线条颜色为红色
ctx.strokeStyle = 'red'
// 设置路径起点坐标
ctx.moveTo(point[0][0] / ratio, point[0][1] / ratio)
ctx.lineTo(point[1][0] / ratio, point[1][1] / ratio)
ctx.lineTo(point[2][0] / ratio, point[2][1] / ratio)
ctx.lineTo(point[3][0] / ratio, point[3][1] / ratio)
ctx.closePath()
ctx.stroke()
})
}
export function drawText(text, points, imgElement, canvasOutput) {
canvasOutput.width = imgElement.width
canvasOutput.height = imgElement.height
const ratio = imgElement.naturalHeight / imgElement.height
const ctx = canvasOutput.getContext('2d')
points.forEach((point, index) => {
// 开始一个新的绘制路径
ctx.beginPath()
// 设置线条颜色为红色
ctx.strokeStyle = 'red'
// 设置路径起点坐标
ctx.moveTo(point[0][0] / ratio, point[0][1] / ratio)
ctx.lineTo(point[1][0] / ratio, point[1][1] / ratio)
ctx.lineTo(point[2][0] / ratio, point[2][1] / ratio)
ctx.lineTo(point[3][0] / ratio, point[3][1] / ratio)
ctx.closePath()
ctx.stroke()
ctx.font = '30px 黑体'
ctx.fillText(
text[index],
point[3][0] / ratio,
point[3][1] / ratio,
point[1][0] / ratio - point[0][0] / ratio
)
})
}

View File

@ -2,7 +2,9 @@ import axios from 'axios';
import store from '@/store';
import { ElMessage } from 'element-plus';
import { isCheckTimeout } from '@/utils/auth';
import { saveAs } from 'file-saver'
import { tansParams, blobValidate } from "@/utils/ruoyi";
let downloadLoadingInstance;
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 100000
@ -64,13 +66,25 @@ service.interceptors.response.use(
) {
store.dispatch('user/logout');
}
// ElMessage({
// message: error.message,
// grouping: true,
// type: 'error'
// })
// return Promise.reject(error);
}
);
// 通用下载方法
export function download(url, params, filename, config) {
let token = localStorage.getItem('token')
return axios.post(url, params, {"Content-type": "multipart/form-data",headers:{"Authorization": `${token}`}}).then( async (data) => {
const isBlob = blobValidate(data.data);
console.log(isBlob,'====data');
if (isBlob) {
const blob = new Blob([data.data])
saveAs(blob, filename)
} else {
ElMessage.error('网络异常');
}
// downloadLoadingInstance.close();
})
}
export default service;

233
src/utils/ruoyi.js Normal file
View File

@ -0,0 +1,233 @@
/**
* 通用js方法封装处理
* Copyright (c) 2019 ruoyi
*/
// 日期格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
let search = params;
search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
dateRange = Array.isArray(dateRange) ? dateRange : [];
if (typeof (propName) === 'undefined') {
search.params['beginTime'] = dateRange[0];
search.params['endTime'] = dateRange[1];
} else {
search.params['begin' + propName] = dateRange[0];
search.params['end' + propName] = dateRange[1];
}
return search;
}
// 回显数据字典
export function selectDictLabel(datas, value) {
if (value === undefined) {
return "";
}
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].value == ('' + value)) {
actions.push(datas[key].label);
return true;
}
})
if (actions.length === 0) {
actions.push(value);
}
return actions.join('');
}
// 回显数据字典(字符串、数组)
export function selectDictLabels(datas, value, separator) {
if (value === undefined || value.length ===0) {
return "";
}
if (Array.isArray(value)) {
value = value.join(",");
}
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
Object.keys(value.split(currentSeparator)).some((val) => {
var match = false;
Object.keys(datas).some((key) => {
if (datas[key].value == ('' + temp[val])) {
actions.push(datas[key].label + currentSeparator);
match = true;
}
})
if (!match) {
actions.push(temp[val] + currentSeparator);
}
})
return actions.join('').substring(0, actions.join('').length - 1);
}
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
if (typeof arg === 'undefined') {
flag = false;
return '';
}
return arg;
});
return flag ? str : '';
}
// 转换字符串undefined,null等转化为""
export function parseStrEmpty(str) {
if (!str || str == "undefined" || str == "null") {
return "";
}
return str;
}
// 数据合并
export function mergeRecursive(source, target) {
for (var p in target) {
try {
if (target[p].constructor == Object) {
source[p] = mergeRecursive(source[p], target[p]);
} else {
source[p] = target[p];
}
} catch (e) {
source[p] = target[p];
}
}
return source;
};
/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
*/
export function handleTree(data, id, parentId, children) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
childrenList: children || 'children'
};
var childrenListMap = {};
var nodeIds = {};
var tree = [];
for (let d of data) {
let parentId = d[config.parentId];
if (childrenListMap[parentId] == null) {
childrenListMap[parentId] = [];
}
nodeIds[d[config.id]] = d;
childrenListMap[parentId].push(d);
}
for (let d of data) {
let parentId = d[config.parentId];
if (nodeIds[parentId] == null) {
tree.push(d);
}
}
for (let t of tree) {
adaptToChildrenList(t);
}
function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
o[config.childrenList] = childrenListMap[o[config.id]];
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
adaptToChildrenList(c);
}
}
}
return tree;
}
/**
* 参数处理
* @param {*} params 参数
*/
export function tansParams(params) {
let result = ''
for (const propName of Object.keys(params)) {
const value = params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && value !== "" && typeof (value) !== "undefined") {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
let params = propName + '[' + key + ']';
var subPart = encodeURIComponent(params) + "=";
result += subPart + encodeURIComponent(value[key]) + "&";
}
}
} else {
result += part + encodeURIComponent(value) + "&";
}
}
}
return result
}
// 验证是否为blob格式
export function blobValidate(data) {
return data.type !== 'application/json'
}

View File

@ -64,6 +64,45 @@ export function timeValidate(date, type) {
}
export function timeSlotChange(val) {
let startTime, endTime;
let now = new Date(); //当前日期
let nowDayOfWeek = now.getDay(); //今天本周的第几天
let nowDay = now.getDate(); //当前日
let nowMonth = now.getMonth(); //当前月
let nowYear = now.getFullYear(); //当前年
let jd = Math.ceil((nowMonth + 1) / 3)
switch (val) {
case '天':
case '日':
startTime = timeValidate(new Date(), 'ymd')
endTime = timeValidate(new Date(), 'ymd')
break;
case "本周":
case "周":
startTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek)
endTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek)
break;
case "本月":
case "月":
startTime = new Date(nowYear, nowMonth, 1)
endTime = new Date(nowYear, nowMonth + 1, 0)
break;
case "本季度":
case "季度":
startTime = new Date(nowYear, (jd - 1) * 3, 1)
endTime = new Date(nowYear, jd * 3, 0)
break
case "本年":
case "年":
startTime = new Date(nowYear, 0, 1)
endTime = new Date(nowYear, 11, 31)
break
}
return [timeValidate(startTime, 'ymd'), timeValidate(endTime, 'ymd')]
}
// 获取当前近多少天 7后7天 -7 前五天
export function getRecentDay(n) {
var currentDate = new Date();

View File

@ -37,17 +37,17 @@ export function resetForm(refName) {
//当type=1时获取出生日期,type=2时获取性别,type=3时获取年龄
export function IdCard(IdCard, type) {
if (type === 1) {
//获取出生日期
let birthday = IdCard.substring(6, 10) + "-" + IdCard.substring(10, 12) + "-" + IdCard.substring(12, 14)
return birthday
//获取出生日期
if(!IdCard) return;
if (type === 1) {
return IdCard.substring(6, 10) + "-" + IdCard.substring(10, 12) + "-" + IdCard.substring(12, 14)
}
if (type === 2) {
//获取性别
if (parseInt(IdCard.substr(16, 1)) % 2 === 1) {
return "男"
return "男"
} else {
return "女"
return "女"
}
}
if (type === 3) {

View File

@ -5,50 +5,38 @@
<span class="title">重点人信息统计</span>
<span :class="active == it ? 'active'+`${idx}`:''" @click="changeDate(it)" class="tabsBtn pointer" v-for="(it,idx) in btns" :key="it">{{ it }}</span>
</div>
<span style="color:#00B7FF;" class="f12 pointer">查看更多 </span>
</div>
<div class="asideCnt">
<div class="seachBox flex">
<!-- 搜索 -->
<MOSTY.Select v-model="listQuery.bqm" style="width: 120px;margin-right:10px" :dictEnum="search.xd" clearable placeholder="选择标签" />
<MOSTY.Other v-model="listQuery.nr" clearable placeholder="输入内容" />
<el-button type="primary">搜索</el-button>
</div>
<MyTable @changePage="changePage" customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" >
</MyTable>
<div class="seachBox flex">
<MOSTY.Other style="flex:1" v-model="keywords" clearable placeholder="输入关键字" />
<el-button type="primary" @click="handleSearch">搜索</el-button>
</div>
<MyTable @changePage="changePage" customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" >
<template #qtFxdj="{row}">
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ"/>
</template>
<template #qtZt="{row}">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT"/>
</template>
</MyTable>
</div>
</div>
</template>
<script setup>
import { qcckGet } from "@/api/qcckApi.js";
import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/DarkTable.vue";
import { reactive, ref,onMounted } from "vue";
import { reactive, ref,onMounted,getCurrentInstance } from "vue";
const btns = ref(['重点人','重点群体'])
const active = ref('重点人');
const keywords = ref(''); // 搜索关键字
const { proxy } = getCurrentInstance();
const { D_GS_ZDQT_ZT,D_BZ_RYBQ,D_GS_ZDQT_FXDJ } = proxy.$dict('D_GS_ZDQT_ZT','D_BZ_RYBQ','D_GS_ZDQT_FXDJ') //获取字典数据
const pageData = reactive({
tableData: [
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ ryXm: "王五", rySfzh: "330102199505057890", bq: "吸毒人员" },
{ ryXm: "王五", rySfzh: "330102199505057890", bq: "吸毒人员" },
],
keyCount: 0,
tableConfiger: {
@ -64,35 +52,82 @@ const pageData = reactive({
pageNum: 1
}, //分页
tableColumn: [
{ label: "姓名", prop: "xm", showOverflowTooltip: true },
{ label: "身份证号码", prop: "sfzh",showOverflowTooltip: true },
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
{ label: "身份证号码", prop: "rySfzh",showOverflowTooltip: true },
{ label: "标签", prop: "bq",showOverflowTooltip: true },
{ label: "所属线索", prop: "xsmc",showOverflowTooltip: true },
]
});
const search = reactive({
xd: [
{ label: "吸毒", value: "10" },
{ label: "贩毒", value: "20" }
],
});
const listQuery = ref([])
onMounted(() => {
tabHeightFn();
window.onresize = function () {
tabHeightFn();
};
getList();
});
// 切换标签
const changeDate = (val) =>{
active.value = val;
active.value = val;
pageData.pageConfiger.pageNum = 1;
pageData.tableData = [];
switch(val){
case '重点人':
pageData.tableColumn = [
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
{ label: "身份证号码", prop: "rySfzh",showOverflowTooltip: true },
{ label: "标签", prop: "bq",showOverflowTooltip: true },
{ label: "所属线索", prop: "xsmc",showOverflowTooltip: true },
];
break;
case '重点群体':
pageData.tableColumn = [
{ label: "群体名称", prop: "qtMc", showOverflowTooltip: true },
{ label: "群体状态", prop: "qtZt",showSolt:true,showOverflowTooltip: true },
{ label: "群体风险等级", prop: "qtFxdj",showSolt:true, showOverflowTooltip: true },
];
break;
}
getList();
}
// 搜索
const handleSearch = () => {
pageData.pageConfiger.pageNum = 1; // 重置页码
getList();
};
// 滚动分页加载
const changePage = () =>{
if( pageData.tableConfiger.loading) return; // 防止重复加载
pageData.pageConfiger.pageNum++;
}
const getList = () => {
pageData.tableConfiger.loading = true;
let url = active.value === '重点人' ? '/mosty-gsxt/tbGsxtZdry/selectPage' : '/mosty-gsxt/tbGsxtZdqt/selectPage';
let params = {
pageNum: pageData.pageConfiger.pageNum,
pageSize: pageData.pageConfiger.pageSize,
keywords: keywords.value,
};
qcckGet(params,url).then((res) => {
console.log(res,'=====');
let arr = res.records || [];
pageData.tableData = pageData.pageConfiger.pageNum == 1 ? arr : pageData.tableData.concat(arr);
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = document.getElementById('zdrxxtj').offsetHeight - 160;
window.onresize = function () {
tabHeightFn();
};
};
</script>

View File

@ -0,0 +1,209 @@
<template>
<el-dialog
:title="titleValue"
width="900px"
:model-value="modelValue"
append-to-body
@close="closed"
>
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="集合名称">
<el-input
placeholder="请输入集合名称"
v-model="listQuery.jhMc"
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div
class="tabBox"
:class="props.Single ? 'tabBoxRadio' : ''"
style="margin-top: 0px"
>
<el-table
v-loading="loading"
ref="multipleUserRef"
@selection-change="handleSelectionChange"
:data="tableData"
border
:row-key="keyid"
style="width: 100%"
height="450"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column prop="jhMc" align="center" label="集合名称" />
<el-table-column prop="jhSm" align="center" label="集合说明" />
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { defineProps, ref, onMounted } from "vue";
import { qcckGet } from "@/api/qcckApi.js";
const props = defineProps({
modelValue: {
type: Boolean,
required: true
},
dic: {
type: Object,
default: () => {}
},
titleValue: {
type: String,
default: "选择大类"
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: true
},
roleIds: {
type: Array,
default: []
}
});
const total = ref(0);
const listQuery = ref({
current: 1,
size: 20
});
const loading = ref(false);
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "chooseDate"]);
onMounted(() => {
handleFilter();
});
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { current: 1, size: 20 };
getListData();
};
const keyid = (row) => {
return row.id;
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("chooseDate", list);
let data = { type: props.LeaderType, userList: userList };
emits("chooseDateLeader", data);
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.size = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.current = currentPage;
getListData();
};
const getListData = () => {
const data = listQuery.value;
loading.value = true;
qcckGet(data, "/mosty-gsxt/tbGsxtBqgl/selectPage")
.then((res) => {
tableData.value = res?.records;
total.value = Number(res.total);
loading.value = false;
multipleUser();
})
.catch(() => {
loading.value = false;
});
};
//列表回显
function multipleUser() {
tableData.value.forEach((item) => {
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.current = 1;
getListData();
};
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -0,0 +1,242 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">设备来源范围{{ title }} </span>
<div>
<el-button
type="primary"
size="small"
:loading="loading"
@click="submit"
>保存</el-button
>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage
v-model="listQuery"
:formList="formData"
ref="elform"
:rules="rules"
>
<!-- 身份标签细类 -->
<template #sxtList>
<el-button @click="openDialog('01')">选择</el-button>
<div class="boxlist">
<MyTable
:tableData="tableDate.sxtList"
:tableColumn="tableDate.tableColumn"
:tableHeight="tableDate.tableHeight"
:key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth"
>
<!-- 操作 -->
<template #controls="{ row }">
<el-link
type="danger"
@click="delDictItem(row.id, '身份标签细类')"
>删除</el-link
>
</template>
</MyTable>
</div>
</template>
</FormMessage>
</div>
<!-- 列表弹窗 -->
<DialogList
:Single="false"
:roleIds="roleIds"
v-if="chooseShow"
:dic="props.dic"
@chooseDate="chooseDate"
:titleValue="chooseTitle"
v-model="chooseShow"
:bqLx="chooseType"
bqDl="02"
></DialogList>
</div>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import DialogList from "@/views/backOfficeSystem/BasicManagement/components/dialogList.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import {
ref,
defineExpose,
defineProps,
reactive,
defineEmits,
getCurrentInstance
} from "vue";
const emit = defineEmits(["updateDate"]);
const { proxy } = getCurrentInstance();
const props = defineProps({
dic: Object
});
const roleIds = ref([]); //角色id
const chooseType = ref("01"); //选择弹窗类型
const chooseShow = ref(false); //选择弹窗
const chooseTitle = ref(""); //选择弹窗
const dialogForm = ref(false); //弹窗
const formData = reactive([
{ label: "集合名称", prop: "jhMc", type: "input" },
{ label: "集合说明", prop: "jhSm", type: "input" },
{ label: "摄像头列表", prop: "sxtList", type: "slot", width: "100%" }
]);
const rules = reactive({
jhMc: [{ required: true, message: "请输入集合名称", trigger: "blur" }],
jhSm: [{ required: true, message: "请输入集合说明", trigger: "blur" }]
});
const tableDate = reactive({
sxtList: [
{
csmc: "产商名称",
csmc: "厂商名称",
ipdz: "IP地址",
ipv6dz: "IPV6地址",
jd: "集合名称",
jkdbgbh: "监控点国标编号",
sbbh: "设备编号",
sbmc: "设备名称",
sjly: "数据来源",
sjlyid: " 数据来源ID",
sxtId: "摄像头ID",
wd: "地球纬度"
}
], //表格数据
xwbqIdList: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
tableHeight: 225,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 90, //操作栏宽度
tableColumn: [
{ label: "产商名称", prop: "csmc", showOverflowTooltip: true },
{ label: "厂商名称", prop: "csmc" },
{ label: "IP地址", prop: "ipdz" },
{ label: "IPV6地址", prop: "ipv6dz" },
{ label: "集合名称", prop: "jd" },
{ label: "监控点国标编号", prop: "jkdbgbh" },
{ label: "设备编号", prop: "sbbh" },
{ label: "设备名称", prop: "sbmc" },
{ label: "数据来源(1 海康 2 旷视)", prop: "sjly" },
{ label: "数据来源ID", prop: "sjlyid" },
{ label: "摄像头ID", prop: "sxtId" },
{ label: "地球纬度", prop: "wd" }
]
});
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const title = ref("");
// 初始化数据
const init = (type, row) => {
dialogForm.value = true;
title.value = type == "add" ? "新增" : "编辑";
if (row) getDataById(row.id);
};
// 根据id查询详情
const getDataById = (id) => {
qcckGet({}, "/mosty-gsxt/tbGsxtGzyJh/selectVoById/" + id).then((res) => {
listQuery.value = res;
tableDate.sxtList = res.sxtList;
listQuery.value.sxtList = res.sxtList.map((item) => item.id);
tableDate.keyCount++;
});
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let url =
title.value == "新增"
? "/mosty-gsxt/tbGsxtGzyJh/save"
: "/mosty-gsxt/tbGsxtGzyJh/update";
let params = { ...data };
params.sxtList = [
{
csmc: "产商名称",
csmc: "厂商名称",
ipdz: "IP地址",
ipv6dz: "IPV6地址",
jd: 29.6510453, //经度
jkdbgbh: "监控点国标编号",
sbbh: "设备编号",
sbmc: "设备名称",
sjly: "数据来源",
sjlyid: " 数据来源ID",
sxtId: "摄像头ID",
wd: 94.3602321 //维度
}
];
loading.value = true;
qcckPost(params, url)
.then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
loading.value = false;
close();
})
.catch(() => {
loading.value = false;
});
});
};
// 打开弹窗
const openDialog = (type) => {
chooseShow.value = true;
chooseType.value = type;
chooseTitle.value = "选择摄像头列表";
roleIds.value = tableDate.sxtList.map((item) => item.id);
};
// 选择数据
const chooseDate = (data) => {
if (chooseType.value == "01") {
tableDate.sxtList = data;
listQuery.value.sxtList = tableDate.sxtList.map((item) => item.id);
} else {
tableDate.xwbqIdList = data;
listQuery.value.xwbqIdList = tableDate.xwbqIdList.map((item) => item.id);
}
};
// 删除
const delDictItem = (id, type) => {
tableDate.sxtList = tableDate.sxtList.filter((item) => item.id !== id);
listQuery.value.sxtList = tableDate.sxtList.map((item) => item.id);
};
// 关闭
const close = () => {
listQuery.value = {};
tableDate.sxtList = [];
dialogForm.value = false;
loading.value = false;
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
.boxlist {
width: 99%;
height: 225px;
margin-top: 10px;
overflow: hidden;
}
</style>

View File

@ -0,0 +1,184 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="布控监视管理">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
></Search>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 编辑详情 -->
<EditAddForm
v-if="show"
ref="detailDiloag"
:dic="{ D_GS_BQ_LX, D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB }"
@updateDate="getList"
/>
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import EditAddForm from "./components/editAddForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB, D_GS_BQ_LX } = proxy.$dict(
"D_GS_BQ_DJ",
"D_GS_SSYJ",
"D_GS_BQ_LB",
"D_GS_BQ_LX"
); //获取字典数据
const detailDiloag = ref();
const show = ref(false);
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{
label: "集合名称",
prop: "jhMc",
placeholder: "请输入集合名称",
showType: "input"
},
{
label: "集合说明",
prop: "jhSm",
placeholder: "请输入集合说明",
showType: "input"
},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 160, //操作栏宽度
tableColumn: [
{
label: "集合名称",
prop: "jhMc"
},
{
label: "集合说明",
prop: "jhSm"
},
]
});
onMounted(() => {
tabHeightFn();
getList();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
const getList = () => {
pageData.tableConfiger.loading = true;
qcckGet(queryFrom.value, "/mosty-gsxt/tbGsxtGzyJh/selectPage")
.then((res) => {
pageData.tableData = res.records;
pageData.total = res.total;
pageData.tableConfiger.loading = false;
})
.catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 删除
const delDictItem = (id) => {
proxy
.$confirm("确定要删除", "警告", { type: "warning" })
.then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtBqzh/" + id).then(() => {
proxy.$message({ type: "success", message: "删除成功" });
getList();
});
})
.catch(() => {});
};
// 新增
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
detailDiloag.value.init(type, row);
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,95 +1,280 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">重点群体管理 </span>
<span class="title">{{ title }} 重点群体管理 </span>
<div>
<el-button type="primary" size="small" :loading="loading" @click="submit" >保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
<el-button type="primary" v-if="!disabled" size="small" :loading="loading" @click="submit">保存</el-button>
</div>
</div>
<div class="form_cnt">
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane :label="title+'群体'" name="first"></el-tab-pane>
<el-tab-pane label="轨迹信息" name="second"></el-tab-pane>
<el-tab-pane label="标签信息" name="third"></el-tab-pane>
</el-tabs>
<QtDetail ref="elform" v-if="activeName == 'first'"></QtDetail>
<!-- <FormMessage :formList="formData" ref="elform" :rules="rules"></FormMessage> -->
<FormMessage :disabled="disabled" v-model="listQuery" labelWidtth="" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
<template #bqList>
<div class="marks pointer" @click="handleChooseMarks">
<span style="color: rgb(175 178 184);padding-left: 10px;" v-if="!listQuery.bqList || listQuery.bqList.length == 0 ">请选择标签</span>
<span v-else >
<el-tag @close.stop="closeTag(idx)" type="success" :closable="disabled ? false:true" v-for="(it,idx) in listQuery.bqList" :key="idx">{{ it.bqMc }}</el-tag >
</span>
</div>
</template>
<template #lqxxList>
<div class="ww100">
<div class="ww100 mb10"><el-button type="primary" v-if="!disabled" @click="handleCjlr('add',null)">新增</el-button></div>
<div style="width:99.5%">
<MyTable
:tableData="listQuery.lqxxList"
:tableColumn="pageData.qcjListColumn"
:key="pageData.keyCountCj"
:tableConfiger="pageData.qcjConfiger"
:controlsWidth="pageData.controlsWidth">
<template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.bqId)">删除</el-link>
</template>
</MyTable>
</div>
</div>
</template>
</FormMessage>
<div class="ml50 mr50"><span class="mr10">管理重点人 : </span><el-button v-if="!disabled" @click="chooseVisible_RY = true" type="primary" >选择</el-button></div>
<div class="boxlist ml50 mr50">
<MyTable
:tableData="listQuery.zdryList"
:tableColumn="pageData.zdryColumn"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth">
<template #ryXb ="{ row }">
<DictTag :value="row.ryXb " :tag="false" :options="props.dic.D_BZ_XB" />
</template>
<template #controls="{ row }">
<el-link type="danger" @click="deleteRow(row)">删除</el-link>
</template>
</MyTable>
</div>
<!-- 选择审核人 -->
<div class="ww100 mt20 ml50 mr50">
<el-steps direction="vertical" :active="listQuery.wccz" space="500" finish-status="success">
<el-step title="发起申请" >
<template #description>
<div class="flex align-center ww100 mt10 mb20">
<el-input v-model="listQuery.sqrXm" readonly class="ww20"></el-input>
<el-input v-model="listQuery.sqrSsbmmc" readonly class="ww20 ml10 mr10"></el-input>
<span class="f12" style="color: #333333;"> 备注发起人和部门根据登陆人自动填写</span>
</div>
</template>
</el-step>
<el-step title="审核确认" >
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span class="mr4">审核部门 : </span>
<MOSTY.Department @getDepValue="getShdep" v-model="listQuery.shrSsbmdm" clearable :placeholder="listQuery.shrSsbmmc ? listQuery.shrSsbmmc : '' " />
</div>
</template>
</el-step>
<el-step title="审批确认" >
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span lass="mr4">审批部门 : </span>
<MOSTY.Department @getDepValue="getSPdep" v-model="listQuery.sprSsbmdm" clearable :placeholder="listQuery.sprSsbmmc ? listQuery.sprSsbmmc : '' " />
</div>
</template>
</el-step>
</el-steps>
</div>
</div>
</div>
<!-- 采集录入 -->
<Addcjlr ref="cjlrDialog" @change="addEdteCj"></Addcjlr>
<!-- 标签选择 -->
<ChooseMarks v-model="chooseMarksVisible" @choosed="addMarks" :roleIds="roleIds" />
<!-- 选择布控人员 -->
<BkryDialod v-model="chooseVisible_RY" @choosed="choosedPeo" @choosedAdd="choosedAdd" :roleIds="roleIds_RY" />
</template>
<script setup>
import QtDetail from './qtDetail.vue'
import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
import { getItem } from "@/utils/storage";
import * as MOSTY from "@/components/MyComponents/index";
import Addcjlr from './addcjlr.vue'
import BkryDialod from '@/components/ChooseList/ChooseZdr/index.vue';
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import {ref,defineExpose,reactive,onMounted,defineEmits,getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const cjlrDialog = ref()
const chooseMarksVisible = ref(false)
const chooseVisible_RY = ref(false)
const roleIds = ref([])
const roleIds_RY = ref([])
const addPerson = ref([]) //单独新增的数据
const dialogForm = ref(false); //弹窗
const activeName = ref("first");
const rules = reactive({
qtMc: [{ required: true, message: "请输入群体名称", trigger: "blur" }],
qtFxdj: [{ required: true, message: "请选择风险等级", trigger: "change" }],
qtLb: [{ required: true, message: "请选择群体类别", trigger: "change" }],
qtClsj: [{ required: true, message: "请选择群体成立时间", trigger: "change" }],
bqList: [{ required: true, message: "请选择群体标签", trigger: "change" }],
zdrLkyy: [{ required: true, message: "请输入列控原因", trigger: "blur" }],
});
const formData = ref([
{ label: "线索标题", prop: "xsbt", type: "input", },
{ label: "线索编号", prop: "xsbh", type: "input" },
{ label: "线索类型", prop: "xslx", type: "select", options: [] },
{ label: "线索来源", prop: "xsly", type: "input" },
{ label: "开始时间", prop: "kssj", type: "datetime"},
{ label: "结束时间", prop: "jssj", type: "datetime"},
{ label: "指向地点", prop: "zxdd", type: "input" },
{ label: "群体名称", prop: "qtmc", type: "input" },
{ label: "群体类型", prop: "qtlx", type: "input" },
{ label: "线索细类", prop: "xslx", type: "input" },
{ label: "风险等级", prop: "fxdj", type: "input" },
{ label: "是否初报", prop: "qtmc", type: "input" },
{ label: "线索内容", prop: "nr", type: "textarea",width: '100%' },
{ label: "报送编号", prop: "bsbh", type: "input",},
{ label: "上报单位", prop: "sbdw", type: "input",},
{ label: "抄送单位", prop: "csdw", type: "input",},
{ label: "承办人", prop: "cbr", type: "input",},
{ label: "审核人", prop: "shr", type: "input",},
{ label: "签发人", prop: "qfr", type: "input",},
{ label: "群体名称", prop: "qtMc", type: "input" },
{ label: "风险等级", prop: "qtFxdj", type: "select", options: props.dic.D_GS_ZDQT_FXDJ },
{ label: "群体类别", prop: "qtLb", type: "select", options: props.dic.D_GS_ZDQT_LB },
{ label: "群体成立时间", prop: "qtClsj", type: "date" },
{ label: "群体标签", prop: "bqList", type: "slot", width: "100%" },
{ label: "两群采集录入", prop: "lqxxList", type: "slot", width: "100%" },
{ label: "管辖单位", prop: "gxSsbmdm", type: "department" },
{ label: "入库开始时间", prop: "zdrRkkssj", type: "datetime" },
{ label: "入库截至时间", prop: "zdrRkjssj", type: "datetime" },
{ label: "列控原因", prop: "zdrLkyy", type: "textarea",width: "100%" },
]);
const listQuery = ref({
sfbqdj: []
}); //表单
const pageData = reactive({
keyCountCj: 0,
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
},
qcjConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false,
},
controlsWidth: 220, //操作栏宽度
zdryColumn: [
{ label: "姓名", prop: "ryXm"},
{ label: "性别", prop: "ryXb", showSolt: true },
{ label: "身份证号 ", prop: "rySfzh"},
{ label: "户籍地", prop: "hjdXz" },
{ label: "现居地", prop: "xzdXz"},
{ label: "手机号", prop: "ryLxdh"},
],
qcjListColumn:[
{ label: "微信群", prop: "wxqId" },
{ label: "QQ群", prop: "qqqId" },
{ label: "群主昵称", prop: "qzNc" },
{ label: "群主姓名", prop: "qzXm" },
{ label: "群主联系电话", prop: "qzLxdh" },
{ label: "群重要内容", prop: "qZynr" },
]
});
const disabled = ref(false)
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const title = ref("");
const rules = reactive({
xsbt: [{ required: true, message: "请输入线索标题", trigger: "blur" }]
});
const editpeo = ref();
onMounted(() => {});
// 初始化数据
const init = (type, row,) => {
const init = async (type, row) => {
dialogForm.value = true;
title.value = type == 'add' ? "新增" : "编辑";
if (row) getDataById(row.id);
title.value = type == "add" ? "新增" : type == 'detail' ? '详情':"编辑";
if(type == 'add'){
listQuery.value.sqrXm = getItem("USERNAME");
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
listQuery.value.sqrSsbmmc = getItem("deptId")[0].deptName;;
listQuery.value.sqrSsbmdm = getItem("deptId")[0].deptCode;;
}
disabled.value = type == 'detail' ? true : false;
pageData.tableConfiger.haveControls = type == "detail" ? false: true;
pageData.qcjConfiger.haveControls = type == "detail" ? false: true;
if(row) getDataById(row.id)
};
// 根据id查询详情
const getDataById = (id) => {
// qcckGet({}, '/mosty-gsxt/tbGsxtBqgl/'+id).then((res) => {
// listQuery.value = res;
// });
qcckGet({}, "/mosty-gsxt/tbGsxtZdqt/selectVoById/" + id).then((res) => {
listQuery.value = res;
});
};
// 采集录入
const handleCjlr = (type,row) =>{
cjlrDialog.value.init(type,row);
}
const addEdteCj = (val) =>{
if(!listQuery.value.lqxxList) listQuery.value.lqxxList = [];
listQuery.value.lqxxList.unshift(val.data);
pageData.keyCountCj++;
}
const handleChooseMarks = () =>{
if(disabled.value) return;
chooseMarksVisible.value = true
}
// 新增标签
const addMarks = (val) =>{
listQuery.value.bqList = val.map(v=>{
return { bqDm:v.bqDm, bqId:v.id, bqLb:v.bqLb, bqLx:v.bqLx, bqMc:v.bqMc }
});
roleIds.value = val.map(v=>v.id)
}
// 删除数据
const closeTag = (idx) =>{
listQuery.value.bqList.splice(idx,1)
roleIds.value.splice(idx,1)
}
// 选择人员
const choosedPeo = (val) =>{
roleIds_RY.value = val.map(it=>it.id);
let arr = val.map(item=>{
let bqArr = item.bqList || [];
let bqs = bqArr.map(v=>{
return { bqZl:v.bqZl , bqId:v.bqId, bqLx:v.bqLx, bqLb:v.bqLb, bqMc:v.bqMc, bqDm:v.bqDm }
})
return { id:item.id, fjZp:item.fjZp, ryXm:item.ryXm, ryXb:item.ryXb, rySfzh:item.rySfzh, hjdXz:item.hjdXz, xzdXz:item.xzdXz, ryLxdh:item.ryLxdh, qtXnsf:item.qtXnsf,clCjh:item.clCjh, clCph:item.clCph, qtTzms:item.qtTzms, bqList:bqs }
})
listQuery.value.zdryList = [...addPerson.value,...arr];
pageData.keyCount++;
}
// 单独新增的数据
const choosedAdd = (item) =>{
let obj = { id:item.id, fjZp:item.fjZp, ryXm:item.ryXm, ryXb:item.ryXb, rySfzh:item.rySfzh, hjdXz:item.hjdXz, xzdXz:item.xzdXz, ryLxdh:item.ryLxdh, qtXnsf:item.qtXnsf,clCjh:item.clCjh, clCph:item.clCph, qtTzms:item.qtTzms, bqList:item.bqList }
addPerson.value.push(obj) ;//缓存的数据
if(!listQuery.value.zdryList) listQuery.value.zdryList = [];
listQuery.value.zdryList.unshift(obj);
}
// 删除数据
const deleteRow = (row) => {
roleIds_RY.value = roleIds_RY.value.filter(id => id != row.id);
addPerson.value = addPerson.value.filter(it => it.id != row.id);
listQuery.value.zdryList = listQuery.value.zdryList.filter(it => it.id != row.id);
}
// 提交
const submit = () => {
elform.value.submit((data)=>{
// let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update';
// let params = { ...data }
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value + "成功" });
// emit("updateDate");
// close();
// }).catch(() => {});
elform.value.submit((data) => {
let params = { ...data }
loading.value = true;
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdqt/save" : "/mosty-gsxt/tbGsxtZdqt/update";
qcckPost(params, url).then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => { loading.value = false;});
});
};
const getShdep = (val) =>{
listQuery.value.shrSsbmmc = val ? val.orgName : ''
}
const getSPdep = (val) =>{
listQuery.value.sprSsbmmc = val ? val.orgName : ''
}
// 关闭
const close = () => {
listQuery.value = {};
@ -102,8 +287,35 @@ defineExpose({ init });
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{
color: #0072ff;
background: rgba(0, 114, 255, 0.3);
.boxlist {
width: calc(99% - 50px);
margin-top: 10px;
overflow: hidden;
}
.marks{
width: 100%;
min-height: 32px;
border: 1px solid #e9e9e9;
border-radius: 4px;
}
.depBox{
border: 1px solid #e9e9e9;
width: 305px;
padding: 0 0 0 4px;
border-radius: 4px;
::v-deep .el-input__inner{
border: none;
}
::v-deep .el-cascader .el-input.is-focus .el-input__inner{
border-color: transparent !important;
}
::v-deep .el-input__inner:focus {
box-shadow: none;
}
::v-deep .el-input.is-disabled .el-input__inner{
border-color: transparent !important;
}
}
</style>

View File

@ -0,0 +1,67 @@
<template>
<el-dialog v-model="showDialog" :destroy-on-close="true" title="采集录入" @close="close" :close-on-click-modal="false">
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
</FormMessage>
<template #footer>
<div class="flex just-center">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { reactive, ref,getCurrentInstance } from 'vue';
const { proxy } = getCurrentInstance();
const { D_BZ_XB } = proxy.$dict("D_BZ_XB"); // 获取字典数据
const elform = ref()
const showDialog = ref(false)
const emit = defineEmits(['change'])
const listQuery = ref({})
const formData = ref([
{ label: "微信群", prop: "wxqId", type: "input" ,width:'45%'},
{ label: "QQ群", prop: "qqqId", type: "input" ,width:'45%'},
{ label: "群主昵称", prop: "qzNc", type: "input",width:'45%' },
{ label: "群主姓名", prop: "qzXm", type: "input",width:'45%' },
{ label: "群主联系电话", prop: "qzLxdh", type: "input",width:'45%' },
{ label: "群重要内容", prop: "qZynr", type: "textarea",width:'100%' },
])
const rules = reactive({
wxqId: [{ required: true, message: "请输入微信群", trigger: "blur" }],
qqqId: [{ required: true, message: "请输入QQ群", trigger: "blur" }],
qzNc: [{ required: true, message: "请输入群主昵称", trigger: "blur" }],
qzXm: [{ required: true, message: "请输入群主姓名", trigger: "blur" }],
qzLxdh: [{ required: true, message: "请输入群主联系电话", trigger: "blur" }],
qZynr: [{ required: true, message: "请输入群重要内容", trigger: "blur" }],
})
const type = ref('')
const init = (lx,row) =>{
type.value = lx;
if(row) listQuery.value = JSON.parse(JSON.stringify(row))
showDialog.value = true;
}
const submitForm = () =>{
elform.value.submit((val)=>{
let obj = { type:type.value, data:val }
emit('change',obj)
showDialog.value = false;
})
}
const close = () =>{
elform.value.reset();
listQuery.value.bqList = []
showDialog.value = false;
}
defineExpose({init})
</script>
<style lang="scss" scoped>
</style>

View File

@ -1,137 +0,0 @@
<template>
<el-form ref="elform" :model="listQuery" :rules="rules" :inline="true" label-position="right">
<el-divider content-position="left">群体信息</el-divider>
<el-form-item prop="qtmc" label="群体名称">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtmc" :placeholder="`请输入群体名称`"/>
</el-form-item>
<el-form-item prop="qtbm" label="群体别名">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtbm" :placeholder="`请输入群体别名`"/>
</el-form-item>
<el-form-item prop="qtjc" label="群体简称">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtjc" :placeholder="`请输入群体简称`"/>
</el-form-item>
<el-form-item prop="qtlb" label="群体类别">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtlb" :placeholder="`请输入群体类别`"/>
</el-form-item>
<el-form-item prop="clsj" label="成立时间">
<el-date-picker v-model="listQuery.clsj" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width:100%;" />
</el-form-item>
<el-form-item prop="fxdj" label="风险等级">
<MOSTY.Select filterable v-model="listQuery.fxdj" :dictEnum="[]" width="100%" clearable :placeholder="`请选择风险等级`"/>
</el-form-item>
<el-form-item prop="fxjc" label="风险检测" style="width:100%">
<div class="flex align-center">
<MOSTY.Other filterable v-model="listQuery.fxjc" readonly />
<span class="ml5"><el-icon color="#0072FF" style="top:4px" size="20px"><CirclePlus /></el-icon></span>
</div>
</el-form-item>
<el-form-item prop="ybjc" label="一般监测" style="width:100%">
<div class="flex align-center">
<MOSTY.Other filterable v-model="listQuery.ybjc" readonly />
<span class="ml5"><el-icon color="#0072FF" style="top:4px" size="20px"><CirclePlus /></el-icon></span>
</div>
</el-form-item>
<el-form-item prop="ybjc" label="重点监测" style="width:100%">
<div class="flex align-center">
<MOSTY.Other filterable v-model="listQuery.zdjc" readonly />
<span class="ml5"><el-icon color="#0072FF" style="top:4px" size="20px"><CirclePlus /></el-icon></span>
</div>
</el-form-item>
<el-form-item prop="ybjc" label="背景资料" style="width:100%">
<MOSTY.Other filterable v-model="listQuery.bjzl" style="width:100%" />
</el-form-item>
<el-form-item prop="ybjc" label="两群采集录入" style="width:100%">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
/>
</el-form-item>
<el-divider content-position="left">群体管辖信息</el-divider>
<el-form-item prop="gxdw" label="管辖单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.gxdw" :placeholder="`请输入管辖单位`"/>
</el-form-item>
<el-form-item prop="gxxq" label="管辖辖区">
<MOSTY.Other width="100%" clearable v-model="listQuery.gxxq" :placeholder="`请输入管辖辖区`"/>
</el-form-item>
<el-form-item prop="lxr" label="联系人">
<MOSTY.Other width="100%" clearable v-model="listQuery.lxr" :placeholder="`请输入联系人`"/>
</el-form-item>
<el-form-item prop="lxfs" label="联系方式">
<MOSTY.Other width="100%" clearable v-model="listQuery.lxfs" :placeholder="`请输入联系方式`"/>
</el-form-item>
<el-divider content-position="left">审批信息</el-divider>
<el-form-item prop="sqr" label="申请人">
<MOSTY.Other width="100%" clearable v-model="listQuery.sqr" :placeholder="`请输入申请人`"/>
</el-form-item>
<el-form-item prop="sqdw" label="申请单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.sqdw" :placeholder="`请输入申请单位`"/>
</el-form-item>
<el-form-item prop="shr" label="审核人">
<MOSTY.Other width="100%" clearable v-model="listQuery.shr" :placeholder="`请输入审核人`"/>
</el-form-item>
<el-form-item prop="shdw" label="审核单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.shdw" :placeholder="`请输入审核单位`"/>
</el-form-item>
<el-form-item prop="spr" label="审批人">
<MOSTY.Other width="100%" clearable v-model="listQuery.spr" :placeholder="`请输入审批人`"/>
</el-form-item>
<el-form-item prop="spdw" label="审批单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.spdw" :placeholder="`请输入审批单位`"/>
</el-form-item>
<el-form-item prop="jsdw" label="接收单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.jsdw" :placeholder="`请输入接收单位`"/>
</el-form-item>
<el-form-item prop="sffk" label="是否反馈">
<MOSTY.Other width="100%" clearable v-model="listQuery.sffk" :placeholder="`请输入是否反馈`"/>
</el-form-item>
</el-form>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/MyTable.vue";
import { reactive,defineEmits,ref , defineExpose,} from 'vue'
const emits = defineEmits(["update:modelValue"]);
const elform = ref();
const listQuery = ref({});
const rules = reactive({
qtmc: [{ required: true, message: '请输入群体名称', trigger: 'blur' }],
})
const pageData = reactive({
tableData: [],
tableConfiger: {
rowHieght: 30,
showSelectType: "null",
loading: false,
haveControls:false,
showIndex:false
},
tableHeight:200,
tableColumn: [
{ label: "微信群", prop: "wxq"},
{ label: "QQ群", prop: "qqq"},
{ label: "群主", prop: "qz"},
{ label: "联系电话", prop: "lxdh"},
{ label: "群重要内容", prop: "zynr"},
]
});
const submit = (resfun) => {
elform.value.validate((valid) => {
if (!valid) return false;
resfun(listQuery.value);
});
};
defineExpose({ submit });
</script>
<style>
</style>

View File

@ -0,0 +1,201 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">流线索</span>
<div>
<el-button type="primary" :loading="loading" @click="submit">保存</el-button>
<el-button @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #gapdive>
<div style="width: 100%;height: 10px;" class="mb20">
<el-divider content-position="left">基础信息</el-divider>
</div>
</template>
<template #gapline>
<div style="width: 100%;height: 10px;" class="mb20">
<el-divider content-position="left">线索内容</el-divider>
</div>
</template>
<template #scfj>
<div style="width: 100%;padding-left: 50px;">
<div>上传附件:<span class="f12">可附电子表格Word文档图像音视频文件</span> </div>
<div><MOSTY.Upload :showBtn="true" :limit="10" v-model="fjdz" /> </div>
</div>
</template>
</FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
<MyTable
:tableData="pageForm.tableData"
:tableColumn="pageForm.tableColumn"
:tableHeight="pageForm.tableHeight"
:key="pageForm.keyCount"
:tableConfiger="pageForm.tableConfiger"
:controlsWidth="pageForm.controlsWidth"
>
<template #xb="{row}">
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
</template>
<template #bqList="{row}">
<div v-if="row.bqList">
<el-tag type="success" v-for="(it,idx) in row.bqList" :key="idx">{{ it.bqMc }}</el-tag >
</div>
</template>
</MyTable>
</div>
</div>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckPost } from "@/api/qcckApi.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
const emit = defineEmits(["change"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const rules = reactive({
xsMc: [{ required: true, message: "请输入线索名称", trigger: "blur" }],
xlLx: [{ required: true, message: "请选择线索类型", trigger: "change" }],
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }],
});
const formData = ref([
{ prop: "gapdive", type: "slot",width:'100%' },
{ label: "线索名称", prop: "xsMc", type: "input" },
{ label: "线索类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
{ label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
{ label: "指向开始时间", prop: "zxkssj", type: "datetime"},
{ label: "指向结束时间", prop: "zxjssj", type: "datetime"},
{ label: "指向地点", prop: "zxdz", type: "input"},
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
{ prop: "gapline", type: "slot",width:'100%' },
{ prop: "scfj", type: "slot",width:'100%'},
{ label: "线索内容", prop: "xsNr", type: "textarea",width:'100%'},
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
{ label: "群体名称", prop: "qtmc", type: "input"},
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"},
{ label: "线索报送单位", prop: "ssbmdm", type: "department"},
]);
const fjdz = ref()
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const pageForm = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls:false
},
controlsWidth: 220,
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb",showSolt:true },
{ label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bqList",showSolt:true }
]
});
onMounted(()=>{
tabHeightFn()
})
// 初始化数据
const init = (list) => {
fjdz.value = []
tabHeightFn()
dialogForm.value = true;
let peo = []
list.forEach(item => {
if(item.zdryList) peo = peo.concat(item.zdryList);
});
pageForm.tableData = peo.map((it) => {
return {
xm: it.ryXm,
xb: it.ryXb,
sfzh: it.rySfzh,
hjdz: it.xzdXz,
hjdpcs: it.hjdPcsmc,
hjdpcsdm: it.hjdPcsdm,
bqList: it.bqList || []
};
});
pageForm.keyCount++;
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let params = { ...data ,ryList:pageForm.tableData,cjLx:'0'};
params.fjdz = fjdz.value.length > 0 ? fjdz.value.join(','):'';
loading.value = true;
qcckPost(params, '/mosty-gsxt/qbcj/add').then((res) => {
loading.value = false;
proxy.$message({ type: "success", message: "成功" });
emit("change");
close();
}).catch(() => {
loading.value = false;
});
});
};
// 关闭
const close = () => {
fjdz.value = []
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
// 表格高度计算
const tabHeightFn = () => {
pageForm.tableHeight = window.innerHeight - 720;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
color: #0072ff;
background: rgba(0, 114, 255, 0.3);
}
.boxlist {
width: 99%;
height: 225px;
margin-top: 10px;
overflow: hidden;
}
::v-deep .avatar-uploader{
display: flex;
align-items: center;
}
::v-deep .el-upload-list{
margin-left: 20px;
display: flex;
align-items: center;
}
::v-deep .el-upload-list__item-name .el-icon{
top: 3px;
}
</style>

View File

@ -2,156 +2,177 @@
<div>
<div class="titleBox">
<PageTitle title="重点群体管理">
<el-button type="primary" size="small" v-for="it in btns" :key="it"> {{ it }}</el-button>
<el-button type="primary" size="small" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
<template #reference>
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请
</el-button>
</template>
<div class="flex just-center">
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)">{{it.zdmc }}</el-button>
</div>
</el-popover>
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
<template #reference>
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)">指定分配</el-button>
</template>
<div>
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
<div class="flex just-center mt10">
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
</div>
</div>
</el-popover>
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button>
<el-button type="primary" size="small" @click="addEdit('add', null)">
<el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
<el-button type="danger" size="small" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><Dete /></el-icon>
<span style="vertical-align: middle">批量删除</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
/>
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #jbxx>
<div>
<img src="" alt="">
<ul>
<li>群体名称</li>
<li>所属辖区</li>
<li>群体级别</li>
<li>风险等级</li>
</ul>
</div>
<div class="flex">
<el-button type="primary" size="small"> 涉恐群体</el-button>
<el-button type="primary" size="small"> 涉稳群体</el-button>
<el-button type="primary" size="small"> 讨薪群体</el-button>
</div>
</template>
<template #bgxx="{row}">
<div>背景资料</div>
<div>创建单位</div>
<div>风险监测</div>
<div>一般监测</div>
<div>重点监测</div>
</template>
<template #gkxx="{row}">
<div>群体标签</div>
<div>管辖单位</div>
<div>列控原因</div>
<div>开始时间</div>
<div>截至时间</div>
</template>
<template #wkrs="{row}">
<span style="color:#0072ff">{{ row.wkrs }}</span>
</template>
<template #jbxx="{ row }">
<div class="flex">
<img src="" alt="" style="width: 80px;height: 90px;" />
<ul class="tl ml10" style="flex:1 0 0">
<li class="one_text_detail">群体名称{{ row.qtMc }}</li>
<li class="flex one_text_detail">群体类别<DictTag :tag="false" :value="row.qtLb" :options="D_GS_ZDQT_LB" /> </li>
<li class="flex one_text_detail">风险等级<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ" /></li>
<li class="one_text_detail">创建时间{{ row.xtCjsj }}</li>
</ul>
</div>
<div class="ww100 one_text_detail">
<el-button type="primary" size="small" v-for="(item, index) in row.bqList" :key="index">{{ item.bqMc }}</el-button>
</div>
</template>
<template #bgxx="{ row }">
<div class="flex one_text_detail">背景资料{{ row.qtBjzl }}</div>
<div class="flex one_text_detail">创建单位{{ row.xtCjbmmc }}</div>
</template>
<template #gkxx="{ row }">
<div class="flex one_text_detail">管辖单位{{ row.gxSsbmmc }}</div>
<div class="flex one_text_detail">列控原因{{ row.zdrLkyy }}</div>
<div class="flex one_text_detail">开始时间{{ row.zdrRkkssj }}</div>
<div class="flex one_text_detail">截至时间{{ row.zdrRkjssj }}</div>
</template>
<template #zdryList="{ row }">
<span style="color: #0072ff">{{ row.zdryList ? row.zdryList.length : 0 }}</span>
</template>
<template #qtZt="{ row }">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="primary">查看</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
<el-link size="small" type="primary" v-if=" row.qtZt == '01'" @click="handleSend(row.id)">送审</el-link>
<el-link size="small" type="success" v-if=" row.qtZt == '01'" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
<!-- 编辑 - 新增-->
<EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
<!-- 选择用户 -->
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" /> <!-- 转线索 -->
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{ D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX }"></ZxsForm>
</div>
</template>
<script setup>
<script setup>
import ZxsForm from "./components/zxsForm.vue";
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/addForm.vue";
import EditForm from "./components/addForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { ElMessage } from "element-plus";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const { D_GS_ZDR_CZZT,D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT","D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
const showzxs = ref(false);
const queryFrom = ref({});
const ids = ref([]);
const choosList = ref([]);
const show = ref(false);
const chooseUserVisible = ref(false); //审批流程
const roleIds = ref([]); //角色id
const editFormDiloag = ref();
const searchBox = ref(); //搜索框
const btns = reactive(['一键布控','维护群体','矛盾化解','转指令','转线索','转督导','转合成','移交管控','批量导入','导出'])
const autoId = ref();
const visible = ref(false);
const visiblefp = ref(false);
const zxsDilof = ref();
const obj = ref({});
const searchConfiger = ref([
{
label: "群体名称",
prop: "groupName",
prop: "qtMc",
placeholder: "请输入群体名称",
showType: "input"
},
{
label: "群体风险等级",
prop: "riskLevel",
prop: "qtFxdj",
placeholder: "请选择群体风险等级",
showType: "select"
showType: "select",
options: D_GS_ZDQT_FXDJ
},
{
label: "监测级别",
prop: "monitorLevel",
placeholder: "请选择监测级别",
showType: "select"
},
{
label: "成员姓名",
prop: "memberName",
placeholder: "请输入成员姓名",
showType: "input"
},
{
label: "时间敏感词",
prop: "timeSensitive",
placeholder: "请输入时间敏感词",
showType: "input"
label: "重点人人员级别",
prop: "zdrRyjb",
placeholder: "请选择重点人人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "群体类别",
prop: "groupType",
prop: "qtLb",
placeholder: "请选择群体类别",
showType: "select"
showType: "select",
options: D_GS_ZDQT_LB
},
{
label: "布控状态",
prop: "bkzt",
placeholder: "请选择布控态",
showType: "select"
prop: "zdrBkZt",
placeholder: "请输入布控态",
showType: "select",
options: D_GS_ZDR_BK_ZT
},
{
label: "布控类型",
prop: "bkzt",
placeholder: "请输入布控类型",
showType: "select",
options: D_GS_BQ_LX
}
]);
const pageData = reactive({
tableData: [
{
img:'',
jbxx: "",
wkrs:'1/5'
},
],
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
@ -163,29 +184,32 @@ const pageData = reactive({
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 220,
controlsWidth: 150,
tableColumn: [
{ label: "群体基本信息", prop: "jbxx",showSolt: true },
{ label: "背景信息", prop: "bgxx",showSolt: true },
{ label: "管控信息", prop: "gkxx" ,showSolt: true },
{ label: "稳控人数", prop: "wkrs" ,showSolt: true,width:80 },
{ label: "状态", prop: "status" }
{ label: "群体基本信息", prop: "jbxx", showSolt: true,width:300 },
{ label: "背景信息", prop: "bgxx", showSolt: true,width:300 },
{ label: "管控信息", prop: "gkxx", showSolt: true,width:300 },
{ label: "稳控人数", prop: "zdryList", showSolt: true },
{ label: "状态", prop: "qtZt", showSolt: true }
]
});
const queryFrom = ref({});
onMounted(() => {
getList();
tabHeightFn();
getList();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList();
//送审
const handleSend = (id) => {
proxy.$confirm("确定要送审?", "警告", { type: "warning" }).then(() => {
qcckPost({}, "/mosty-gsxt/tbGsxtZdqt/subExamine/"+id).then(() => {
proxy.$message({ type: "success", message: "送审成功" });
getList();
});
})
};
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
@ -194,7 +218,7 @@ const onSearch = (val) => {
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
@ -203,37 +227,103 @@ const changeSize = (val) => {
};
// 获取列表
const getList = (val) => {
// pageData.tableConfiger.loading = true;
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
qcckGet(data, "/mosty-gsxt/tbGsxtZdqt/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
show.value = true;
visible.value = false;
nextTick(() => {
editFormDiloag.value.init(type, row);
});
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0)return ElMessage.error("请先选择需要布控的重点群体");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要分配的重点群体");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdqt/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
}).catch(() => { });
};
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
// 删除数据
const deleteRow = (id) =>{
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtZdqt/" + id).then(() => {
proxy.$message({ type: "success", message: "删除成功" });
getList();
});
})
}
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 250;
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({});
</script>
<style>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,403 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="重点群体审核">
<el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
<template #reference>
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请
</el-button>
</template>
<div class="flex just-center">
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)">{{it.zdmc }}</el-button>
</div>
</el-popover>
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
<template #reference>
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)">指定分配</el-button>
</template>
<div>
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
<div class="flex just-center mt10">
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
</div>
</div>
</el-popover>
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button>
<el-button type="primary" size="small" @click="addEdit('add', null)">
<el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #jbxx="{ row }">
<div class="flex">
<img src="" alt="" style="width: 80px;height: 90px;" />
<ul class="tl ml10" style="flex:1 0 0">
<li class="one_text_detail">群体名称{{ row.qtMc }}</li>
<li class="one_text_detail">群体级别{{ row.qtjb }}</li>
<li class="flex one_text_detail">风险等级
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ" />
</li>
<li class="one_text_detail">创建时间{{ row.xtCjsj }}</li>
</ul>
</div>
<div class="ww100 one_text_detail">
<el-button type="primary" size="small" v-for="(item, index) in row.bqList" :key="index">{{ item.bqMc }}</el-button>
</div>
</template>
<template #bgxx="{ row }">
<div class="flex one_text_detail">背景资料{{ row.qtBjzl }}</div>
<div class="flex one_text_detail">创建单位{{ row.xtCjbmmc }}</div>
</template>
<template #gkxx="{ row }">
<div class="flex one_text_detail">管辖单位{{ row.gxSsbmmc }}</div>
<div class="flex one_text_detail">列控原因{{ row.zdrLkyy }}</div>
<div class="flex one_text_detail">开始时间{{ row.zdrRkkssj }}</div>
<div class="flex one_text_detail">截至时间{{ row.zdrRkjssj }}</div>
</template>
<template #zdryList="{ row }">
<span style="color: #0072ff">{{ row.zdryList ? row.zdryList.length : 0 }}</span>
</template>
<template #qtZt="{ row }">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-popover placement="left" :visible="row.visible" :width="400" trigger="manual">
<template #reference>
<el-link size="small" type="warning" v-if="row.qtZt == '02'" @click="row.visible = !row.visible,chooseRow.id = row.id">审核</el-link>
</template>
<el-form :model="chooseRow" ref="elRowForm" :inline="true" label-width="100px" :rules="rules">
<el-form-item label="是否通过" prop="sftg" class="mt10 mb10" style="width: 100%;">
<MOSTY.Select filterable v-model="chooseRow.sftg" :dictEnum="D_BZ_SF" width="100%" clearable placeholder="请选择是否通过"/>
</el-form-item>
<el-form-item label="不通过原因" prop="shBtgyy" v-if="chooseRow.sftg == 0" style="width: 100%;">
<MOSTY.Other style="width: 100%;" clearable v-model="chooseRow.shBtgyy" type="textarea" placeholder="请输入不通过原因"/>
</el-form-item>
</el-form>
<div class="flex just-center mt10">
<el-button @click.stop="cancelRow(row)">取消</el-button>
<el-button type="primary" @click.stop="handleSend(row)" v-loading="btnloading">确定</el-button>
</div>
</el-popover>
<el-popover placement="left" :visible="row.visible1" :width="400" trigger="manual">
<template #reference>
<el-link size="small" type="primary" v-if="row.qtZt == '04'" @click="row.visible1 = !row.visible1,chooseRow.id = row.id">审批</el-link>
</template>
<el-form :model="chooseRow" ref="elRowForm1" :inline="true" label-width="100px" :rules="rules">
<el-form-item label="是否通过" prop="sftg" class="mt10 mb10" style="width: 100%;">
<MOSTY.Select filterable v-model="chooseRow.sftg" :dictEnum="D_BZ_SF" width="100%" clearable placeholder="请选择是否通过"/>
</el-form-item>
<el-form-item label="不通过原因" prop="spBtgyy" v-if="chooseRow.sftg == 0" style="width: 100%;">
<MOSTY.Other style="width: 100%;" clearable v-model="chooseRow.spBtgyy" type="textarea" placeholder="请输入不通过原因"/>
</el-form-item>
</el-form>
<div class="flex just-center mt10">
<el-button @click.stop="cancelRowSp(row)">取消</el-button>
<el-button type="primary" @click.stop="handleSendSp(row)" v-loading="btnloading">确定</el-button>
</div>
</el-popover>
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<!-- 编辑 - 新增-->
<EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
<!-- 选择用户 -->
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" /> <!-- 转线索 -->
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{ D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX }"></ZxsForm>
</div>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import ZxsForm from "../mpvGroup/components/zxsForm.vue";
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import EditForm from "../mpvGroup/components/addForm.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { ElMessage } from "element-plus";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_ZDR_CZZT,D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT","D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
const showzxs = ref(false);
const btnloading = ref(false)
const queryFrom = ref({});
const chooseRow = ref({})
const ids = ref([]);
const elRowForm = ref()
const elRowForm1 = ref()
const choosList = ref([]);
const show = ref(false);
const chooseUserVisible = ref(false); //审批流程
const roleIds = ref([]); //角色id
const editFormDiloag = ref();
const searchBox = ref(); //搜索框
const visible = ref(false);
const visiblefp = ref(false);
const zxsDilof = ref();
const obj = ref({});
const rules = reactive({
sftg: [{ required: true, message: "请选择是否通过", trigger: "change" }],
shBtgyy: [{ required: true, message: "请输入不通过原因", trigger: "blur" }],
spBtgyy: [{ required: true, message: "请输入不通过原因", trigger: "blur" }]
});
const searchConfiger = ref([
{
label: "群体名称",
prop: "qtMc",
placeholder: "请输入群体名称",
showType: "input"
},
{
label: "群体风险等级",
prop: "qtFxdj",
placeholder: "请选择群体风险等级",
showType: "select",
options: D_GS_ZDQT_FXDJ
},
{
label: "重点人人员级别",
prop: "zdrRyjb",
placeholder: "请选择重点人人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "群体类别",
prop: "qtLb",
placeholder: "请选择群体类别",
showType: "select",
options: D_GS_ZDQT_LB
},
{
label: "布控状态",
prop: "zdrBkZt",
placeholder: "请输入布控装态",
showType: "select",
options: D_GS_ZDR_BK_ZT
},
{
label: "布控类型",
prop: "bkzt",
placeholder: "请输入布控类型",
showType: "select",
options: D_GS_BQ_LX
}
]);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 150,
tableColumn: [
{ label: "群体基本信息", prop: "jbxx", showSolt: true,width:300 },
{ label: "背景信息", prop: "bgxx", showSolt: true,width:300 },
{ label: "管控信息", prop: "gkxx", showSolt: true,width:300 },
{ label: "稳控人数", prop: "zdryList", showSolt: true },
{ label: "状态", prop: "qtZt", showSolt: true }
]
});
onMounted(() => {
tabHeightFn();
getList();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value,qtZt:'02' };
qcckGet(data, "/mosty-gsxt/tbGsxtZdqt/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
const cancelRow = (row) => {
row.visible = false;
chooseRow.value = {};
btnloading.value = false;
elRowForm.value.resetFields()
};
// 审核
const handleSend = (val) =>{
elRowForm.value.validate((valid) => {
if(!valid) return;
btnloading.value = true;
qcckPost(chooseRow.value, "/mosty-gsxt/tbGsxtZdqt/toExamine").then(() => {
proxy.$message({ type: "success", message: "审核成功" });
val.visible = false;
btnloading.value = false;
chooseRow.value = {};
getList();
}).catch(()=>{
btnloading.value = false;
});
})
}
// 审批
const cancelRowSp = (row) =>{
row.visible1 = false;
chooseRow.value = {};
btnloading.value = false;
elRowForm1.value.resetFields()
}
// 审批
const handleSendSp = () =>{
elRowForm1.value.validate((valid) => {
if(!valid) return;
btnloading.value = true;
qcckPost(chooseRow.value, "/mosty-gsxt/tbGsxtZdqt/audits").then(() => {
proxy.$message({ type: "success", message: "审批成功" });
val.visible1 = false;
btnloading.value = false;
chooseRow.value = {};
getList();
}).catch(()=>{
btnloading.value = false;
});
})
}
// 详情
const addEdit = (type, row) => {
show.value = true;
visible.value = false;
nextTick(() => {
editFormDiloag.value.init(type, row);
});
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0)return ElMessage.error("请先选择需要布控的重点群体");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要分配的重点群体");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdqt/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
}).catch(() => { });
};
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({});
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,99 +1,364 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">重点群体管理 </span>
<span class="title">{{ title }}重点管理</span>
<div>
<el-button type="primary" size="small" :loading="loading" @click="submit" >保存</el-button>
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage :formList="formData" ref="elform" :rules="rules"></FormMessage>
<FormMessage :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform"
:rules="rules"></FormMessage>
<div class="ml50 mr50">
<span class="mr10">人员标签模型 : </span><el-button type="primary" v-if="!disabled"
@click="chooseMarksVisible = true">选择</el-button>
</div>
<div class="boxlist ml50 mr50">
<MyTable :tableData="listQuery.bqList" :tableColumn="tableDate.tableColumn" :key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger" :controlsWidth="tableDate.controlsWidth">
<template #bqLb="{ row }">
<DictTag :value="row.bqLb" :tag="false" :options="props.dic.D_GS_BQ_LB" />
</template>
<template #bqLx="{ row }">
<DictTag :value="row.bqLx" :tag="false" :options="props.dic.D_GS_BQ_LX" />
</template>
<template #bqZl="{ row }">
<DictTag :value="row.bqZl" :tag="false" :options="props.dic.D_GS_BQ_ZL" />
</template>
<template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.bqId)">删除</el-link>
</template>
</MyTable>
</div>
<!-- 选择审核人 -->
<div class="ww100 mt20 ml50 mr50">
<el-steps direction="vertical" :active="listQuery.wccz" space="500" finish-status="success">
<el-step title="发起申请">
<template #description>
<div class="flex align-center ww100 mt10 mb20">
<el-input v-model="listQuery.sqrXm" readonly class="ww20"></el-input>
<el-input v-model="listQuery.sqrSsbmmc" readonly class="ww20 ml10 mr10"></el-input>
<span class="f12" style="color: #333333">
备注发起人和部门根据登陆人自动填写</span>
</div>
</template>
</el-step>
<el-step title="审核确认">
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span class="mr4">审核部门 : </span>
<MOSTY.Department @getDepValue="getShdep" v-model="listQuery.shSsbmdm" clearable :placeholder="listQuery.shSsbmmc ? listQuery.shSsbmmc : ''" />
</div>
</template>
</el-step>
<el-step title="审批确认">
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span lass="mr4">审批部门 : </span>
<MOSTY.Department @getDepValue="getSPdep" v-model="listQuery.spSsbmdm" clearable :placeholder="listQuery.spSsbmmc ? listQuery.spSsbmmc : ''" />
</div>
</template>
</el-step>
</el-steps>
</div>
</div>
</div>
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
</template>
<script setup>
import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
import * as MOSTY from "@/components/MyComponents/index";
import { getItem } from "@/utils/storage";
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import {
ref,
defineExpose,
reactive,
onMounted,
defineEmits,
getCurrentInstance,
watch
} from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const roleIds = ref([]);
const chooseMarksVisible = ref(false);
const dialogForm = ref(false); //弹窗
const formData = ref([
{ label: "姓名", prop: "xm", type: "input", },
{ label: "身份证号", prop: "sfzh", type: "input" },
{ label: "户籍地", prop: "hjd", type: "input"},
{ label: "户籍地派出所", prop: "hjdpcs", type: "input" },
{ label: "入库开始时间", prop: "kssj", type: "datetime"},
{ label: "入库结束时间", prop: "jssj", type: "datetime"},
{ label: "人员级别", prop: "ryjb", type: "select",options:[] },
{ label: "所属警种", prop: "ssjz", type: "input" },
{ label: "管辖单位", prop: "gxdw", type: "input" },
{ label: "涉及警种", prop: "sjjz", type: "input" },
{ label: "管控民警姓名", prop: "njxm", type: "input" },
{ label: "管控民警警号", prop: "mjjh", type: "input" },
{ label: "管控原因", prop: "gkyy", type: "textarea",width: '100%' },
{ label: "被管控人联系方式", prop: "lxfs", type: "input",},
{ label: "责任单位", prop: "zedw", type: "input",},
{ label: "人员标签大类", prop: "bqdl", type: "select",options:[]},
{ label: "人员标签细类", prop: "bqxl", type: "select",options:[]},
]);
const listQuery = ref({
sfbqdj: []
}); //表单
const pcsList = ref([]);
const rules = reactive({
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
...rule.identityCardRule({ validator: true },'rySfzh'), //身份证校验
...rule.phoneRule({ validator: true }, "ryLxdh"), // 是否必填 是否进行校验,
ryXb: [{ required: true, message: "请选择性别", trigger: "change" }],
ryMz: [{ required: true, message: "请选择民族", trigger: "change" }],
ryCsrq: [{ required: true, message: "请选择出生日期", trigger: "change" }],
ryJg: [{ required: true, message: "请选择籍贯", trigger: "change" }],
zdrRyjb: [{ required: true, message: "请选择人员级别", trigger: "change" }],
zdrYjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }]
});
const listQuery = ref({}); //表单
const formData = ref([]);
watch(() => props.dic,(val) => {
formData.value = [
{ label: "姓名", prop: "ryXm", type: "input" },
{
label: "性别",
prop: "ryXb",
type: "select",
options: props.dic.D_BZ_XB
},
{
label: "民族",
prop: "ryMz",
type: "select",
options: props.dic.D_BZ_MZ
},
{ label: "身份证号", prop: "rySfzh", type: "input" },
{ label: "联系电话", prop: "ryLxdh", type: "input" },
{ label: "出生日期", prop: "ryCsrq", type: "date" },
{
label: "籍贯",
prop: "ryJg",
type: "select",
options: props.dic.D_BZ_XZQHDM
},
{
label: "人员级别",
prop: "zdrRyjb",
type: "select",
options: props.dic.D_GS_ZDR_RYJB
},
{
label: "预警等级",
prop: "zdrYjdj",
type: "select",
options: props.dic.D_GS_ZDR_YJDJ
},
{
label: "户籍地区划",
prop: "hjdQh",
type: "select",
options: props.dic.D_BZ_XZQHDM
},
{ label: "户籍地详址", prop: "hjdXz", type: "input" },
{
label: "户籍地派出所",
prop: "hjdPcsdm",
type: "select",
options: pcsList
},
{
label: "现住地区划",
prop: "xzdQh",
type: "select",
options: props.dic.D_BZ_XZQHDM
},
{ label: "现住地详址", prop: "xzdXz", type: "input" },
{
label: "现住地派出所",
prop: "xzdPcsdm",
type: "select",
options: pcsList
},
{ label: "管辖单位", prop: "gxSsbmdm",depMc:'gxSsbmmc', type: "department" },
{ label: "诉求单位", prop: "sqSsbmdm",depMc:'sqSsbmmc', type: "department" },
{ label: "责任单位", prop: "zrSsbmdm",depMc:'zrSsbmmc', type: "department" },
{
label: "所属警种",
prop: "zdrSsjz",
type: "select",
options: props.dic.D_GS_BK_SSJZ
},
{
label: "涉及警种",
prop: "zdrSjjz",
type: "select",
options: props.dic.D_GS_BK_SSJZ,
multiple: true
},
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
{ label: "管控原因", prop: "zdrLkyy", type: "textarea", width: "100%" },
{
label: "处置状态",
prop: "zdrCzzt",
type: "select",
options: props.dic.D_GS_ZDR_CZZT
},
{ label: "入库开始时间", prop: "zdrRkkssj", type: "datetime" },
{ label: "入库结束时间", prop: "zdrRkjssj", type: "datetime" }
];
},
{ immediate: true, deep: true }
);
const tableDate = reactive({
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
controlsWidth: 90, //操作栏宽度
keyCount: 0,
tableColumn: [
{ label: "标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" },
{ label: "标签种类", prop: "bqZl", showSolt: true },
{ label: "标签类型", prop: "bqLx", showSolt: true },
{ label: "标签类别", prop: "bqLb", showSolt: true }
]
});
const loading = ref(false);
const elform = ref();
const title = ref("");
const rules = reactive({
xsbt: [{ required: true, message: "请输入线索标题", trigger: "blur" }]
const showInfo = ref(false);
const disabled = ref(false);
onMounted(() => {
chooseDep();
});
const editpeo = ref();
onMounted(() => {});
const chooseDep = () => {
qcckPost({ orgLevel: 40 }, "/mosty-base/deptFeign/queryListByDept").then(
(res) => {
pcsList.value = res.map((item) => {
return { zdmc: item.orgName, dm: item.orgCode, value: item.orgCode };
});
}
);
};
// 初始化数据
const init = (type, row,) => {
const init = (type, row) => {
dialogForm.value = true;
title.value = type == 'add' ? "新增" : "编辑";
title.value = type == "add" ? "新增" : type == "detail" ? "详情" : "编辑";
disabled.value = type == "detail" ? true : false;
tableDate.tableConfiger.haveControls = type == "detail" ? false : true;
if (type == "add") {
listQuery.value.sqrXm = getItem("USERNAME");
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
listQuery.value.sqrSsbmmc = getItem("deptId")[0].deptName;
listQuery.value.sqrSsbmdm = getItem("deptId")[0].deptCode;
}
setTimeout(() => {
showInfo.value = true;
}, 5);
if (row) getDataById(row.id);
};
// 根据id查询详情
const getDataById = (id) => {
// qcckGet({}, '/mosty-gsxt/tbGsxtBqgl/'+id).then((res) => {
// listQuery.value = res;
// });
qcckGet({}, "/mosty-gsxt/tbGsxtZdry/selectVoById/" + id).then((res) => {
listQuery.value = res;
listQuery.value.zdrSjjz = listQuery.value.zdrSjjz.split(",");
tableDate.bqList = res.bqList;
listQuery.value.sqrXm = getItem("USERNAME");
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
listQuery.value.sqrSsbmmc = getItem("deptId")[0].deptName;
listQuery.value.sqrSsbmdm = getItem("deptId")[0].deptCode;
});
};
// 选择标签
const choosed = (val) => {
listQuery.value.bqList = val.map((v) => {
return { bqZl: v.bqLb, bqId: v.id, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm };
});
roleIds.value = val.map((v) => v.id);
};
// 删除
const delDictItem = (bqId) => {
listQuery.value.bqList = listQuery.value.bqList.filter((v) => v.bqId != bqId);
tableDate.keyCount++;
};
// 提交
const submit = () => {
elform.value.submit((data)=>{
// let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update';
// let params = { ...data }
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value + "成功" });
// emit("updateDate");
// close();
// }).catch(() => {});
elform.value.submit((data) => {
data.zdrSjjz = data.zdrSjjz.join(",");
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdry/save" : "/mosty-gsxt/tbGsxtZdry/update";
let params = { ...data };
if (params.hjdPcsdm) {
let obj = pcsList.value.find((v) => v.dm == params.hjdPcsdm);
params.hjdPcsmc = obj ? obj.zdmc : "";
}
if (params.xzdPcsdm) {
let obj1 = pcsList.value.map((v) => v.dm == params.xzdPcsdm);
params.xzdPcsmc = obj1 ? obj1.zdmc : "";
}
loading.value = true;
qcckPost(params, url).then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => {
loading.value = false;
});
});
};
const getShdep = (val) =>{
listQuery.value.shSsbmmc = val ? val.orgName : ''
}
const getSPdep = (val) =>{
listQuery.value.spSsbmmc = val ? val.orgName : ''
}
// 关闭
const close = () => {
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
color: #0072ff;
background: rgba(0, 114, 255, 0.3);
}
.boxlist {
width: calc(99% - 50px);
margin-top: 10px;
overflow: hidden;
}
.depBox {
border: 1px solid #e9e9e9;
width: 305px;
padding: 0 0 0 4px;
border-radius: 4px;
::v-deep .el-input__inner {
border: none;
}
::v-deep .el-cascader .el-input.is-focus .el-input__inner {
border-color: transparent !important;
}
::v-deep .el-input__inner:focus {
box-shadow: none;
}
::v-deep .el-input.is-disabled .el-input__inner {
border-color: transparent !important;
}
}
</style>

View File

@ -0,0 +1,228 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">流线索</span>
<div>
<el-button type="primary" :loading="loading" @click="submit">保存</el-button>
<el-button @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #gapdive>
<div style="width: 100%; height: 10px" class="mb20">
<el-divider content-position="left">基础信息</el-divider>
</div>
</template>
<template #gapline>
<div style="width: 100%; height: 10px" class="mb20">
<el-divider content-position="left">线索内容</el-divider>
</div>
</template>
<template #scfj>
<div style="width: 100%; padding-left: 50px">
<div>
上传附件:<span class="f12">可附电子表格Word文档图像音视频文件</span>
</div>
<div>
<MOSTY.Upload :showBtn="true" :limit="10" v-model="fjdz" />
</div>
</div>
</template>
</FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span>
</el-divider>
<MyTable :tableData="pageForm.tableData" :tableColumn="pageForm.tableColumn" :tableHeight="pageForm.tableHeight"
:key="pageForm.keyCount" :tableConfiger="pageForm.tableConfiger" :controlsWidth="pageForm.controlsWidth">
<template #xb="{ row }">
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
</template>
<template #bqList="{ row }">
<div v-if="row.bqList">
<el-tag type="success" v-for="(it, idx) in row.bqList" :key="idx">{{
it.bqMc
}}</el-tag>
</div>
</template>
</MyTable>
</div>
</div>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckPost } from "@/api/qcckApi.js";
import {
ref,
defineExpose,
reactive,
onMounted,
defineEmits,
getCurrentInstance,
nextTick
} from "vue";
const emit = defineEmits(["change"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const rules = reactive({
xsMc: [{ required: true, message: "请输入线索名称", trigger: "blur" }],
xlLx: [{ required: true, message: "请选择线索类型", trigger: "change" }],
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }]
});
const formData = ref([
{ prop: "gapdive", type: "slot", width: "100%" },
{ label: "线索名称", prop: "xsMc", type: "input" },
{
label: "线索类型",
prop: "xlLx",
type: "select",
options: props.dic.D_GS_XS_LX
},
{
label: "情报来源",
prop: "qbLy",
type: "select",
options: props.dic.D_GS_XS_LY
},
{ label: "指向开始时间", prop: "zxkssj", type: "datetime" },
{ label: "指向结束时间", prop: "zxjssj", type: "datetime" },
{ label: "指向地点", prop: "zxdz", type: "input" },
{
label: "所属专题",
prop: "sszt",
type: "select",
options: props.dic.D_BZ_SSZT
},
{ prop: "gapline", type: "slot", width: "100%" },
{ prop: "scfj", type: "slot", width: "100%" },
{ label: "线索内容", prop: "xsNr", type: "textarea", width: "100%" },
{
label: "群体类型",
prop: "qtlx",
type: "select",
options: props.dic.D_GS_XS_QTLX
},
{ label: "群体名称", prop: "qtmc", type: "input" },
{ label: "涉及人数", prop: "sjrs", type: "inputNumber" },
{ label: "线索报送单位", prop: "ssbmdm", type: "department" }
]);
const fjdz = ref();
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const pageForm = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false,
haveControls: false
},
controlsWidth: 220,
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb", showSolt: true },
{ label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bqList", showSolt: true }
]
});
onMounted(() => {
tabHeightFn();
});
// 初始化数据
const init = (list) => {
fjdz.value = [];
tabHeightFn();
dialogForm.value = true;
pageForm.tableData = list.map((it) => {
return {
xm: it.ryXm,
xb: it.ryXb,
sfzh: it.rySfzh,
hjdz: it.xzdXz,
hjdpcs: it.hjdPcsmc,
hjdpcsdm: it.hjdPcsdm,
bqList: it.bqList || []
};
});
pageForm.keyCount++;
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let params = { ...data, ryList: pageForm.tableData, cjLx: "0" };
params.fjdz = fjdz.value.length > 0 ? fjdz.value.join(",") : "";
loading.value = true;
qcckPost(params, "/mosty-gsxt/qbcj/add")
.then((res) => {
loading.value = false;
proxy.$message({ type: "success", message: "成功" });
emit("change");
close();
})
.catch(() => {
loading.value = false;
});
});
};
// 关闭
const close = () => {
fjdz.value = [];
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
// 表格高度计算
const tabHeightFn = () => {
pageForm.tableHeight = window.innerHeight - 720;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
color: #0072ff;
background: rgba(0, 114, 255, 0.3);
}
.boxlist {
width: 99%;
height: 225px;
margin-top: 10px;
overflow: hidden;
}
::v-deep .avatar-uploader {
display: flex;
align-items: center;
}
::v-deep .el-upload-list {
margin-left: 20px;
display: flex;
align-items: center;
}
::v-deep .el-upload-list__item-name .el-icon {
top: 3px;
}
</style>

View File

@ -2,24 +2,38 @@
<div>
<div class="titleBox">
<PageTitle title="重点人管理">
<el-button type="primary" size="small" v-for="it in btns" :key="it"> {{ it }}</el-button>
<el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
<template #reference>
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请</el-button>
</template>
<div class="flex just-center">
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)" >{{ it.zdmc }}</el-button>
</div>
</el-popover>
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
<template #reference>
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)" >指定分配</el-button>
</template>
<div>
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
<div class="flex just-center mt10">
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
</div>
</div>
</el-popover>
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button>
<el-button type="primary" size="small" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
<el-button type="danger" size="small" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><Dete /></el-icon>
<span style="vertical-align: middle">批量删除</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
/>
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<!-- 表格 -->
<div class="tabBox">
@ -32,41 +46,49 @@
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #ryxx>
<div>
<img src="" alt="">
<ul>
<li>姓名</li>
<li>性别</li>
<li>籍贯</li>
<li>身份证</li>
<li>出生日期</li>
<li>民族</li>
</ul>
</div>
<div class="flex">
<el-button type="primary" size="small"> 涉恐人员</el-button>
<el-button type="primary" size="small"> 涉稳人员</el-button>
<el-button type="primary" size="small"> 在逃人员</el-button>
</div>
</template>
<template #jzxx="{row}">
<div>户籍地区化</div>
<div>户籍派出所</div>
<div>户籍地详址</div>
</template>
<template #gxdw="{row}">
<div>管辖单位</div>
<div>人类类别</div>
<div>人员级别</div>
<div>管控原因</div>
<div>管控状态</div>
</template>
<template #ryxx="{ row }">
<div class="flex">
<img src="" alt="" style="width: 80px;height: 90px;" />
<ul class="tl ml10" style="flex:1 0 0">
<li class="one_text_detail">姓名{{ row.ryXm }}</li>
<li class="flex one_text_detail">性别<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" /></li>
<li class="flex one_text_detail">籍贯<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM"/></li>
<li class="one_text_detail">身份证{{ row.rySfzh }}</li>
<li class="one_text_detail">出生日期{{ row.ryCsrq }}</li>
<li class="flex one_text_detail">民族<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" /></li>
</ul>
</div>
<div class="ww100 one_text_detail">
<el-button :key="index" type="primary" size="small" v-for="(item, index) in row.bqList">{{ item.bqMc }}</el-button>
</div>
</template>
<template #jzxx="{ row }">
<div class="flex one_text_detail">户籍地区划<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" /></div>
<div class="flex one_text_detail">户籍派出所{{ row.hjdPcsmc }}</div>
<div class="flex one_text_detail">户籍地详址{{ row.hjdXz }}</div>
</template>
<template #gxdw="{ row }">
<div class="flex one_text_detail">管辖单位{{ row.gxSsbmmc }}</div>
<div class="flex">人员级别<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB"/> </div>
<div class="flex one_text_detail">管控原因{{ row.zdrLkyy }}</div>
<div class="flex">管控状态<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" /></div>
</template>
<template #zdrCzzt="{ row }">
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
</template>
<template #zdrZt="{ row }">
<DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" />
</template>
<template #xtSjzt="{ row }">
<div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="primary">查看</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
<el-link size="small" type="success" v-if="row.zdrZt == '01'" @click="handleSend(row.id)">送审</el-link>
<el-link size="small" type="primary" v-if="row.zdrZt == '01'" @click="addEdit('edit', row)" >编辑</el-link>
<el-link size="small" type="primary" @click="addEdit('detail', row)" >详情</el-link>
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
</template>
</MyTable>
<Pages
@ -80,57 +102,75 @@
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
<!-- 选择用户 -->
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/>
<!-- 转线索 -->
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX,D_GS_XS_QTLX }"></ZxsForm>
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
import ZxsForm from "./components/zxsForm.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/addForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import AddForm from "./components/addForm.vue";
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_ZDR_YJDJ","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX");
const obj = ref({});
const showzxs = ref(false);
const zxsDilof = ref();
const show = ref(false);
const addFormDiloag = ref();
const searchBox = ref(); //搜索框
const btns = reactive(['一键布控','维护群体','矛盾化解','转指令','转线索','转督导','转合成','移交管控','批量导入','导出'])
const chooseUserVisible = ref(false); //审批流程
const ids = ref([]);
const choosList = ref([]);
const visible = ref(false);
const visiblefp = ref(false);
const searchConfiger = ref([
{
label: "姓名",
prop: "Name",
prop: "ryXm",
placeholder: "请输入姓名",
showType: "input"
},
{
label: "身份证",
prop: "sfz",
prop: "rySfzh",
placeholder: "请输入身份证",
showType: "input"
},
{
label: "人员标签大类",
prop: "bqdl",
placeholder: "请选择人员标签大类",
showType: "select"
label: "户籍地",
prop: "hjdXz",
placeholder: "请输入户籍地",
showType: "input"
},
{
label: "人员标签细类",
prop: "bqxl",
placeholder: "请选择人员标签细类",
showType: "select"
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{
img:'',
jbxx: "",
wkrs:'1/5'
},
],
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
@ -142,29 +182,22 @@ const pageData = reactive({
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 220,
controlsWidth: 150,
tableColumn: [
{ label: "重点人员信息", prop: "ryxx",showSolt: true },
{ label: "户籍居住信息", prop: "jzxx",showSolt: true },
{ label: "管辖单位", prop: "gxdw" ,showSolt: true },
{ label: "处置状态", prop: "czzt"},
{ label: "状态", prop: "status" }
{ label: "重点人员信息", prop: "ryxx", showSolt: true,width:300,showOverflowTooltip:true },
{ label: "户籍居住信息", prop: "jzxx", showSolt: true,width:300, },
{ label: "管辖单位", prop: "gxdw", showSolt: true,width:300, },
{ label: "处置状态", prop: "zdrCzzt", showSolt: true },
{ label: "状态", prop: "xtSjzt", showSolt: true },
{ label: "审核状态", prop: "zdrZt", showSolt: true },
]
});
const queryFrom = ref({});
onMounted(() => {
getList();
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList();
};
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
@ -173,7 +206,7 @@ const onSearch = (val) => {
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
@ -182,37 +215,116 @@ const changeSize = (val) => {
};
// 获取列表
const getList = (val) => {
// pageData.tableConfiger.loading = true;
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 详情
//送审
const handleSend = (id) => {
proxy.$confirm("确定要送审?", "警告", { type: "warning" }).then(() => {
qcckPost({id}, "/mosty-gsxt/tbGsxtZdry/subSh").then(() => {
proxy.$message({ type: "success", message: "送审成功" });
getList();
});
})
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
// 处理分配
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
});
};
// 转线索
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
//删除操作
const deleteRow = (id) => {
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtZdry/" + id).then((res) => {
ElMessage.success("删除成功");
getList();
});
});
};
//新增编辑
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
show.value = true;
nextTick(()=>{
addFormDiloag.value.init(type, row);
})
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 250;
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,394 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="重点人审批">
<el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
<template #reference>
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请</el-button>
</template>
<div class="flex just-center">
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)" >{{ it.zdmc }}</el-button>
</div>
</el-popover>
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
<template #reference>
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)" >指定分配</el-button>
</template>
<div>
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
<div class="flex just-center mt10">
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
</div>
</div>
</el-popover>
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #ryxx="{ row }">
<div class="flex">
<img src="" alt="" style="width: 80px;height: 90px;" />
<ul class="tl ml10" style="flex:1 0 0">
<li class="one_text_detail">姓名{{ row.ryXm }}</li>
<li class="flex one_text_detail">性别<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" /></li>
<li class="flex one_text_detail">籍贯<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM"/></li>
<li class="one_text_detail">身份证{{ row.rySfzh }}</li>
<li class="one_text_detail">出生日期{{ row.ryCsrq }}</li>
<li class="flex one_text_detail">民族<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" /></li>
</ul>
</div>
<div class="ww100 one_text_detail">
<el-button :key="index" type="primary" size="small" v-for="(item, index) in row.bqList">{{ item.bqMc }}</el-button>
</div>
</template>
<template #jzxx="{ row }">
<div class="flex one_text_detail">户籍地区划<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" /></div>
<div class="flex one_text_detail">户籍派出所{{ row.hjdPcsmc }}</div>
<div class="flex one_text_detail">户籍地详址{{ row.hjdXz }}</div>
</template>
<template #gxdw="{ row }">
<div class="flex one_text_detail">管辖单位{{ row.gxSsbmmc }}</div>
<div class="flex">人员级别<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB"/> </div>
<div class="flex one_text_detail">管控原因{{ row.zdrLkyy }}</div>
<div class="flex">管控状态<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" /></div>
</template>
<template #zdrCzzt="{ row }">
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
</template>
<template #xtSjzt="{ row }">
<div> {{ row.xtSjzt == 0 ? "注销" : row.xtSjzt == 1 ? "正常" : "封存" }}</div>
</template>
<template #zdrZt="{ row }">
<DictTag :tag="false" :value="row.zdrZt" :options="D_GS_ZDQT_ZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-popover placement="left" :visible="row.visible" :width="400" trigger="manual">
<template #reference>
<el-link size="small" type="warning" v-if="row.zdrZt == '02'" @click="row.visible = !row.visible,chooseRow.id = row.id">审核</el-link>
</template>
<el-form :model="chooseRow" ref="elRowForm" :inline="true" label-width="100px" :rules="rules">
<el-form-item label="是否通过" prop="sftg" class="mt10 mb10" style="width: 100%;">
<MOSTY.Select filterable v-model="chooseRow.sftg" :dictEnum="D_BZ_SF" width="100%" clearable placeholder="请选择是否通过"/>
</el-form-item>
<el-form-item label="不通过原因" prop="shBtgyy" v-if="chooseRow.sftg == 0" style="width: 100%;">
<MOSTY.Other style="width: 100%;" clearable v-model="chooseRow.shBtgyy" type="textarea" placeholder="请输入不通过原因"/>
</el-form-item>
</el-form>
<div class="flex just-center mt10">
<el-button @click.stop="cancelRow(row)">取消</el-button>
<el-button type="primary" @click.stop="handleSend(row)" v-loading="btnloading">确定</el-button>
</div>
</el-popover>
<el-popover placement="left" :visible="row.visible1" :width="400" trigger="manual">
<template #reference>
<el-link size="small" type="primary" v-if="row.zdrZt == '04'" @click="row.visible1 = !row.visible1,chooseRow.id = row.id">审批</el-link>
</template>
<el-form :model="chooseRow" ref="elRowForm1" :inline="true" label-width="100px" :rules="rules">
<el-form-item label="是否通过" prop="sftg" class="mt10 mb10" style="width: 100%;">
<MOSTY.Select filterable v-model="chooseRow.sftg" :dictEnum="D_BZ_SF" width="100%" clearable placeholder="请选择是否通过"/>
</el-form-item>
<el-form-item label="不通过原因" prop="spBtgyy" v-if="chooseRow.sftg == 0" style="width: 100%;">
<MOSTY.Other style="width: 100%;" clearable v-model="chooseRow.spBtgyy" type="textarea" placeholder="请输入不通过原因"/>
</el-form-item>
</el-form>
<div class="flex just-center mt10">
<el-button @click.stop="cancelRowSp(row)">取消</el-button>
<el-button type="primary" @click.stop="handleSendSp(row)" v-loading="btnloading">确定</el-button>
</div>
</el-popover>
<el-link size="small" type="primary" @click="addEdit('detail', row)" >详情</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
<!-- 选择用户 -->
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/>
<!-- 转线索 -->
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX,D_GS_XS_QTLX }"></ZxsForm>
</div>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import { ElMessage } from "element-plus";
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
import ZxsForm from "../mpvPeo/components/zxsForm.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import AddForm from "../mpvPeo/components/addForm.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_ZDR_YJDJ","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX");
const obj = ref({});
const showzxs = ref(false);
const zxsDilof = ref();
const show = ref(false);
const addFormDiloag = ref();
const searchBox = ref(); //搜索框
const chooseUserVisible = ref(false); //审批流程
const ids = ref([]);
const choosList = ref([]);
const visible = ref(false);
const visiblefp = ref(false);
const chooseRow = ref({})
const btnloading = ref(false)
const elRowForm = ref()
const elRowForm1 = ref()
const rules = reactive({
sftg: [{ required: true, message: "请选择是否通过", trigger: "change" }],
shBtgyy: [{ required: true, message: "请输入不通过原因", trigger: "blur" }],
spBtgyy: [{ required: true, message: "请输入不通过原因", trigger: "blur" }]
});
const searchConfiger = ref([
{
label: "姓名",
prop: "ryXm",
placeholder: "请输入姓名",
showType: "input"
},
{
label: "身份证",
prop: "rySfzh",
placeholder: "请输入身份证",
showType: "input"
},
{
label: "户籍地",
prop: "hjdXz",
placeholder: "请输入户籍地",
showType: "input"
},
{
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "人员级别",
prop: "zdrRyjb",
placeholder: "请输入人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 200,
tableColumn: [
{ label: "重点人员信息", prop: "ryxx", showSolt: true,width:300,showOverflowTooltip:true },
{ label: "户籍居住信息", prop: "jzxx", showSolt: true,width:300, },
{ label: "管辖单位", prop: "gxdw", showSolt: true,width:300, },
{ label: "处置状态", prop: "zdrCzzt", showSolt: true },
{ label: "状态", prop: "xtSjzt", showSolt: true },
{ label: "审核状态", prop: "zdrZt", showSolt: true },
]
});
onMounted(() => {
getList();
tabHeightFn();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value,zdrZt:'02' };
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addBksq").then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
}).catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
// 处理分配
const handlefp = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
}).catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要移交管控的重点群体");
proxy.$confirm("是否确定移交?", "警告", { type: "warning" }).then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdry/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
});
};
// 转线索
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
const cancelRow = (row) => {
row.visible = false;
chooseRow.value = {};
btnloading.value = false;
elRowForm.value.resetFields()
};
// 审核
const handleSend = (val) =>{
elRowForm.value.validate((valid) => {
if(!valid) return;
btnloading.value = true;
qcckPost(chooseRow.value, "/mosty-gsxt/tbGsxtZdry/updateSh").then(() => {
proxy.$message({ type: "success", message: "审核成功" });
cancelRow(val)
getList();
}).catch(()=>{
btnloading.value = false;
});
})
}
// 审批
const cancelRowSp = (row) =>{
row.visible1 = false;
chooseRow.value = {};
btnloading.value = false;
elRowForm1.value.resetFields()
}
// 审批
const handleSendSp = (val) =>{
elRowForm1.value.validate((valid) => {
if(!valid) return;
btnloading.value = true;
qcckPost(chooseRow.value, "/mosty-gsxt/tbGsxtZdry/updateSp").then(() => {
proxy.$message({ type: "success", message: "审批成功" });
cancelRowSp(val);
getList();
}).catch(()=>{
btnloading.value = false;
});
})
}
//新增编辑
const addEdit = (type, row) => {
show.value = true;
nextTick(()=>{
addFormDiloag.value.init(type, row);
})
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,175 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">智能采集设备信息{{ title }}</span>
<div>
<el-button type="primary" v-if="title != '详情'" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="视频设备代码">
<el-input v-model="listQuery.sbbh" placeholder="011022"/>
</el-form-item>
<el-form-item label="设备名称">
<el-input v-model="listQuery.sbmc" placeholder="设备1"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="品牌型号">
<el-input v-model="listQuery.ppxh" placeholder="xxxxxx"/>
</el-form-item>
<el-form-item label="IP地址">
<el-input v-model="listQuery.ip" placeholder="58.1265.5545.20"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="网络端口号">
<el-input v-model="listQuery.wldkh" placeholder="100"/>
</el-form-item>
<el-form-item label="行政区划">
<el-input v-model="listQuery.xzqh" placeholder="巴宜区纺织路派出所"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="设备工作状态">
<el-input v-model="listQuery.sbgzzt" placeholder="正常工作"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="经度">
<el-input v-model="listQuery.jd" placeholder="101.3235165515"/>
</el-form-item>
<el-form-item label="纬度">
<el-input v-model="listQuery.wd" placeholder="28.132132156"/>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
list: [
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
]
});
const areaOptions = ref([]); // 区域选项数据
// 提交
const submit = ()=>{
elform.value.validate((valid) => {
if (!valid) return false;
// loading.value = true;
let params = { ...listQuery.value}
let url = title.value == '新增' ? '/mosty-lzcj/tbDwYy/insert' :'/mosty-lzcj/tbDwYy/update'
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value+'成功'});
// close()
// emit("updateDate",modelLx.value);
// }).catch(()=>{
// loading.value = false;
// });
});
}
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
title.value = type == 'add' ? '新增' : type == 'eidt' ? '编辑' : '详情'
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.labelTileile{
background-color: #F7FAFB;
border: 1px solid #E3E7ED;
line-height: 30px;
padding-left: 8px;
// text-align: center;
margin-top: 10px;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,162 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="智能采集设备信息">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('eidt', row)">编辑</el-button>
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small" @click="delDictItem([row.id])" type="danger">删除</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "场所名称", showType: "input" },
{ label: "行政区划", prop: 'xzqh', placeholder: "行政区划", showType: "input" },
{ label: "设备工作状态", prop: 'sbgzzt', placeholder: "设备工作状态", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name: '天上人间ktv', sbmc: '设备1', sbgzzt: '正常工作', xzqh: '巴宜区纺织路派出所', jd: '101.32351651515', wd: '28.132132156'},
{name: '天上人间ktv', sbmc: '设备2', sbgzzt: '正常工作', xzqh: '巴宜区纺织路派出所', jd: '101.32351651515', wd: '28.132132156'},
{name: '天上人间ktv', sbmc: '设备3', sbgzzt: '正常工作', xzqh: '巴宜区纺织路派出所', jd: '101.32351651515', wd: '28.132132156'},
{name: '天上人间ktv', sbmc: '设备4', sbgzzt: '正常工作', xzqh: '巴宜区纺织路派出所', jd: '101.32351651515', wd: '28.132132156'},
{name: '天上人间ktv', sbmc: '设备5', sbgzzt: '正常工作', xzqh: '巴宜区纺织路派出所', jd: '101.32351651515', wd: '28.132132156'},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 200, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "设备名称", prop: "sbmc" },
{ label: "设备工作状态", prop: "sbgzzt" },
{ label: "行政区划", prop: "xzqh" },
{ label: "经度", prop: "jd" },
{ label: "纬度", prop: "wd" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (ids) =>{
let url = '/mosty-lzcj/tbDwMbkf/delete';
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "删除成功" });
// getList(chooseType.value);
// })
}).catch(() => {});
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,157 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">机动车抓拍采集信息详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="视频设备代码">
<el-input v-model="listQuery.videoDeviceCode" placeholder="011022"/>
</el-form-item>
<el-form-item label="日期时间">
<el-input v-model="listQuery.captureTime" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="机动车号牌号码">
<el-input v-model="listQuery.plateNumber" placeholder="藏C 123456"/>
</el-form-item>
<el-form-item label="机动车号牌颜色">
<el-input v-model="listQuery.plateColor" placeholder="绿色"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="机动车号牌种类">
<el-input v-model="listQuery.plateType" placeholder="纯电动车"/>
</el-form-item>
<el-form-item label="机动车车身颜色">
<el-input v-model="listQuery.vehicleColor" placeholder="黑色"/>
</el-form-item>
</div>
<el-form-item label="抓拍图片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.captureImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
<el-form-item label="车牌图片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.plateImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
videoDeviceCode: '',
captureTime: '',
plateNumber: '',
plateColor: '',
plateType: '',
vehicleColor: '',
captureImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
],
plateImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
]
});
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,164 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="机动车抓拍采集信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 抓拍图片 -->
<template #captureImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.captureImage"
fit="cover"
:preview-src-list="[row.captureImage]">
</el-image>
</template>
<!-- 车牌图片 -->
<template #licensePlateImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.licensePlateImage"
fit="cover"
:preview-src-list="[row.licensePlateImage]">
</el-image>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "视频设备编号", prop: 'deviceNo', placeholder: "请输入视频设备编号", showType: "input" },
{ label: "日期时间", prop: 'dateTime', placeholder: "请选择日期时间", showType: "date" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{deviceNo:'123456789', captureImage:'', licensePlateImage:'', dateTime:'2025/1/20 10:00:00', plateNumber:'藏G 123456', plateType:'绿牌电动车'},
{deviceNo:'123456789', captureImage:'', licensePlateImage:'', dateTime:'2025/1/20 10:00:00', plateNumber:'藏G 123456', plateType:'绿牌电动车'},
{deviceNo:'123456789', captureImage:'', licensePlateImage:'', dateTime:'2025/1/20 10:00:00', plateNumber:'藏G 123456', plateType:'绿牌电动车'},
{deviceNo:'123456789', captureImage:'', licensePlateImage:'', dateTime:'2025/1/20 10:00:00', plateNumber:'藏G 123456', plateType:'绿牌电动车'},
{deviceNo:'123456789', captureImage:'', licensePlateImage:'', dateTime:'2025/1/20 10:00:00', plateNumber:'藏G 123456', plateType:'绿牌电动车'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "序号", type: "index", width: 60 },
{ label: "视频设备编号", prop: "deviceNo" },
{ label: "抓拍图片", prop: "captureImage", slot: true },
{ label: "车牌图片", prop: "licensePlateImage", slot: true },
{ label: "日期时间", prop: "dateTime" },
{ label: "机动车号牌", prop: "plateNumber" },
{ label: "机动车号牌种类", prop: "plateType" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,135 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">从业人员涉及案事件信息</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="姓名">
<el-input v-model="listQuery.xm" placeholder="张三"/>
</el-form-item>
<el-form-item label="证件号码">
<el-input v-model="listQuery.zjhm" placeholder="512412547865963541"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="案事件编号">
<el-input v-model="listQuery.asjbh" placeholder="1234567"/>
</el-form-item>
<el-form-item label="案事件发生时间">
<el-input v-model="listQuery.ajfssj" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="案事件类别">
<el-input v-model="listQuery.ajlb" placeholder="刑事案件"/>
</el-form-item>
<el-form-item label="案事件处理结果">
<el-input v-model="listQuery.ajclqk" placeholder=""/>
</el-form-item>
</div>
<el-form-item label="简要案情">
<el-input type="textarea" v-model="listQuery.jyaq" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,164 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="从业人员涉及案事件信息">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('eidt', row)">编辑</el-button>
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small" @click="delDictItem([row.id])" type="danger">删除</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'csmc', placeholder: "请输入场所名称", showType: "input" },
{ label: "案件发生时间", prop: 'ajfssj', placeholder: "请选择案件发生时间", showType: "date" },
{ label: "案件类别", prop: 'ajlb', placeholder: "请选择案件类别", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{csmc:'天上人间ktv', xm:'张三', ajlb:'刑事', ajfssj:'2022/1/20 10:00:00', ajclqk:'', jyaq:'xxxxxxxxxx'},
{csmc:'天上人间ktv', xm:'张三', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'', jyaq:'xxxxxxxxxx'},
{csmc:'天上人间ktv', xm:'张三', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'', jyaq:'xxxxxxxxxx'},
{csmc:'天上人间ktv', xm:'张三', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'', jyaq:'xxxxxxxxxx'},
{csmc:'天上人间ktv', xm:'张三', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'', jyaq:'xxxxxxxxxx'},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 200, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "csmc" },
{ label: "姓名", prop: "xm" },
{ label: "案件类别", prop: "ajlb" },
{ label: "案事件发生时间", prop: "ajfssj" },
{ label: "案事件处理结果", prop: "ajclqk" },
{ label: "简要案情", prop: "jyaq" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (ids) =>{
let url = '/mosty-lzcj/tbDwMbkf/delete';
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "删除成功" });
// getList(chooseType.value);
// })
}).catch(() => {});
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,139 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">公安机关日常检查信息详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="日常检查登记号">
<el-input v-model="listQuery.rcjcdjh" placeholder="1"/>
</el-form-item>
<el-form-item label="场所负责人">
<el-input v-model="listQuery.csfzr" placeholder="李四"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="检查人姓名">
<el-input v-model="listQuery.jcrxm" placeholder="张三"/>
</el-form-item>
<el-form-item label="检查人警号">
<el-input v-model="listQuery.jcrjh" placeholder="123456"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="公安机关机构代码">
<el-input v-model="listQuery.gajgjgdm" placeholder="1234566"/>
</el-form-item>
<el-form-item label="检查部门">
<el-input v-model="listQuery.jcbm" placeholder="巴宜区防范路演出所"/>
</el-form-item>
</div>
<el-form-item label="场所检查简要情况">
<el-input type="textarea" v-model="listQuery.csjcjyqk" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
<el-form-item label="检查结果简要情况">
<el-input type="textarea" v-model="listQuery.jcjgjyqk" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,147 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="公安机关日常检查信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "场所名称", showType: "input" },
{ label: "检查类型", prop: 'checkType', placeholder: "检查类型", showType: "input" },
{ label: "检查日期", prop: 'checkDate', placeholder: "检查日期", showType: "date" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv',checkType:'日常检查',checkPerson:'张山',policeNo:'123456',checkDept:'巴宜区纺织路派出所',checkDate:'2025/1/20 10:00:00',manager:'李四'},
{name:'天上人间ktv',checkType:'日常检查',checkPerson:'张山',policeNo:'123456',checkDept:'巴宜区纺织路派出所',checkDate:'2025/1/20 10:00:00',manager:'李四'},
{name:'天上人间ktv',checkType:'日常检查',checkPerson:'张山',policeNo:'123456',checkDept:'巴宜区纺织路派出所',checkDate:'2025/1/20 10:00:00',manager:'李四'},
{name:'天上人间ktv',checkType:'日常检查',checkPerson:'张山',policeNo:'123456',checkDept:'巴宜区纺织路派出所',checkDate:'2025/1/20 10:00:00',manager:'李四'},
{name:'天上人间ktv',checkType:'日常检查',checkPerson:'张山',policeNo:'123456',checkDept:'巴宜区纺织路派出所',checkDate:'2025/1/20 10:00:00',manager:'李四'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "检查类型", prop: "checkType" },
{ label: "检查人姓名", prop: "checkPerson" },
{ label: "检查人警号", prop: "policeNo" },
{ label: "检查部门", prop: "checkDept" },
{ label: "检查日期", prop: "checkDate" },
{ label: "场所负责人", prop: "manager" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,135 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">安全防范设备信息详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="安全防范设备类型">
<el-input v-model="listQuery.aqffsblx" placeholder="灭火器"/>
</el-form-item>
<el-form-item label="设备名称">
<el-input v-model="listQuery.sbmc" placeholder="干粉灭火器"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="设备序号">
<el-input v-model="listQuery.sbxh" placeholder="1234566"/>
</el-form-item>
<el-form-item label="品牌型号">
<el-input v-model="listQuery.ppxh" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="厂商名称">
<el-input v-model="listQuery.csmc" placeholder="xxxxxxx"/>
</el-form-item>
<el-form-item label="安全防范设备数量">
<el-input v-model="listQuery.sl" placeholder="100"/>
</el-form-item>
</div>
<el-form-item label="检测机构名称" style="width:50%;">
<el-input v-model="listQuery.jcjgmc" placeholder="请输入"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,145 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="安全防范设备信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "请输入场所名称", showType: "input" },
{ label: "设备名称", prop: 'sbmc', placeholder: "请输入设备名称", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv', aqffsblx:'灭火器', sbmc:'干粉灭火器', cjsmc:'xxxxx', sl:100},
{name:'天上人间ktv', aqffsblx:'灭火器', sbmc:'干粉灭火器', cjsmc:'xxxxx', sl:100},
{name:'天上人间ktv', aqffsblx:'灭火器', sbmc:'干粉灭火器', cjsmc:'xxxxx', sl:100},
{name:'天上人间ktv', aqffsblx:'灭火器', sbmc:'干粉灭火器', cjsmc:'xxxxx', sl:100},
{name:'天上人间ktv', aqffsblx:'灭火器', sbmc:'干粉灭火器', cjsmc:'xxxxx', sl:100},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 120, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "安全防范设备类型", prop: "aqffsblx" },
{ label: "设备名称", prop: "sbmc" },
{ label: "厂商名称", prop: "cjsmc" },
{ label: "品牌型号", prop: "ppxh" },
{ label: "安全防范设备数量", prop: "sl" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,268 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">{{ title }}</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-tabs v-model="activeName">
<el-tab-pane label="场所信息" name="basic">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="flex align-center">
<div style="width: calc(100% - 176px);">
<div class="form-row">
<el-form-item label="娱乐特行场所类型">
<el-input v-model="listQuery.cslx" placeholder="ktv"/>
</el-form-item>
<el-form-item label="统一社会信用代码">
<el-input v-model="listQuery.tyshxydm" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="单位名称(营业执照登记名称)">
<el-input v-model="listQuery.dwmc" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所联系电话">
<el-input v-model="listQuery.cslxdh" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="经营状况">
<el-input v-model="listQuery.jyzt" placeholder="请输入"/>
</el-form-item>
<el-form-item label="开业日期">
<el-input v-model="listQuery.kyrq" placeholder="请输入"/>
</el-form-item>
</div>
</div>
<img height="130" src="@/assets/images/person.png" alt="">
</div>
<el-form-item label="单位注册地址">
<el-input v-model="listQuery.dwzcdz" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所地址">
<el-input v-model="listQuery.csdz" placeholder="请输入"/>
</el-form-item>
<div class="flex align-center">
<div style="width: calc(100% - 176px);">
<div class="form-row">
<el-form-item label="法定代表人">
<el-input v-model="listQuery.fddbr" placeholder="请输入"/>
</el-form-item>
<el-form-item label="法定代表人证件号码">
<el-input v-model="listQuery.fddbrzjhm" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="法定代表人联系电话">
<el-input v-model="listQuery.fddbrLxdh" placeholder="请输入"/>
</el-form-item>
<el-form-item label="法定代表人居住地址">
<el-input v-model="listQuery.fddbrJzdz" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所负责人">
<el-input v-model="listQuery.csfzr" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所负责人身份证号">
<el-input v-model="listQuery.csfzrSfzh" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所负责人联系方式">
<el-input v-model="listQuery.csfzrLxfs" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所负责人居住地址">
<el-input v-model="listQuery.csfzrJzdz" placeholder="请输入"/>
</el-form-item>
</div>
</div>
<div>
<img height="65" style="width: 100%;" src="@/assets/images/person.png" alt="">
<img height="65" style="width: 100%;" src="@/assets/images/person.png" alt="">
</div>
</div>
<el-form-item label="保安服务公司名称">
<el-input v-model="listQuery.bafwgsmc" placeholder="请输入"/>
</el-form-item>
<div class="form-row">
<el-form-item label="保安负责人">
<el-input v-model="listQuery.bafzr" placeholder="请输入"/>
</el-form-item>
<el-form-item label="保安负责人联系方式">
<el-input v-model="listQuery.bafzrLxfs" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="保安人员数量">
<el-input v-model="listQuery.bars" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所面积">
<el-input v-model="listQuery.csmj" placeholder="请输入"/>
</el-form-item>
</div>
<div class="upload-group">
<el-form-item label="营业执照照片">
<img height="130" src="@/assets/images/person.png" alt="">
</el-form-item>
<el-form-item label="娱乐经营许可证">
<img height="130" src="@/assets/images/person.png" alt="">
</el-form-item>
<el-form-item label="安保服务公司合同">
<img height="130" src="@/assets/images/person.png" alt="">
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="娱乐场所备案编号">
<el-input v-model="listQuery.ylcsbabh" placeholder="请输入"/>
</el-form-item>
<el-form-item label="娱乐场所备案机构名称">
<el-input v-model="listQuery.ylcsbajgmc" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="娱乐经营许可证编号">
<el-input v-model="listQuery.yljyxkzbh" placeholder="请输入"/>
</el-form-item>
<el-form-item label="娱乐场所经营许可证发证机构">
<el-input v-model="listQuery.ylcsjyxkzfzjg" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="是否安装视频监控设备">
<el-input v-model="listQuery.sfazspjksb" placeholder="请输入"/>
</el-form-item>
<el-form-item label="是否安装信息采集设备">
<el-input v-model="listQuery.sfazxxcjsb" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="是否安装消防设备">
<el-input v-model="listQuery.sfazxfsb" placeholder="请输入"/>
</el-form-item>
<el-form-item label="责任民警">
<el-input v-model="listQuery.zrmj" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所行政区划">
<el-input v-model="listQuery.csxzqh" placeholder="请输入"/>
</el-form-item>
<el-form-item label="治安管理单位">
<el-input v-model="listQuery.zaglbm" placeholder="请输入"/>
</el-form-item>
</div>
</el-form>
</el-tab-pane>
<el-tab-pane label="从业人员" name="staff">
<!-- 从业人员表格 -->
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,161 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="娱乐场所管理"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
<template #defaultSlot>
<div>
<el-input-number v-model="queryFrom.xqy"></el-input-number>
<span class="ml10 mr10" style="color: #000;"></span>
<el-input-number v-model="queryFrom.dqy"></el-input-number>
</div>
</template>
</Search>
defaultSlot
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small">从业人员</el-button>
<el-button size="small">转区域</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "请输入场所名称", showType: "input" },
{ label: "场所电话", prop: 'phone', placeholder: "请输入场所电话", showType: "input" },
{ label: "法人姓名", prop: 'frxm', placeholder: "请输入法人姓名", showType: "input" },
{ label: "法人证件号码", prop: 'frzjhm', placeholder: "请输入法人证件号码", showType: "input" },
{ label: "法人联系电话", prop: 'frlxdh', placeholder: "请输入法人联系电话", showType: "input" },
{ label: "经营状况", prop: 'jyzt', placeholder: "请选择经营状况", showType: "select", options: [{ label: '在业', value: '在业' }]},
{ label: "场所类型", prop: 'cslx', placeholder: "请选择场所类型", showType: "select", options: [{ label: '全部', value: '全部' },]},
{ label: "所属辖区", prop: 'ssxq', placeholder: "请选择所属辖区", showType: "department" },
{ label: "面积大小", prop: 'mj', placeholder: "请输入面积范围", showType: "defaultSlot" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间KTV',cslx:'KTV',jyzt:'在业',ssxq:'巴宜区纺织路派出所',frxm:'张三',frzjhm:'510183199656566652',frlxdh:'15882344902'},
{name:'天上人间KTV',cslx:'KTV',jyzt:'在业',ssxq:'巴宜区纺织路派出所',frxm:'张三',frzjhm:'510183199656566652',frlxdh:'15882344902'},
{name:'天上人间KTV',cslx:'KTV',jyzt:'在业',ssxq:'巴宜区纺织路派出所',frxm:'张三',frzjhm:'510183199656566652',frlxdh:'15882344902'},
{name:'天上人间KTV',cslx:'KTV',jyzt:'在业',ssxq:'巴宜区纺织路派出所',frxm:'张三',frzjhm:'510183199656566652',frlxdh:'15882344902'},
{name:'天上人间KTV',cslx:'KTV',jyzt:'在业',ssxq:'巴宜区纺织路派出所',frxm:'张三',frzjhm:'510183199656566652',frlxdh:'15882344902'},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 250, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "场所类型", prop: "cslx" },
{ label: "经营状态", prop: "jyzt" },
{ label: "所属辖区", prop: "ssxq" },
{ label: "法人姓名", prop: "frxm" },
{ label: "法人证件号码", prop: "frzjhm" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,150 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">人脸抓拍采集信息</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="视频设备代码">
<el-input v-model="listQuery.videoDeviceCode" placeholder="011022"/>
</el-form-item>
<el-form-item label="日期时间">
<el-input v-model="listQuery.captureTime" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<el-form-item label="抓拍图片">
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.captureImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
<el-form-item label="人像图片">
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.plateImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
videoDeviceCode: '',
captureTime: '',
plateNumber: '',
plateColor: '',
plateType: '',
vehicleColor: '',
captureImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
],
plateImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
]
});
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,216 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="身份标签管理" />
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<!-- 抓拍图片 -->
<template #captureImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.captureImage"
fit="cover"
:preview-src-list="[row.captureImage]"
>
</el-image>
</template>
<!-- 人像图片 -->
<template #personImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.personImage"
fit="cover"
:preview-src-list="[row.personImage]"
>
</el-image>
</template>
<!-- 车牌图片 -->
<template #licensePlateImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.licensePlateImage"
fit="cover"
:preview-src-list="[row.licensePlateImage]"
>
</el-image>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)"
>详情</el-button
>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{
label: "视频设备编号",
prop: "deviceNo",
placeholder: "请输入视频设备编号",
showType: "input"
},
{
label: "日期时间",
prop: "captureTime",
placeholder: "请选择日期时间",
showType: "date"
}
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{
deviceNo: "123456789",
captureImage: "",
personImage: "",
captureTime: "2025/1/20 10:00:00"
},
{
deviceNo: "123456789",
captureImage: "",
personImage: "",
captureTime: "2025/1/20 10:00:00"
},
{
deviceNo: "123456789",
captureImage: "",
personImage: "",
captureTime: "2025/1/20 10:00:00"
},
{
deviceNo: "123456789",
captureImage: "",
personImage: "",
captureTime: "2025/1/20 10:00:00"
},
{
deviceNo: "123456789",
captureImage: "",
personImage: "",
captureTime: "2025/1/20 10:00:00"
}
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "视频设备编号", prop: "deviceNo" },
{ label: "抓拍图片", prop: "captureImage", slot: true },
{ label: "人像图片", prop: "personImage", slot: true },
{ label: "日期时间", prop: "captureTime" }
]
});
onMounted(() => {
getList();
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList();
};
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = (val) => {
// pageData.tableConfiger.loading = true;
// let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
};
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,169 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">从业人员涉及案事件信息 {{ title }}</span>
<div>
<el-button type="primary" v-if="title != '详情'" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="法律法规代码">
<el-input v-model="listQuery.flfgdm" placeholder="01"/>
</el-form-item>
<el-form-item label="登记人姓名">
<el-input v-model="listQuery.djrxm" placeholder="李四"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="发布单位名称">
<el-input v-model="listQuery.fbdwmc" placeholder="巴宜区筑梦路派出所"/>
</el-form-item>
<el-form-item label="发布范围描述">
<el-input v-model="listQuery.fbfwms" placeholder=""/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="电子文件名称">
<el-input v-model="listQuery.dzwjmc" placeholder="xxxxx通知"/>
</el-form-item>
<el-form-item label="发布日期">
<el-date-picker v-model="listQuery.fbrq" type="datetime" placeholder="2025/1/20 10:00:00" style="width: 100%;" />
</el-form-item>
</div>
<el-form-item label="电子文件摘要">
<el-input type="textarea" v-model="listQuery.dzwjzy" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
<div class="upload-group">
<el-form-item label="电子附件">
<el-upload action="" :auto-upload="false">
<el-button type="primary">点击下载</el-button>
</el-upload>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
list: [
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
]
});
const areaOptions = ref([]); // 区域选项数据
// 提交
const submit = ()=>{
elform.value.validate((valid) => {
if (!valid) return false;
// loading.value = true;
let params = { ...listQuery.value}
let url = title.value == '新增' ? '/mosty-lzcj/tbDwYy/insert' :'/mosty-lzcj/tbDwYy/update'
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value+'成功'});
// close()
// emit("updateDate",modelLx.value);
// }).catch(()=>{
// loading.value = false;
// });
});
}
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
title.value = type == 'add' ? '新增' : type == 'eidt' ? '编辑' : '详情'
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.labelTileile{
background-color: #F7FAFB;
border: 1px solid #E3E7ED;
line-height: 30px;
padding-left: 8px;
// text-align: center;
margin-top: 10px;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,162 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="法律法规信息">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('eidt', row)">编辑</el-button>
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small" @click="delDictItem([row.id])" type="danger">删除</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "电子文件名称", prop: 'dzwjmc', placeholder: "请输入电子文件名称", showType: "input" },
{ label: "发布单位", prop: 'fbdw', placeholder: "请输入发布单位", showType: "input" },
{ label: "发布日期", prop: 'fbrq', placeholder: "请选择发布日期", showType: "date" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{id: 1, dzwjmc: 'xxxxx法规', djr: '李四', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00'},
{id: 2, dzwjmc: 'xxxxx法规', djr: '李四', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00'},
{id: 3, dzwjmc: 'xxxxx法规', djr: '李四', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00'},
{id: 4, dzwjmc: 'xxxxx法规', djr: '李四', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00'},
{id: 5, dzwjmc: 'xxxxx法规', djr: '李四', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 200,
tableColumn: [
{ label: "电子文件名称", prop: "dzwjmc" },
{ label: "登记人", prop: "djr" },
{ label: "发布单位", prop: "fbdw" },
{ label: "发布日期", prop: "fbrq" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (ids) =>{
let url = '/mosty-lzcj/tbDwMbkf/delete';
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "删除成功" });
// getList(chooseType.value);
// })
}).catch(() => {});
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,178 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">通知通告信息 {{ title }}</span>
<div>
<el-button type="primary" v-if="title != '详情'" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="通知通告代码">
<el-input v-model="listQuery.tzggdm" placeholder="01"/>
</el-form-item>
<el-form-item label="发布人姓名">
<el-input v-model="listQuery.fbrxm" placeholder="张三"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="发布单位名称">
<el-input v-model="listQuery.fbdwmc" placeholder="巴宜区筑梦派出所"/>
</el-form-item>
<el-form-item label="登记人姓名">
<el-input v-model="listQuery.djrxm" placeholder="李四"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="电子文件名称">
<el-input v-model="listQuery.dzwjmc" placeholder="xxxxx通知"/>
</el-form-item>
<el-form-item label="发布范围描述">
<el-input v-model="listQuery.fbfwms" placeholder=""/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="紧急程度">
<el-input v-model="listQuery.jjcd" placeholder="非常紧急"/>
</el-form-item>
<el-form-item label="发布日期">
<el-date-picker v-model="listQuery.fbrq" type="datetime" placeholder="2025/1/20 10:00:00" style="width: 100%;" />
</el-form-item>
</div>
<el-form-item label="电子文件摘要">
<el-input type="textarea" v-model="listQuery.dzwjzy" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
<div class="upload-group">
<el-form-item label="电子附件">
<el-upload action="" :auto-upload="false">
<el-button>点击下载</el-button>
</el-upload>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
list: [
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
]
});
const areaOptions = ref([]); // 区域选项数据
// 提交
const submit = ()=>{
elform.value.validate((valid) => {
if (!valid) return false;
// loading.value = true;
let params = { ...listQuery.value}
let url = title.value == '新增' ? '/mosty-lzcj/tbDwYy/insert' :'/mosty-lzcj/tbDwYy/update'
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value+'成功'});
// close()
// emit("updateDate",modelLx.value);
// }).catch(()=>{
// loading.value = false;
// });
});
}
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
title.value = type == 'add' ? '新增' : type == 'eidt' ? '编辑' : '详情'
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.labelTileile{
background-color: #F7FAFB;
border: 1px solid #E3E7ED;
line-height: 30px;
padding-left: 8px;
// text-align: center;
margin-top: 10px;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,164 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="通知通告信息">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('eidt', row)">编辑</el-button>
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small" @click="delDictItem([row.id])" type="danger">删除</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "电子文件名称", prop: 'dzwjmc', placeholder: "请输入电子文件名称", showType: "input" },
{ label: "发布单位", prop: 'fbdw', placeholder: "请输入发布单位", showType: "input" },
{ label: "发布日期", prop: 'fbrq', placeholder: "请选择发布日期", showType: "date" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{id: 1, dzwjmc: 'xxxxx通知', djr: '李四', jjcd: '非常紧急', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00', djr: '张山'},
{id: 2, dzwjmc: 'xxxxx通知', djr: '李四', jjcd: '非常紧急', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00', djr: '张山'},
{id: 3, dzwjmc: 'xxxxx通知', djr: '李四', jjcd: '非常紧急', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00', djr: '张山'},
{id: 4, dzwjmc: 'xxxxx通知', djr: '李四', jjcd: '非常紧急', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00', djr: '张山'},
{id: 5, dzwjmc: 'xxxxx通知', djr: '李四', jjcd: '非常紧急', fbdw: '巴吉区筑梦路派出所', fbrq: '2025/1/20 10:00:00', djr: '张山'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 200,
tableColumn: [
{ label: "电子文件名称", prop: "dzwjmc" },
{ label: "发布人", prop: "djr" },
{ label: "紧急程度", prop: "jjcd" },
{ label: "发布单位", prop: "fbdw" },
{ label: "发布日期", prop: "fbrq" },
{ label: "登记人", prop: "djr" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (ids) =>{
let url = '/mosty-lzcj/tbDwMbkf/delete';
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "删除成功" });
// getList(chooseType.value);
// })
}).catch(() => {});
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,205 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">场所案事件信息{{ title }}</span>
<div>
<el-button type="primary" v-if="title != '详情'" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="案事件编号">
<el-input v-model="listQuery.asjbh" placeholder="123456"/>
</el-form-item>
<el-form-item label="按时间发生时间">
<el-input v-model="listQuery.sbmc" placeholder="2025-03-10 10:10:10"/>
</el-form-item>
</div>
<el-form-item label="简要案情">
<el-input v-model="listQuery.sbxh" type="textarea" placeholder="1234566"/>
</el-form-item>
<div class="labelTileile">
<span>案事件人员</span>
<el-button size="small" @click="modelValue = true,titleValue = '新增'">新增人员</el-button>
</div>
<div class="form-row" v-for="(it,idx) in listQuery.list" :key="idx">
<el-form-item label="姓名">
<el-input v-model="it.xm" placeholder="xxxxxxx"/>
</el-form-item>
<el-form-item label="证件号码">
<el-input v-model="it.zjhm" placeholder="100"/>
</el-form-item>
</div>
</el-form>
</div>
</div>
<!-- 新增人员 -->
<el-dialog :title="titleValue" width="700px" :model-value="modelValue" @close="closed">
<el-form :model="addForm" :rules="rules" ref="addFormVal" :inline="true">
<el-form-item label="姓名" prop="xm">
<el-input v-model="addForm.xm" placeholder="请输入姓名" clearable />
</el-form-item>
<el-form-item label="身份证" prop="zjhm">
<el-input v-model="addForm.zjhm" placeholder="请输入身份证" clearable />
</el-form-item>
</el-form>
<template #footer>
<div class="tc">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
list: [
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
]
});
const addFormVal = ref()
const modelValue = ref(false)
const titleValue = ref('')
const addForm = reactive({});
const rules = reactive({
xm: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
zjhm: [{ required: true, message: '请输入身份证', trigger: 'blur' }],
});
const closed = () => {
modelValue.value = false;
addForm.xm = ''
addForm.zjhm = ''
};
const onComfirm = () => {
addFormVal.value.validate((valid) => {
if (!valid) return false;
modelValue.value = false;
listQuery.value.list.push(addForm);
})
};
// 提交
const submit = ()=>{
elform.value.validate((valid) => {
if (!valid) return false;
// loading.value = true;
let params = { ...listQuery.value}
let url = title.value == '新增' ? '/mosty-lzcj/tbDwYy/insert' :'/mosty-lzcj/tbDwYy/update'
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value+'成功'});
// close()
// emit("updateDate",modelLx.value);
// }).catch(()=>{
// loading.value = false;
// });
});
}
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
title.value = type == 'add' ? '新增' : type == 'eidt' ? '编辑' : '详情'
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.labelTileile{
display: flex;
justify-content: space-between;
align-items: center;
height: 30px;
background-color: #F7FAFB;
border: 1px solid #E3E7ED;
padding: 0 8px;
cursor: pointer;
margin-top: 10px;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,163 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="场所案事件">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('eidt', row)">编辑</el-button>
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small" @click="delDictItem([row.id])" type="danger">删除</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "请输入场所名称", showType: "input" },
{ label: "处罚日期", prop: 'clrq', placeholder: "案件办理时间", showType: "datePicker" },
{ label: "处罚类别", prop: 'cflb', placeholder: "案件类别", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv', ajlb:'刑事', ajfssj:'2022/1/20 10:00:00', ajclqk:'xxxxxxxxxx'},
{name:'天上人间ktv', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'xxxxxxxxxx'},
{name:'天上人间ktv', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'xxxxxxxxxx'},
{name:'天上人间ktv', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'xxxxxxxxxx'},
{name:'天上人间ktv', ajlb:'纠纷', ajfssj:'2022/1/20 10:00:00', ajclqk:'xxxxxxxxxx'},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 200, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "案件类别", prop: "ajlb" },
{ label: "案事件发生时间", prop: "ajfssj" },
{ label: "案事件处理结果", prop: "ajclqk" },
{ label: "简要案情", prop: "jyaq" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (ids) =>{
let url = '/mosty-lzcj/tbDwMbkf/delete';
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "删除成功" });
// getList(chooseType.value);
// })
}).catch(() => {});
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,149 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">人员抓拍采集信息详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="视频设备代码">
<el-input v-model="listQuery.videoDeviceCode" placeholder="011022"/>
</el-form-item>
<el-form-item label="日期时间">
<el-input v-model="listQuery.captureTime" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="背包判断标识">
<el-input v-model="listQuery.bbpdbs" placeholder="是"/>
</el-form-item>
<el-form-item label="带帽判断标识">
<el-input v-model="listQuery.dmpdbs" placeholder="是"/>
</el-form-item>
</div>
<el-form-item label="抓拍图片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.captureImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
<el-form-item label="人像图片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.plateImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
videoDeviceCode: '',
captureTime: '',
plateNumber: '',
plateColor: '',
plateType: '',
vehicleColor: '',
captureImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
],
plateImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
]
});
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,172 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="人员抓拍采集信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 抓拍图片 -->
<template #captureImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.captureImage"
fit="cover"
:preview-src-list="[row.captureImage]">
</el-image>
</template>
<!-- 人像图片 -->
<template #personImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.personImage"
fit="cover"
:preview-src-list="[row.personImage]">
</el-image>
</template>
<!-- 车牌图片 -->
<template #licensePlateImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.licensePlateImage"
fit="cover"
:preview-src-list="[row.licensePlateImage]">
</el-image>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "视频设备编号", prop: 'deviceNo', placeholder: "请输入视频设备编号", showType: "input" },
{ label: "日期时间", prop: 'captureTime', placeholder: "请选择日期时间", showType: "date" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{deviceNo:'123456789', captureImage:'', personImage:'', captureTime: '2025/1/20 10:00:00', backpackFlag: '是', hatFlag: '是'},
{deviceNo:'123456789', captureImage:'', personImage:'', captureTime: '2025/1/20 10:00:00', backpackFlag: '是', hatFlag: '是'},
{deviceNo:'123456789', captureImage:'', personImage:'', captureTime: '2025/1/20 10:00:00', backpackFlag: '是', hatFlag: '是'},
{deviceNo:'123456789', captureImage:'', personImage:'', captureTime: '2025/1/20 10:00:00', backpackFlag: '是', hatFlag: '是'},
{deviceNo:'123456789', captureImage:'', personImage:'', captureTime: '2025/1/20 10:00:00', backpackFlag: '是', hatFlag: '是'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "视频设备编号", prop: "deviceNo" },
{ label: "抓拍图片", prop: "captureImage", slot: true },
{ label: "人像图片", prop: "personImage", slot: true },
{ label: "日期时间", prop: "captureTime" },
{ label: "背包判断标识", prop: "backpackFlag" },
{ label: "带帽判断标识", prop: "hatFlag" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,122 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">娱乐场所从业人员日志详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="0111"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="从业人员姓名">
<el-input v-model="listQuery.cyrxm" placeholder="张三"/>
</el-form-item>
<el-form-item label="从业人员证件号码">
<el-input v-model="listQuery.cyrzjhm" placeholder="511123456987452256"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="工作开始时间">
<el-input v-model="listQuery.gzkssj" placeholder="10:00:00"/>
</el-form-item>
<el-form-item label="工作结束时间">
<el-input v-model="listQuery.gzjssj" placeholder="23:00:00"/>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,143 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="娱乐场所从业人员日志信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "场所名称", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv', personName:'张三', idCard:'511123456987452256', startTime:'10:00:00', endTime:'23:00:00'},
{name:'天上人间ktv', personName:'张三', idCard:'511123456987452256', startTime:'10:00:00', endTime:'23:00:00'},
{name:'天上人间ktv', personName:'张三', idCard:'511123456987452256', startTime:'10:00:00', endTime:'23:00:00'},
{name:'天上人间ktv', personName:'张三', idCard:'511123456987452256', startTime:'10:00:00', endTime:'23:00:00'},
{name:'天上人间ktv', personName:'张三', idCard:'511123456987452256', startTime:'10:00:00', endTime:'23:00:00'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "从业人员姓名", prop: "personName" },
{ label: "从业人员证件号码", prop: "idCard" },
{ label: "工作开始时间", prop: "startTime" },
{ label: "工作结束时间", prop: "endTime" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,152 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">警情情况详情详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.placeCode" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.placeName" placeholder="天上人间KTV"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="警情登记号">
<el-input v-model="listQuery.policeRecordNo" placeholder="1234567"/>
</el-form-item>
<el-form-item label="警情类别">
<el-input v-model="listQuery.policeType" placeholder="矛盾纠纷"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="报警人姓名">
<el-input v-model="listQuery.reporterName" placeholder="张三"/>
</el-form-item>
<el-form-item label="报警时间">
<el-input v-model="listQuery.reportTime" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="接警时间">
<el-input v-model="listQuery.receiveTime" placeholder="2025/1/20 10:01:00"/>
</el-form-item>
<el-form-item label="处警人姓名">
<el-input v-model="listQuery.handlerName" placeholder="李四"/>
</el-form-item>
</div>
<el-form-item label="警情处理结果">
<el-input v-model="listQuery.handleResult" type="textarea" :rows="3" placeholder="自行协商"/>
</el-form-item>
<el-form-item label="简要案情">
<el-input v-model="listQuery.briefCase" type="textarea" :rows="5" placeholder="请输入简要案情"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
placeCode: '',
placeName: '',
policeRecordNo: '',
policeType: '',
reporterName: '',
reportTime: '',
receiveTime: '',
handlerName: '',
handleResult: '',
briefCase: ''
});
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,163 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="警力情况信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 抓拍图片 -->
<template #captureImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.captureImage"
fit="cover"
:preview-src-list="[row.captureImage]">
</el-image>
</template>
<!-- 车牌图片 -->
<template #licensePlateImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.licensePlateImage"
fit="cover"
:preview-src-list="[row.licensePlateImage]">
</el-image>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "报警人姓名", prop: 'reporterName', placeholder: "请输入报警人姓名", showType: "input" },
{ label: "警情类别", prop: 'policeType', placeholder: "请输入警情类别", showType: "input" },
{ label: "报警时间", prop: 'reportTime', placeholder: "请选择报警时间", showType: "date" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{placeName:'天上人间ktv', policeType:'刑事', reportTime:'2022/1/20 10:00:00', reporterName:'张三', handlerName:'李四'},
{placeName:'天上人间ktv', policeType:'纠纷', reportTime:'2022/1/20 10:00:00', reporterName:'张三', handlerName:'李四'},
{placeName:'天上人间ktv', policeType:'纠纷', reportTime:'2022/1/20 10:00:00', reporterName:'张三', handlerName:'李四'},
{placeName:'天上人间ktv', policeType:'纠纷', reportTime:'2022/1/20 10:00:00', reporterName:'张三', handlerName:'李四'},
{placeName:'天上人间ktv', policeType:'纠纷', reportTime:'2022/1/20 10:00:00', reporterName:'张三', handlerName:'李四'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "placeName" },
{ label: "警情类别", prop: "policeType" },
{ label: "报警时间", prop: "reportTime" },
{ label: "报警人姓名", prop: "reporterName" },
{ label: "处警人姓名", prop: "handlerName" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,227 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">从业人员详情 {{ title }}</span>
<div>
<el-button type="primary" v-if="title != '详情'" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="姓名">
<el-input v-model="listQuery.xm" placeholder="张三"/>
</el-form-item>
<el-form-item label="证件号码">
<el-input v-model="listQuery.zjhm" placeholder="511123456789654125"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="职业类别代码">
<el-input v-model="listQuery.zylbdm" placeholder="123456"/>
</el-form-item>
<el-form-item label="居住地址">
<el-input v-model="listQuery.jzdz" placeholder="林芝市巴宜区区政府路119号"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="入职时间">
<el-date-picker v-model="listQuery.rzsj" type="date" placeholder="2025/1/20" style="width: 100%;" />
</el-form-item>
<el-form-item label="离职时间">
<el-date-picker v-model="listQuery.lzsj" type="date" placeholder="请选择" style="width: 100%;" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="联系电话">
<el-input v-model="listQuery.lxdh" placeholder="15222222222"/>
</el-form-item>
<el-form-item label="执业许可证编号">
<el-input v-model="listQuery.zyxkzbh" placeholder=""/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="岗位">
<el-input v-model="listQuery.gw" placeholder=""/>
</el-form-item>
<el-form-item label="资格证类型">
<el-input v-model="listQuery.zgzlx" placeholder=""/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="资格证编号">
<el-input v-model="listQuery.zgzbh" placeholder=""/>
</el-form-item>
<el-form-item label="资格证有效期截止日期">
<el-date-picker v-model="listQuery.zgzyxqjzrq" type="date" placeholder="请选择" style="width: 100%;" />
</el-form-item>
</div>
<el-form-item label="资格证有效期起始日期">
<el-date-picker v-model="listQuery.zgzyxqqsrq" type="date" placeholder="请选择" style="width: 100%;" />
</el-form-item>
<el-form-item label="抓拍图片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.captureImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
captureImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
],
list: [
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
{xm:'张三',zjhm:'510183199626565555'},
]
});
const areaOptions = ref([]); // 区域选项数据
// 提交
const submit = ()=>{
elform.value.validate((valid) => {
if (!valid) return false;
// loading.value = true;
let params = { ...listQuery.value}
let url = title.value == '新增' ? '/mosty-lzcj/tbDwYy/insert' :'/mosty-lzcj/tbDwYy/update'
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value+'成功'});
// close()
// emit("updateDate",modelLx.value);
// }).catch(()=>{
// loading.value = false;
// });
});
}
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
title.value = type == 'add' ? '新增' : type == 'eidt' ? '编辑' : '详情'
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.labelTileile{
background-color: #F7FAFB;
border: 1px solid #E3E7ED;
line-height: 30px;
padding-left: 8px;
// text-align: center;
margin-top: 10px;
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,144 +0,0 @@
<template>
<div>
<PageTitle title="从业人员"/>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "人员姓名", prop: 'xm', placeholder: "请输入人员姓名", showType: "input" },
{ label: "证件号码", prop: 'zjhm', placeholder: "请输入证件号码", showType: "input" },
{ label: "联系电话", prop: 'lxdh', placeholder: "请输入联系电话", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{xm:'王五', zjhm:'511222222222222', lxfs:'15211111111', gw:'保洁', rzsj:'2022/1/20'},
{xm:'王五', zjhm:'511222222222222', lxfs:'15211111111', gw:'保洁', rzsj:'2022/1/20'},
{xm:'王五', zjhm:'511222222222222', lxfs:'15211111111', gw:'保洁', rzsj:'2022/1/20'},
{xm:'王五', zjhm:'511222222222222', lxfs:'15211111111', gw:'保洁', rzsj:'2022/1/20'},
{xm:'王五', zjhm:'511222222222222', lxfs:'15211111111', gw:'保洁', rzsj:'2022/1/20'},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 120, //操作栏宽度
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "证件号码", prop: "zjhm" },
{ label: "联系方式", prop: "lxfs" },
{ label: "岗位", prop: "gw" },
{ label: "入职时间", prop: "rzsj" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,136 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">可疑情况详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.placeCode" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.placeName" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="可疑情况登记号">
<el-input v-model="listQuery.policeRecordNo" placeholder="1"/>
</el-form-item>
<el-form-item label="可疑情况类别">
<el-input v-model="listQuery.policeType" placeholder="矛盾纠纷"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="登记人姓名">
<el-input v-model="listQuery.reporterName" placeholder="张三"/>
</el-form-item>
</div>
<el-form-item label="可疑情况简要描述">
<el-input v-model="listQuery.briefCase" type="textarea" :rows="5" placeholder="请输入可疑情况简要描述"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
placeCode: '',
placeName: '',
policeRecordNo: '',
policeType: '',
reporterName: '',
reportTime: '',
receiveTime: '',
handlerName: '',
handleResult: '',
briefCase: ''
});
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,162 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="可疑情况信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 抓拍图片 -->
<template #captureImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.captureImage"
fit="cover"
:preview-src-list="[row.captureImage]">
</el-image>
</template>
<!-- 车牌图片 -->
<template #licensePlateImage="{ row }">
<el-image
style="width: 100px; height: 60px"
:src="row.licensePlateImage"
fit="cover"
:preview-src-list="[row.licensePlateImage]">
</el-image>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "登记人姓名", prop: 'reporterName', placeholder: "登记人姓名", showType: "input" },
{ label: "可疑情况类别", prop: 'policeType', placeholder: "可疑情况类别", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{placeName:'天上人间ktv', registrantName:'张三', situationType:'纠纷', situationDesc:'xxxxxxxxxxxx', situationNo: '5'},
{placeName:'天上人间ktv', registrantName:'张三', situationType:'纠纷', situationDesc:'xxxxxxxxxxxx', situationNo: '4'},
{placeName:'天上人间ktv', registrantName:'张三', situationType:'纠纷', situationDesc:'xxxxxxxxxxxx', situationNo: '3'},
{placeName:'天上人间ktv', registrantName:'张三', situationType:'纠纷', situationDesc:'xxxxxxxxxxxx', situationNo: '2'},
{placeName:'天上人间ktv', registrantName:'张三', situationType:'纠纷', situationDesc:'xxxxxxxxxxxx', situationNo: '1'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "placeName" },
{ label: "登记人姓名", prop: "registrantName" },
{ label: "可疑情况类别", prop: "situationType" },
{ label: "可疑情况简要描述", prop: "situationDesc" },
{ label: "可疑情况登记号", prop: "situationNo" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,126 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">娱乐场所附加信息详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="0111"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="娱乐场所类型代码">
<el-input v-model="listQuery.ylcslxdm" placeholder="001"/>
</el-form-item>
<el-form-item label="核定消费者数量">
<el-input v-model="listQuery.hdxfzsl" placeholder="100"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="包厢房间数">
<el-input v-model="listQuery.bxfjs" placeholder="20"/>
</el-form-item>
<el-form-item label="娱乐场所治安级别代码">
<el-input v-model="listQuery.ylcszajbdm" placeholder="90"/>
</el-form-item>
</div>
<el-form-item label="娱乐项目名称" style="width:50%;">
<el-input v-model="listQuery.ylxmmc" placeholder="请输入"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,144 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="娱乐场所附加管理"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "请输入场所名称", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv', cslx:'ktv', hdjyrs: 100, bffjsl: 20, zaglbm: 90},
{name:'天上人间ktv', cslx:'ktv', hdjyrs: 100, bffjsl: 20, zaglbm: 90},
{name:'天上人间ktv', cslx:'ktv', hdjyrs: 100, bffjsl: 20, zaglbm: 90},
{name:'天上人间ktv', cslx:'ktv', hdjyrs: 100, bffjsl: 20, zaglbm: 90},
{name:'天上人间ktv', cslx:'ktv', hdjyrs: 100, bffjsl: 20, zaglbm: 90},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 120, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "娱乐场所类型", prop: "cslx" },
{ label: "核定接待者数量", prop: "hdjyrs" },
{ label: "包厢房间数量", prop: "bffjsl" },
{ label: "治安级别代码", prop: "zaglbm" },
{ label: "娱乐项目名称", prop: "ylxmmc" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,134 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">场所处罚信息详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="01"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所处罚登记号号">
<el-input v-model="listQuery.cscfdjh" placeholder="1234567"/>
</el-form-item>
<el-form-item label="场所处罚日期">
<el-input v-model="listQuery.cscfrq" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所处罚批准文号码">
<el-input v-model="listQuery.cscfpzwh" placeholder="1234567"/>
</el-form-item>
<el-form-item label="批准机关名称">
<el-input v-model="listQuery.pzjgmc" placeholder=""/>
</el-form-item>
</div>
<el-form-item label="场所处罚类别">
<el-input v-model="listQuery.cscflb" placeholder="罚款"/>
</el-form-item>
<el-form-item label="场所处罚原因简要情况">
<el-input type="textarea" v-model="listQuery.cscfyyqk" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
<el-form-item label="场所处罚结果简要情况">
<el-input type="textarea" v-model="listQuery.cscfjgqk" :rows="4" placeholder="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,161 +0,0 @@
<template>
<div>
<PageTitle title="场所处罚信息">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('edit', row)">编辑</el-button>
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small" @click="delDictItem([row.id])" type="danger">删除</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "请输入场所名称", showType: "input" },
{ label: "处罚日期", prop: 'cfrq', placeholder: "请选择处罚日期", showType: "date" },
{ label: "处罚类别", prop: 'cflb', placeholder: "请选择处罚类别", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv', cflb:'刑事', cfrq:'2022/1/20 10:00:00', cfyyqk:'', cfjgqk:'xxxxxxxxxx'},
{name:'天上人间ktv', cflb:'纠纷', cfrq:'2022/1/20 10:00:00', cfyyqk:'', cfjgqk:'xxxxxxxxxx'},
{name:'天上人间ktv', cflb:'纠纷', cfrq:'2022/1/20 10:00:00', cfyyqk:'', cfjgqk:'xxxxxxxxxx'},
{name:'天上人间ktv', cflb:'纠纷', cfrq:'2022/1/20 10:00:00', cfyyqk:'', cfjgqk:'xxxxxxxxxx'},
{name:'天上人间ktv', cflb:'纠纷', cfrq:'2022/1/20 10:00:00', cfyyqk:'', cfjgqk:'xxxxxxxxxx'},
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 220, //操作栏宽度
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "处罚类别", prop: "cflb" },
{ label: "处罚日期", prop: "cfrq" },
{ label: "处罚原因简要情况", prop: "cfyyqk" },
{ label: "处罚结果简要情况", prop: "cfjgqk" },
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 删除
const delDictItem = (ids) =>{
// let url = '/mosty-lzcj/TbDwYlth/delete';
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "删除成功" });
// getList(chooseType.value);
// })
}).catch(() => {});
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -1,153 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">娱乐场所电子游戏机详情</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="form-row">
<el-form-item label="场所代码">
<el-input v-model="listQuery.csdm" placeholder="0111"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="天上人间ktv"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="电子游戏机">
<el-input v-model="listQuery.dzyx" placeholder="捕鱼机"/>
</el-form-item>
<el-form-item label="品牌型号">
<el-input v-model="listQuery.ppxh" placeholder="ashaj200"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="数量">
<el-input v-model="listQuery.sl" placeholder="20"/>
</el-form-item>
<el-form-item label="厂商名称">
<el-input v-model="listQuery.csmc" placeholder="xxxx"/>
</el-form-item>
</div>
<el-form-item label="相片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.plateImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('详情');
const listQuery = ref({
plateImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
]
});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.image-group {
display: flex;
gap: 10px;
flex-wrap: wrap;
.image-item {
width: 150px;
height: 150px;
border: 1px solid #dcdfe6;
.el-image {
width: 100%;
height: 100%;
}
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,144 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="娱乐场所电子游戏机信息"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{ label: "场所名称", prop: 'name', placeholder: "场所名称", showType: "input" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{name:'天上人间ktv', deviceType:'捕鱼机', model:'ashaj200', count: 20, manufacturer: 'xxxx'},
{name:'天上人间ktv', deviceType:'捕鱼机', model:'ashaj200', count: 20, manufacturer: 'xxxxx'},
{name:'天上人间ktv', deviceType:'捕鱼机', model:'ashaj200', count: 20, manufacturer: 'xxxx'},
{name:'天上人间ktv', deviceType:'捕鱼机', model:'ashaj200', count: 20, manufacturer: 'xxxx'},
{name:'天上人间ktv', deviceType:'捕鱼机', model:'ashaj200', count: 20, manufacturer: 'xxxx'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "name" },
{ label: "电子游戏机", prop: "deviceType" },
{ label: "品牌型号", prop: "model" },
{ label: "数量", prop: "count" },
{ label: "厂商名称", prop: "manufacturer" },
{ label: "图片", prop: "image", slot: true }
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
}
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
// 获取列表
const getList = (val) =>{
// pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
// qcckPost(data,url).then(res=>{
// pageData.tableData = res.records || [];
// pageData.total = res.total;
// pageData.tableConfiger.loading = false;
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
}
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

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