This commit is contained in:
给我
2026-01-16 09:27:03 +08:00
118 changed files with 24490 additions and 4251 deletions

20487
package-lock.json generated

File diff suppressed because it is too large Load Diff

17
src/api/badwgl.js Normal file
View File

@ -0,0 +1,17 @@
import request from "@/utils/request";
const api = "/bagl/mosty-base";
export const getDwglnfo = (id) => {
return request({
url: api + "/baxx/dwgl/getInfo/" + id,
method: "POST",
});
};
export const editDwglEdit = (data) => {
return request({
url: api + "/baxx/dwgl/edit",
method: "POST",
data,
});
};

View File

@ -1,28 +0,0 @@
import request from "@/utils/request";
//获取用户所属区域数据
export function getUserArea(params = {}) {
return request({
url: "/mosty-base/other/getGajg",
method: "post",
params
});
}
// 获取方正cokie
export function getCokie(params) {
return request({
url: `/mosty-base/fzmsg/getCokie`,
method: "get",
params
});
}

View File

@ -1,70 +0,0 @@
//常用装备
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 下发
export function lssuedJyzb(data) {
return request({
url: api + '/tpJcglJyqx/xfJyqx',
method: 'POST',
data
})
}
// 回退
export function RellBackJyzb(params) {
return request({
url: api + '/tpJcglJyqx/htJyqx',
method: 'GET',
params
})
}
// 报损
export function ReportLossjYzb(params) {
return request({
url: api + '/tpJcglJyqx/bsJyqx',
method: 'GET',
params
})
}
// 分页查询
export function getJyqx(params) {
return request({
url: api + '/tpJcglJyqx/selectJyqx',
method: 'GET',
params
})
}
//新增
export function addJyqx(data) {
return request({
url: api + '/tpJcglJyqx/addJyqx',
method: "post",
data
})
}
//修改
export function putJyqx(data) {
return request({
url: api + '/tpJcglJyqx/updateJyqx',
method: "post",
data
})
}
//详情
export function infoJyqx(id) {
return request({
url: api + `/tpJcglJyqx/selectJyqxXq?id=${id}`,
method: "get"
})
}
//删除
export function delJyqx(data) {
return request({
url: api + `/tpJcglJyqx/deleteJyQxzb`,
method: "post",
data
})
}

View File

@ -1,53 +0,0 @@
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getTbJcglBq(params) {
return request({
url: api + '/tbJcglBq',
method: 'GET',
params
})
}
//新增
export function addTbJcglBq(data) {
return request({
url: api + '/tbJcglBq',
method: "post",
data
})
}
//修改
export function putTbJcglBq(data) {
return request({
url: api + '/tbJcglBq',
method: "put",
data
})
}
//详情
export function infoTbJcglBq(id) {
return request({
url: api + `/tbJcglBq/${id}`,
method: "get"
})
}
//删除
export function delTbJcglBq(id) {
return request({
url: api + `/tbJcglBq/${id}`,
method: "DELETE"
})
}
/**
* 注销标签
* @param {*} params
* @returns
*/
export const deleteTbJcglBq = (data) => {
return request({
url: `${api}/tbJcglBq/zcbqByIds`,
method: "put",
data
});
};

View File

@ -1,43 +0,0 @@
//专家库管理
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getTbJcglZjk(params) {
return request({
url: api + '/tbJcglZjk/queryList',
method: 'GET',
params
})
}
//新增
export function addTbJcglZjk(data) {
return request({
url: api + '/tbJcglZjk/insert',
method: "post",
data
})
}
//修改
export function putTbJcglZjk(data) {
return request({
url: api + '/tbJcglZjk/update',
method: "post",
data
})
}
//详情
export function infoTbJcglZjk(id) {
return request({
url: api + `/tbJcglZjk/selectById?id=${id}`,
method: "get"
})
}
//删除
export function delTbJcglZjk(ids) {
return request({
url: api + `/tbJcglZjk/delete`,
method: "post",
data:ids
})
}

View File

@ -1,70 +0,0 @@
//智能装备
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 下发
export function lssuedZnzb(data) {
return request({
url: api + '/tpjcglZnzb/xfZnzb',
method: 'POST',
data
})
}
// 回退
export function RellBackZnzb(params) {
return request({
url: api + '/tpjcglZnzb/htZnzb',
method: 'GET',
params
})
}
// 报损
export function ReportLossZnzb(params) {
return request({
url: api + '/tpjcglZnzb/bsZnzb',
method: 'GET',
params
})
}
// 分页查询
export function getZnzb(params) {
return request({
url: api + '/tpjcglZnzb/getZnzb',
method: 'GET',
params
})
}
//新增
export function addZnzb(data) {
return request({
url: api + '/tpjcglZnzb/addZnzb',
method: "post",
data
})
}
//修改
export function putZnzb(data) {
return request({
url: api + '/tpjcglZnzb/editZnzb',
method: "post",
data
})
}
//详情
export function infoZnzb(id) {
return request({
url: api + `/tpjcglZnzb/selectZbxq?id=${id}`,
method: "get"
})
}
//删除
export function delZnzb(data) {
return request({
url: api + `/tpjcglZnzb/deleteZnzb`,
method: "post",
data
})
}

View File

@ -1,43 +0,0 @@
//巡逻点位
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getBxd(params) {
return request({
url: api + '/tbJcglBxd/queryList',
method: 'GET',
params
})
}
//新增
export function addBxd(data) {
return request({
url: api + '/tbJcglBxd/addBxd',
method: "post",
data
})
}
//修改
export function putBxd(data) {
return request({
url: api + '/tbJcglBxd/updateBxd',
method: "post",
data
})
}
//详情
export function infoBxd(id) {
return request({
url: api + `/tbJcglBxd/selectById?id=${id}`,
method: "get"
})
}
//删除
export function delBxd(data) {
return request({
url: api + `/tbJcglBxd/deleteBxd`,
method: "post",
data
})
}

View File

@ -1,43 +0,0 @@
//巡防区域管理
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getXfqy(params) {
return request({
url: api + '/tbJcglXfqy/queryList',
method: 'GET',
params
})
}
//新增
export function addXfqy(data) {
return request({
url: api + '/tbJcglXfqy/addXfqy',
method: "post",
data
})
}
//修改
export function putXfqy(data) {
return request({
url: api + '/tbJcglXfqy/updateXfqy',
method: "post",
data
})
}
//详情
export function infoXfqy(id) {
return request({
url: api + `/tbJcglXfqy/selectById?id=${id}`,
method: "get"
})
}
//删除
export function delXfqy(data) {
return request({
url: api + `/tbJcglXfqy/deleteXfqy`,
method: "post",
data
})
}

View File

@ -1,43 +0,0 @@
//巡逻路线
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getBxx(params) {
return request({
url: api + '/tbJcglBxx/queryList',
method: 'GET',
params
})
}
//新增
export function addBxx(data) {
return request({
url: api + '/tbJcglBxx/addBxx',
method: "post",
data
})
}
//修改
export function putBxx(data) {
return request({
url: api + '/tbJcglBxx/updateBxx',
method: "post",
data
})
}
//详情
export function infoBxx(id) {
return request({
url: api + `/tbJcglBxx/selectById?id=${id}`,
method: "get"
})
}
//删除
export function delBxx(data) {
return request({
url: api + `/tbJcglBxx/deleteBxx`,
method: "post",
data
})
}

View File

@ -1,36 +0,0 @@
//警务站
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
//查询警务站列表
export function getPoliceStationList(params) {
return request({
url: api + '/tbJcglJwz/selectJwzList',
method: 'GET',
params
})
}
//删除警务站
export function deletePoliceStation(data) {
return request({
url: api + '/tbJcglJwz/deleteJwz',
method: 'POST',
data
})
}
//新增警务站
export function addPoliceStation(data) {
return request({
url: api + '/tbJcglJwz/addJwz',
method: 'POST',
data
})
}
//编辑警务站
export function updatePoliceStation(data) {
return request({
url: api + '/tbJcglJwz/updateJwz',
method: 'POST',
data
})
}

View File

@ -1,36 +0,0 @@
//快返点
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getKfd(params) {
return request({
url: api + '/tpJcglKfd/selectKfdList',
method: 'GET',
params
})
}
// 新增快返点
export function addKfd(data) {
return request({
url: api + '/tpJcglKfd/addKfd',
method: 'POST',
data
})
}
// 删除快返点
export function deleteKfd(data) {
return request({
url: api + '/tpJcglKfd/deleteKfd',
method: 'POST',
data
})
}
// 修改快返点
export function updateKfd(data) {
return request({
url: api + '/tpJcglKfd/updateKfd',
method: 'POST',
data
})
}

View File

@ -1,44 +0,0 @@
//勤务警组
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getJzList(params) {
return request({
url: api + '/tbJcglJz/queryList',
method: 'GET',
params
})
}
//新增
export function addJz(data) {
return request({
url: api + '/tbJcglJz/addJz',
method: 'POST',
data
})
}
//删除
export function deleteJz(data) {
return request({
url: api + '/tbJcglJz/deleteJz',
method: 'POST',
data
})
}
//详情
export function getJzInfo(id) {
return request({
url: api + `/tbJcglJz/selectByid?id=${id}`,
method: 'GET',
})
}
// 修改
export function updateJz(data) {
return request({
url: api + '/tbJcglJz/updateJz',
method: 'POST',
data
})
}

View File

@ -1,43 +0,0 @@
//社会安保力量
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getTbJcglShabll(params) {
return request({
url: api + '/tbJcglShabll',
method: 'GET',
params
})
}
//新增
export function addTbJcglShabll(data) {
return request({
url: api + '/tbJcglShabll',
method: "post",
data
})
}
//修改
export function putTbJcglShabll(data) {
return request({
url: api + '/tbJcglShabll',
method: "put",
data
})
}
//详情
export function infoTbJcglShabll(id) {
return request({
url: api + `/tbJcglShabll/${id}`,
method: "get"
})
}
//删除
export function delTbJcglShabll(ids) {
return request({
url: api + `/tbJcglShabll`,
method: "delete",
data:ids
})
}

View File

@ -1,49 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
//分页查询
export function getDsfList(params) {
return request({
url: api + '/dsf',
method: 'GET',
params
})
}
//新增
export function addDsf(data) {
return request({
url: api + '/dsf',
method: "post",
data
})
}
//修改
export function putDsf(data) {
return request({
url: api + '/dsf',
method: "put",
data
})
}
//修改第三方状态
export function putDsfZt(data) {
return request({
url: api + '/dsf/judge',
method: "post",
data
})
}
//详情
export function infoDsf(id) {
return request({
url: api + `/dsf/${id}`,
method: "get"
})
}
//删除
export function delDsf(ids) {
return request({
url: api + `/dsf?ids=${ids}`,
method: "delete"
})
}

View File

@ -1,82 +0,0 @@
// 巡防车辆管理
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
//查询巡防车辆列表
export function getXfcl(params) {
return request({
url: api + '/tpJcglXfcl/getXfclList',
method: 'get',
params
})
}
//新增巡防车辆
export function addXfcl(data) {
return request({
url: api + '/tpJcglXfcl/addXfcl',
method: "post",
data
})
}
//修改
export function upXfcl(data) {
return request({
url: api + '/tpJcglXfcl/updateXfcl',
method: "post",
data
})
}
//删除
export function delXfcl(ids) {
return request({
url: api + '/tpJcglXfcl/deleteXfcl',
method: 'post',
data:ids
})
}
//详情
export function infoXfcl(id) {
return request({
url: api + '/tpJcglXfcl/selectClxq?id=' + id,
method: 'get'
})
}
//查询车辆设备详情
export function infoXfsb(id) {
return request({
url: api + `/xfclSb/${id}`,
method: 'get'
})
}
//新增巡防车辆设备
export function addXfclsb(data) {
return request({
url: api + '/xfclSb',
method: "post",
data
})
}
//修改巡防车辆设备
export function upXfclsb(data) {
return request({
url: api + '/xfclSb',
method: "put",
data
})
}
//分页查询巡防车辆设备
export function getXfclsb(data) {
return request({
url: api + '/xfclSb/getPageList',
method: "post",
data
})
}
//删除巡防车辆设备
export function delXfclsb(ids) {
return request({
url: api + '/xfclSb',
method: 'delete',
data:ids
})
}

View File

@ -1,50 +0,0 @@
// 巡防装备管理
import request from "@/utils/request";
// const api = "/mosty-jmxf";
const api = "/mosty-api/mosty-jmxf";
// 查询装备树
export function getTree(data = '') {
return request({
url: api + `/tpJcglZbfl/zbTree/scode=${data}`,
method: 'get'
})
}
//查询装备列表
export function getZbfllist(params) {
return request({
url: api + '/tpJcglZbfl/selectLxList',
method: 'get',
params
})
}
//新增装备类型
export function addTpjcglzbfl(data) {
return request({
url: api + '/tpJcglZbfl/addZbfl',
method: "post",
data
})
}
//修改
export function upZbfl(data) {
return request({
url: api + '/tpJcglZbfl/editZbfl',
method: "put",
data
})
}
//删除
export function delZbfl(ids) {
return request({
url: api + '/tpJcglZbfl/deleteZbfl',
method: 'post',
data: ids
})
}
//详情
export function infoZbfl(id) {
return request({
url: api + '/tpjcglZnzb/selectZbxq?id=' + id,
method: 'get'
})
}

View File

@ -1,19 +0,0 @@
// 装备到期提醒
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 智能装备到期提醒列表
export function getZnzbTx(params) {
return request({
url: api + `/tpjcglZnzb/znzbDqtx`,
method: 'get',
params
})
}
// 常用装备到期提醒
export function getJyqxTx(params) {
return request({
url: api + `/tpJcglJyqx/jyqxDqtx`,
method: 'get',
params
})
}

View File

@ -1,81 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getYJModelList(params) {
return request({
url: api + '/tbYjmx',
method: 'GET',
params
})
}
//新增
export function addYJmodel(data) {
return request({
url: api + '/tbYjmx',
method: "post",
data
})
}
//修改
export function putYJmodel(data) {
return request({
url: api + '/tbYjmx',
method: "PUT",
data
})
}
//删除
export function delYJModel(id) {
return request({
url: api + `/tbYjmx/${id}`,
method: "delete"
})
}
// 模型参数
// 查询
export function getCsList(params) {
return request({
url: api + '/tbYjmxCsb',
method: 'GET',
params
})
}
// 新增
export function addCs(data) {
return request({
url: api + '/tbYjmxCsb',
method: "post",
data
})
}
// 修改
export function putCs(data) {
return request({
url: api + '/tbYjmxCsb',
method: "PUT",
data
})
}
// 删除
export function delCs(id) {
return request({
url: api + `/tbYjmxCsb/${id}`,
method: "delete"
})
}
// 启动停止
export function getCsDTQZ(id) {
return request({
url: api + `/tbYjmx/${id}`,
method: 'GET'
})
}

View File

@ -1,65 +0,0 @@
//车辆布控
import request from "@/utils/request";
const api = "/mosty-api/mosty-bkzx";
//新增
export function addCar(data) {
return request({
url: api + '/tbBkCl',
method: "post",
data
})
}
//修改
export function editCar(data) {
return request({
url: api + '/tbBkCl',
method: "put",
data
})
}
//批量删除
export function delCar(data) {
return request({
url: api + '/tbBkCl',
method: "delete",
data
})
}
//查询详情
export function getInfo(id) {
return request({
url: api + '/tbBkCl/' + id,
method: "get",
})
}
//结束布控
export function endBk(id) {
return request({
url: api + '/tbBkCl/endBk/' + id,
method: "post"
})
}
//结束布控
export function startBk(id) {
return request({
url: api + '/tbBkCl/startBk/' + id,
method: "post"
})
}
//分页查询
export function getCarList(params) {
return request({
url: api + '/tbBkCl',
method: "get",
params
})
}
// 布控人员审批
export function judgeCar(data) {
return request({
url: api + '/tbBkCl/judge',
method: "post",
data
})
}

View File

@ -1,82 +0,0 @@
import axios from 'axios';
import request from "@/utils/request";
const api = "/zdxx-prod-api/aisino";
//获取人员标签
export function getRytag(params) {
return request({
url: api + '/queryTags',
method: "get",
params
})
}
//获取重点人员信息
export function getPersonList(data) {
return request({
url: api + '/queryPerson',
method: "post",
data
})
}
//新增重点人员
export function addPerson(data) {
return request({
url: api + '/addPerson',
method: "post",
data
})
}
//修改重点人员
export function updatePerson(data) {
return request({
url: api + '/updatePerson',
method: "post",
data
})
}
//删除重点人员
export function deletePerson(data) {
return request({
url: api + '/deletePerson',
method: "post",
data
})
}
//查询车辆
export function getCarList(data) {
return request({
url: api + '/queryCar',
method: "post",
data
})
}
//添加车辆
export function addCar(data) {
return request({
url: api + '/addCar',
method: "post",
data
})
}
//修改车辆
export function updateCar(data) {
return request({
url: api + '/updateCar',
method: "post",
data
})
}
// 删除车辆
export function deleteCar(data) {
return request({
url: api + '/deleteCar',
method: "post",
data
})
}

View File

@ -1,65 +0,0 @@
//人员布控
import request from "@/utils/request";
const api = "/mosty-api/mosty-bkzx";
//新增
export function addPerson(data) {
return request({
url: api + '/tbBkRy',
method: "post",
data
})
}
//修改
export function editPerson(data) {
return request({
url: api + '/tbBkRy',
method: "put",
data
})
}
//批量删除
export function delPerson(data) {
return request({
url: api + '/tbBkRy',
method: "delete",
data
})
}
//查询详情
export function getInfo(id) {
return request({
url: api + '/tbBkRy/' + id,
method: "get",
})
}
//结束布控
export function endBk(id) {
return request({
url: api + '/tbBkRy/endBk/' + id,
method: "post"
})
}
//结束布控
export function startBk(id) {
return request({
url: api + '/tbBkRy/startBk/' + id,
method: "post"
})
}
//分页查询
export function getPersonList(params) {
return request({
url: api + '/tbBkRy',
method: "get",
params
})
}
// 布控人员审批
export function judgePerson(data) {
return request({
url: api + '/tbBkRy/judge',
method: "post",
data
})
}

View File

@ -1,7 +1,7 @@
//工作情况 //工作情况
import request from "@/utils/request"; import request from "@/utils/request";
///mosty-api ///mosty-api
const api = "/mosty-api"; const api = "/bagl/mosty-api";
// 在岗警力 | 街面力量 // 在岗警力 | 街面力量
export function getZgjlData(params = {}) { export function getZgjlData(params = {}) {
return request({ return request({

View File

@ -1,28 +0,0 @@
import request from "@/utils/otherRequest";
// 经纬度转换地址
export function getLocation (params = {}){
return request({
url: 'http://80.75.112.19:8080/reverse.php',
method: 'GET',
params
})
}
// 获取流地址
export function getVideoUrl (params = {}){
return request({
url: 'http://80.149.27.55/api/haikang/cameras/getws',
method: 'GET',
params
})
}
// 获取回放地址
export function getReplayUrl (params = {}){
return request({
url: 'http://80.149.27.55/api/haikang/cameras/replay',
method: 'GET',
params
})
}

View File

@ -1,7 +1,7 @@
//视频 //视频
import request from "@/utils/request"; import request from "@/utils/request";
///mosty-api ///mosty-api
const api = "/mosty-api"; const api = "/bagl/mosty-api";
// 获取周边视频 不分页 // 获取周边视频 不分页
export function getZbVideoList(data = {}) { export function getZbVideoList(data = {}) {
return request({ return request({

View File

@ -1,30 +0,0 @@
//工作情况
import request from "@/utils/request";
///mosty-api
const api = "/mosty-api";
// 巡组数量
export function getXfsltj(params = {}) {
return request({
url: api + '/mosty-jmxf/wztj/tj/xfsltj',
method: 'GET',
params
})
}
// 人员数量
export function getRysltj(params = {}) {
return request({
url: api + '/mosty-jmxf/wztj/tj/rysltj',
method: 'GET',
params
})
}
//设备数量
export function getSblswz(params = {}) {
return request({
url: api + '/mosty-jmxf/wztj/tj/sblswz',
method: 'GET',
params
})
}

View File

@ -1,7 +1,7 @@
//作战指挥 //作战指挥
import request from "@/utils/request"; import request from "@/utils/request";
///mosty-api ///mosty-api
const api = "/mosty-api"; const api = "/bagl/mosty-api";
// 获取参与警力数据统计 // 获取参与警力数据统计
export function getSelectOnCop(data = {}) { export function getSelectOnCop(data = {}) {
return request({ return request({

View File

@ -1,30 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-base";
/**
* 消息列表
* @param {*} params
* @returns
*/
export const getPageList = (params = {}) => {
return request({
url: api + "/sysMessage/getPageList",
method: "GET",
params
});
};
/**
* 发送消息
* @param {*} data
* @returns
*/
export const sendMsg = (data) => {
return request({
url: api + "/sysMessage/sendMsg",
method: "post",
data
});
};

View File

@ -1,13 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-base";
/*
* 登录
* return promise 实例对象
*/
export const getAddress = (params) => {
return request({
url: api + "/other/getAddress",
method: "get",
params
});
};

View File

@ -1,5 +1,5 @@
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf"; const api = "/bagl/mosty-api/mosty-jmxf";
// 大屏预警统计 // 大屏预警统计
export const getYjCount = (data) => { export const getYjCount = (data) => {
@ -119,7 +119,14 @@ export const zlZqtjxx = (data) => {
//文件下载 //文件下载
export function downFiles(id) { export function downFiles(id) {
return request({ return request({
url: `/mosty-api/mosty-base/minio/file/download/${id}`, url: `/bagl/mosty-base/minio/file/download/${id}`,
method: "get" method: "get"
}) })
} }
// 视频文件
export function downVideoFiles(id) {
return request({
url: `/bagl/mosty-base/AppUserConfig/image/url/${id}`,
method: "get"
})
}

View File

@ -1,83 +0,0 @@
import request from "@/utils/request";
///mosty-api
const api = "/mosty-api/mosty-jmxf";
// 群防群治
/**
* 添加群防群治
* @param {*} data
* @returns
*/
export function qfqzAdd(data = {}) {
return request({
url: api + '/jmxf/qfqz/add',
method: 'post',
data
})
}
/**
* 修改群防群治
* @param {*} data
* @returns
*/
export function qfqzEdit(data = {}) {
return request({
url: api + '/jmxf/qfqz/edit',
method: 'post',
data
})
}
/**
* 获取群防群治详情
* @param {*} params
* @returns
*/
export function qfqzSelectPage(data = {}) {
return request({
url: api + '/jmxf/qfqz/selectPage',
method: 'post',
data
})
}
/**
* 删除群防群治
* @param {*} data
* @returns
*/
export function qfqzDelete(id) {
return request({
url: api + `/jmxf/qfqz/delete/${id}`,
method: 'delete',
})
}
//新增路线规划
/**
* 新增路线规划
*/
export function tbQwXfAddBxx(data) {
return request({
url: api + `/tbQwXfbbGhlx/addBxx`,
method: 'post',
data
})
}
/**
* 删除路线规划
*/
export function tbQwXfAdeleteBxx(data) {
return request({
url: api + `/tbQwXfbbGhlx/deleteBxx`,
method: 'post',
data
})
}
/**
* 查询路线规划
*/
export function tbQwXfAselectById(params) {
return request({
url: api + `/tbQwXfbbGhlx/selecList`,
method: 'get',
params
})
}

View File

@ -1,12 +0,0 @@
//工作情况
import request from "@/utils/request";
const api = "/mosty-api";
export function getZgjlData(data = {}) {
return request({
url: api + '/mosty-jmxf/tbQwBmjlbb/selectOnCop',
method: 'GET',
data
})
}

View File

@ -1,84 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api";
// 柱状图数据
// 各区县巡防时长和里程
export function getXfscAndLcData(data) {
return request({
url: api + `/mosty-jmxf/tbQwXfbb/getXfscAndLc?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 各区县盘查工作
export function getGqxpData(data) {
return request({
url: api + `/mosty-jmxf/tbHcBpcry/getGqxpc?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 各区县重点巡防区域
export function getZdxfqyData(data) {
return request({
url: api + `/mosty-jmxf/tbJcglXfqy/getZdxfqy?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 各区县预警情况
export function getGqxyjqkData(data) {
return request({
url: api + `/mosty-jmxf//yjxx/getGqxyjqk?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 折线图数据
// 警情与巡防工作对比分析
export function getJqAndXfTjData(data) {
return request({
url: api + `/mosty-jmxf/tbJq/getJqAndXfTj?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 警情与盘查工作对比分析
export function getJqAndPcTjData(data) {
return request({
url: api + `/mosty-jmxf/tbJq/getJqAndPcTj?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 警情与重点区域巡逻对比分析
export function getJqandQyxfData(data) {
return request({
url: api + `/mosty-jmxf/tbJcglXfqy/getJqandQyxf?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}
// 警情与预警指令执行对比分析
export function getJqscAndZlTjfData(data) {
return request({
url: api + `/mosty-jmxf/yjxx/getJqscAndZlTj?kssj=${data.kssj}&jssj=${data.jssj}`,
method: 'POST',
data
})
}

View File

@ -1,55 +0,0 @@
//街面警情统计
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询警情列表
export function getJmjq(params) {
return request({
url: api + '/xftj/jmjq/jqlb',
method: 'GET',
params
})
}
//警情类型统计
export function getJqlxTj(params) {
return request({
url: api + '/xftj/jmjq/jqlxtj',
method: 'get',
params
})
}
//今日警情处置分析
export function getJrjqTj(params) {
return request({
url: api + '/tbJq/getjrjqczfx',
method: 'get',
params
})
}
//今日警情数量走势
export function getJrjqSlzs(params) {
return request({
url: api + '/tbJq/getJqBy24h',
method: 'get',
params
})
}
//今日警情预警
export function getJrjqYj(params) {
return request({
url: api + '/xftj/jmjq/jrjqyj',
method: 'get',
params
})
}
//警情趋势警情部门统计同比 环比
export function tbJqJqBmTj(params) {
return request({
url: api + '/tbJq/jqBmTj',
method: 'get',
params
})
}

View File

@ -1,19 +0,0 @@
//移动装备
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 移动装备统计
export function getYdzbTj(params) {
return request({
url: api + '/xftj/xfzytj/ydzb/bmtj',
method: 'GET',
params
})
}
// 移动装备列表
export function getYdzbList(params) {
return request({
url: api + '/xftj/xfzytj/ydzb/lbtj',
method: 'GET',
params
})
}

View File

@ -1,35 +0,0 @@
//巡防力量
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 车辆统计
export function getCarTj(params) {
return request({
url: api + '/xftj/xfzytj/xfll/clbmtj',
method: 'GET',
params
})
}
// 辅警统计
export function getFjTj(params) {
return request({
url: api + '/xftj/xfzytj/xfll/fjbmtj',
method: 'GET',
params
})
}
// 民警统计
export function getMjTj(params) {
return request({
url: api + '/xftj/xfzytj/xfll/mjbmtj',
method: 'GET',
params
})
}
// 柱状图统计
export function getBarTj(params) {
return request({
url: api + '/xftj/xfzytj/xfll/zttjz',
method: 'GET',
params
})
}

View File

@ -1,19 +0,0 @@
//感知源
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 设备列表
export function getSblist(data) {
return request({
url: api + '/xftj/xfzytj/gzy/bmlbtj',
method: 'post',
params:data
})
}
// 设备类型统计
export function getSbLx(data) {
return request({
url: api + '/xftj/xfzytj/gzy/sblxtj',
method: 'post',
params:data
})
}

View File

@ -1,19 +0,0 @@
//街面警务站
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 部门警务站列表
export function getBmJwzlist(params) {
return request({
url: api + '/xftj/xfzytj/jwz/bmlbtj',
method: 'GET',
params
})
}
// 部门警务站统计
export function getJwzTj(params) {
return request({
url: api + '/xftj/xfzytj/jwz/bmtjjwz',
method: 'GET',
params
})
}

View File

@ -1,84 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
//添加绩效考核部门
export const addKhbm = (data) => {
return request({
url: api + "/khbm/addKhbm",
method: "POST",
data
});
};
export const getPageList = (params) => {
return request({
url: api + "/khbm/getPageList",
method: "get",
params
});
};
// 批量删除
export function delKhbm(data) {
return request({
url: api + '/khbm/delKhbm ',
method: "delete",
data
})
}
//修改报备数量
export const editKhbm = (data) => {
return request({
url: api + "/khbm/editKhbm",
method: "POST",
data
});
};
//左边树形默认选中数据
export const getAllKhbm = () => {
return request({
url: api + `/khbm/getAllKhbm`,
method: "get",
});
};
//绩效考核查询借款
export const JXgetPageList = (data) => {
return request({
url: api + `/khtj/getPageList`,
method: "get",
params: data
});
};
//弹窗统计
export const getStatistics = (data) => {
return request({
url: api + `/khtj/getStatistics`,
method: "get",
params: data
});
};
//指令中心--首页指令周期统计信息
export const zlZqtjxx = (data) => {
return request({
url: api + `/tbZlxxtj/zlZqtjxx`,
method: "get",
params: data
});
};
//文件下载
export function downFiles(id) {
return request({
url: `/mosty-api/mosty-base/minio/file/download/${id}`,
method: "get"
})
};
//导出
export function exportJxkh(data) {
return request({
url: `/mosty-api/mosty-jmxf/khtj/export`,
method: "get",
params: data,
responseType:'blob'
})
};

View File

@ -1,91 +0,0 @@
//不巡防申请
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
const api2 = "/mosty-base";
//新增
export function addRw(data) {
return request({
url: api + "/tbRwTask/inner/addRw",
method: "POST",
data
});
}
//查询任务列表
export function getMySend(params) {
return request({
url: api + "/tbRwTask/inner/selectPage",
method: "get",
params
});
}
//根据任务ID修改任务状态
export function byIdEditStatus(data) {
return request({
url: api + "/tbRwTask/inner/changeRwState",
method: "post",
data
});
}
//查询任务列表
export function getRwList(params) {
return request({
url: api + ' /tbRwTask/inner/selectMyPage',
method: 'get',
params
})
}
//任务完成情况排名
export function getTaskRanking(params) {
return request({
url: api + "/tbRwTask/inner/getTaskRanking",
method: 'get',
params
})
}
//部门任务完成情况排名
export function getTaskByDept(params) {
return request({
url: api + "/tbRwTask/inner/getTaskByDept",
method: 'get',
params
})
}
//任务数量统计
export function getDataStatistics(params) {
return request({
url: api + "/tbRwTask/inner/getDataStatistics",
method: 'get',
params
})
}
//任务类型统计
export function getRWLXDataStatistics(params) {
return request({
url: api + "/tbRwTask/inner/getRWLXDataStatistics",
method: 'get',
params
})
}
//根据部门deptid获取所属分县局、所属地市州
export function getOrgByDeptId(deptid) {
return request({
url: api2 + `/deptFeign/getOrgByDeptId/${deptid}`,
method: 'get',
})
}
//通过任务id查询任务详情信息
export function getTaskInfo(id) {
return request({
url: api + `/tbRwTask/inner/getTaskInfo/${id}`,
method: 'get'
})
}

View File

@ -1,6 +1,6 @@
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf"; const api = "/mosty-api/mosty-jmxf";
const apibase = "/mosty-api/mosty-jmxf"; const apibase = "/bagl/mosty-api/mosty-jmxf";
export const http = { export const http = {

View File

@ -1,51 +0,0 @@
//不巡防申请
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getBxfsq(params) {
return request({
url: api + '/tbQwXfBxfsq',
method: 'GET',
params
})
}
//新增
export function addBxfsq(data) {
return request({
url: api + '/tbQwXfBxfsq',
method: 'POST',
data
})
}
//删除
export function deleteBxfsq(id) {
return request({
url: api + `/tbQwXfBxfsq/${id}`,
method: 'delete'
})
}
//详情
export function getBxfsqInfo(id) {
return request({
url: api + `/tbQwXfBxfsq/${id}`,
method: 'GET',
})
}
// 修改
export function updateBxfsq(data) {
return request({
url: api + '/tbQwXfBxfsq',
method: 'put',
data
})
}
// 审批
export function judgeBxfsq(data) {
return request({
url: api + '/tbQwXfBxfsq/judge',
method: 'put',
data
})
}

View File

@ -1,6 +1,6 @@
//勤务等级 //勤务等级
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf"; const api = "/bagl/mosty-api/mosty-jmxf";
// 分页查询 // 分页查询
export function getqwdj(params) { export function getqwdj(params) {
return request({ return request({

View File

@ -1,42 +0,0 @@
//人员请休假
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getQwQxj(params) {
return request({
url: api + '/tbQwQxj',
method: 'GET',
params
})
}
//新增
export function addQwQxj(data) {
return request({
url: api + '/tbQwQxj',
method: 'POST',
data
})
}
//删除
export function deleteQwQxj(id) {
return request({
url: api + `/tbQwQxj/${id}`,
method: 'delete'
})
}
//详情
export function getQwQxjInfo(id) {
return request({
url: api + `/tbQwQxj/${id}`,
method: 'GET',
})
}
// 修改
export function updateQwQxj(data) {
return request({
url: api + '/tbQwQxj',
method: 'put',
data
})
}

View File

@ -1,49 +0,0 @@
//警力报备
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getJlbb(params) {
return request({
url: api + '/tbQwBmjlbb',
method: 'GET',
params
})
}
//新增
export function addJlbb(data) {
return request({
url: api + '/tbQwBmjlbb',
method: 'POST',
data
})
}
//删除
export function deleteJlbb(id) {
return request({
url: api + `/tbQwBmjlbb/${id}`,
method: 'delete'
})
}
//详情
export function getJlbbInfo(id) {
return request({
url: api + `/tbQwBmjlbb/${id}`,
method: 'GET',
})
}
// 修改
export function updateJlbb(data) {
return request({
url: api + '/tbQwBmjlbb',
method: 'put',
data
})
}
//警力报备统计
export function getCountBmjlbb() {
return request({
url: api + '/tbQwBmjlbb/countBmjlbb',
method: "GET"
})
}

View File

@ -1,116 +0,0 @@
//值班排班
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getQwZb(params) {
return request({
url: api + '/tbQwZb',
method: 'GET',
params
})
}
// 查询我的值班记录
export function getQwZbByUser(params) {
return request({
url: api + '/tbQwZbpb/getMyZbpb',
method: 'GET',
params
})
}
//新增
export function addQwZb(data) {
return request({
url: api + '/tbQwZbpb',
method: 'POST',
data
})
}
//删除
export function deleteQwZb(id) {
return request({
url: api + `/tbQwZb/bacth?id=${id}`,
method: 'delete'
})
}
//详情
export function getQwZbInfo(id) {
return request({
url: api + `/tbQwZb/${id}`,
method: 'GET',
})
}
// 修改
export function updateQwZb(data) {
return request({
url: api + '/tbQwZb',
method: 'put',
data
})
}
//判断当条数据是否存在
export function judgeQwZb(data) {
return request({
url: api + '/tbQwZb/checkPb',
method: 'POST',
data
})
}
//值班排班新增
export function zbPbAdd(data) {
return request({
url: api + '/tbQwZbpb',
method: 'POST',
data
})
}
//值班排班新增
export function zbPbLook(params) {
return request({
url: api + '/tbQwZbpb',
method: 'GET',
params
})
}
//值班排班 获取详情
export function zbPbDetail(id) {
return request({
url: api + `/tbQwZbpb/${id}`,
method: 'GET',
})
}
//值班排班 修改
export function zbPbUpdate(data) {
return request({
url: api + '/tbQwZbpb',
method: 'PUT',
data
})
}
//值班排班 修改
export function zbPbDelete(data) {
return request({
url: api + '/tbQwZbpb',
method: 'DELETE',
data
})
}
//根据日期查询值班排班信息
export function getZbbbByMonth(params) {
return request({
url: api + '/tbQwZbpb/getZbbbByMonth',
method: 'GET',
params
})
}
//根据月份导出值班排班表
export function exportData(params) {
return request({
url: api + '/tbQwZbpb/exportData',
method: 'GET',
params
})
}

View File

@ -1,42 +0,0 @@
//勤务班次
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getQwbc(params) {
return request({
url: api + '/tbQwQwbc',
method: 'GET',
params
})
}
//新增
export function addQwbc(data) {
return request({
url: api + '/tbQwQwbc',
method: 'POST',
data
})
}
//删除
export function deleteQwbc(id) {
return request({
url: api + `/tbQwQwbc/${id}`,
method: 'delete'
})
}
//详情
export function getQwbcInfo(id) {
return request({
url: api + `/tbQwQwbc/${id}`,
method: 'GET',
})
}
// 修改
export function updateQwbc(data) {
return request({
url: api + '/tbQwQwbc',
method: 'put',
data
})
}

View File

@ -1,75 +0,0 @@
//巡防报备
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getXfbb(params) {
return request({
url: api + '/tbQwXfbb',
method: 'GET',
params
})
}
//新增
export function addXfbb(data) {
return request({
url: api + '/tbQwXfbb',
method: 'POST',
data
})
}
//删除
export function deleteXfbb(id) {
return request({
url: api + `/tbQwXfbb/${id}`,
method: 'delete'
})
}
//详情
export function getXfbbInfo(id) {
return request({
url: api + `/tbQwXfbb/${id}`,
method: 'GET',
})
}
// 修改
export function updateXfbb(data) {
return request({
url: api + '/tbQwXfbb',
method: 'POST',
data
})
}
//报备
export function xfbb(data) {
return request({
url: api + '/tbQwXfbb/startOrEndBb',
method: 'POST',
data
})
}
/**
* 查询我今天的报备new
* @param {*} id
*/
export function getMybbTodayNew() {
return request({
url: api + `/tbQwXfbb/getMybbTodayNew`,
method: 'GET',
})
}
/**
* APP获取我的排班信息
* @param {*} id
*/
export function getMyXfpbToday() {
return request({
url: api + `/tbQwXfpb/getMyXfpbToday`,
method: 'GET',
})
}

View File

@ -1,82 +0,0 @@
//巡防排班
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getXfpb(params) {
return request({
url: api + '/tbQwXfpb',
method: 'GET',
params
})
}
// 查询我的巡防排班
export function getXfpbByUser(params) {
return request({
url: api + '/tbQwXfpb/getMyXfpb',
method: 'GET',
params
})
}
//新增
export function addXfpb(data) {
return request({
url: api + '/tbQwXfpb',
method: 'POST',
data
})
}
//删除
export function deleteXfpb(id) {
return request({
url: api + `/tbQwXfpb/${id}`,
method: 'delete'
})
}
//详情
export function getXfpbInfo(id) {
return request({
url: api + `/tbQwXfpb/${id}`,
method: 'GET',
})
}
// 修改
export function updateXfpb(data) {
return request({
url: api + '/tbQwXfpb',
method: 'put',
data
})
}
//根据日期查询巡防排班信息
export function rlpbQuery(params) {
return request({
url: api + '/tbQwXfpb/rlpbQuery',
method: 'GET',
params
})
}
//查询本月巡防排班
export function getThisMonthPbList(params) {
return request({
url: api + '/tbQwXfpb/getThisMonthPbList',
method: 'GET',
params
})
}
//获取前一天警情数量
export function getJqNum(params) {
return request({
url: '/mosty-api/mosty-jmxf/tbJq/getJqCount',
method: "GET",
params
})
}
export function getPbbbByMonth(data) {
return request({
url: api + "/tbQwXfpb/getPbbbByMonth",
method: "GET",
params: data
});
};

View File

@ -1,19 +0,0 @@
//巡防排班
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 根据部门月份排班,报备情况
export function getPbbbByMonthBm(params) {
return request({
url: api + '/tbQwXfpb/getPbbbByMonthBm',
method: 'GET',
params
})
}
// 根据时间部门查询警力情况
export function getJlByBm(params) {
return request({
url: api + '/tbQwZbbb/getJlByBm',
method: 'GET',
params
})
}

View File

@ -1,73 +0,0 @@
//值班报备
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
export function getZbbb(params) {
return request({
url: api + '/tbQwZbbb',
method: 'GET',
params
})
}
//新增
export function addZbbb(data) {
return request({
url: api + '/tbQwZbbb',
method: 'POST',
data
})
}
//新增 结束报备
export function BbZbbb(data) {
return request({
url: api + '/tbQwZbbb/startOrEndBb',
method: 'POST',
data
})
}
//详情
export function getZbbbInfo(id) {
return request({
url: api + `/tbQwZbbb/${id}`,
method: 'GET',
})
}
// 修改
export function updateZbbb(data) {
return request({
url: api + '/tbQwZbbb',
method: 'put',
data
})
}
//删除
export function deletezBbb(id) {
return request({
url: api + '/tbQwZbbb/batch?ids=' + id,
method: 'delete'
})
}
/**
* APP获取我当前的值班报备信息
*/
export function getMyBbInfoToday() {
return request({
url: api + `/tbQwZbbb/getMyBbInfoToday`,
method: 'GET',
})
}
/**
* APP获取我的值班排班信息
*/
export function getMyZbpbToday() {
return request({
url: api + `/tbQwZbpb/getMyZbpbToday`,
method: 'GET',
})
}

View File

@ -1,38 +0,0 @@
import request from "@/utils/request";
const api1 = "/mosty-api/mosty-jmxf";
const api2 = "/mosty-api/mosty-jmxf";
/**
* 获取巡组列表
* @param {*} params
* jzMc
* pageCurrent
* pageSize
*/
export const getXfbbList = (params) => {
return request({
url: api1 + "/tbQwXfbb",
method: "get",
params
});
};
/**
* /tbZl/addZl
* 添加指令
*/
export const addZl = (data) =>{
return request({
url:api2 + '/tbZl/addZl',
method:"POST",
data
})
}
export const sendZl = (data) =>{
return request({
url:api2 + '/tbZl/zlHandle',
method:"POST",
data
})
}

View File

@ -2,7 +2,7 @@ import request from "@/utils/request";
// import { getCookie } from "@/utils/cookie"; // import { getCookie } from "@/utils/cookie";
import { getItem } from "@/utils/storage"; import { getItem } from "@/utils/storage";
const api = "/solrSearcher"; const api = "/solrSearcher";
const api2 = "/mosty-api/mosty-gsxt"; const api2 = "/bagl/mosty-api/mosty-gsxt";
/** /**
* 获取标准地址 * 获取标准地址
* @param {*} params * @param {*} params

View File

@ -1,38 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 新增安保风采数据
export function newAbfcData(data) {
return request({
url: api + '/abfc',
method: 'post',
data
})
}
// 获取列表
export function getListData(params) {
return request({
url: api + '/abfc',
method: 'get',
params
})
}
//修改数据
export function updateData(data) {
return request({
url: api + '/abfc',
method: 'put',
data
})
}
//删除数据
export function deleteData(id) {
return request({
url: api + '/abfc?ids=' + id,
method: 'delete',
})
}

View File

@ -1,5 +1,5 @@
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-base"; const api = "/bagl/mosty-base";
/* /*
* 登录 * 登录
* return promise 实例对象 * return promise 实例对象

View File

@ -1,102 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-base";
// 查询生成表数据
export function listTable(params) {
return request({
url: api + '/gen/list',
method: 'GET',
params
})
}
// 查询db数据库列表
export function listDbTable(query) {
return request({
url: api + '/gen/db/list',
method: 'GET',
params: query
})
}
// 查询表详细信息
export function getGenTable11(tableId) {
return request({
url: api + '/gen/' + tableId,
method: 'GET'
})
}
// 修改代码生成信息
export function updateGenTable(data) {
return request({
url: api + '/gen',
method: 'put',
data: data
})
}
// 导入表
export function importTable(data) {
return request({
url: api + '/gen/importTable',
method: 'POST',
params: data
})
}
// 预览生成代码
export function previewTable(tableId) {
return request({
url: api + '/gen/preview/' + tableId,
method: 'GET'
})
}
// 删除表数据
export function delTable(tableId) {
return request({
url: api + '/gen/' + tableId,
method: 'delete'
})
}
// 生成代码(自定义路径)
export function genCode(tableName) {
return request({
url: api + '/gen/genCode/' + tableName,
method: 'GET'
})
}
// 同步数据库
export function synchDb(tableName) {
return request({
url: api + '/gen/synchDb/' + tableName,
method: 'GET'
})
}
// 获取字典选择框列表
export function getDictOptionselect() {
return request({
url: '/system/dict/type/optionselect',
method: 'get'
})
}
// 查询菜单列表
export function listMenu(query) {
return request({
url: '/system/menu/list',
method: 'get',
params: query
})
}
// 根据经纬度获取位置信息 /other/getAddress
export function getAddress(query) {
return request({
url: api + '/other/getAddress',
method: 'get',
params: query
})
}

View File

@ -1,5 +1,5 @@
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-base"; const api = "/bagl/mosty-base";
/* /*
* 登录 * 登录
* return promise 实例对象 * return promise 实例对象

View File

@ -1,83 +0,0 @@
// 视频巡逻
import request from "@/utils/request";
const api = "/mosty-api";
//分页查询
export function getDataList(params) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfa/queryPage',
method: "get",
params
})
}
// 添加
export function addFa(data) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfa',
method: "post",
data
})
}
// 添加摄像头
export function addSxtPz(data) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfaSxt ',
method: "post",
data
})
}
// 修改摄像头
export function editSxtPz(data) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfaSxt',
method: "put",
data
})
}
// 修改
export function editFa(data) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfa',
method: "put",
data
})
}
// 查询详情
export function getInfo(id) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfa/' + id,
method: "get"
})
}
// 批量删除
export function deleteBatchs(data) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfa',
method: "delete",
data
})
}
//查询巡逻方案详情(包含摄像头信息)
export function getSpInfo(faid) {
return request({
url: api + '/mosty-jmxf/tbSpxlSpxlfaSxt?faid=' + faid,
method: "get",
})
}
//查询摄像头列表
export function getSxtList(data) {
return request({
url: api + '/mosty-yszx/tbYsSxt/getPageList',
method: "post",
data
})
}
//查询摄像头列表
export function getSxtAll(data) {
return request({
url: api + '/mosty-yszx/tbYsSxt/getList',
method: "POST",
data
})
}

View File

@ -1,10 +0,0 @@
// 视频巡逻-摄像头设置
import request from "@/utils/http";
const api = "/mosty-api/mosty-jmxf";
//查询巡逻方案详情(包含摄像头信息)
export function getSpInfo(faid) {
return request({
url: api + '/tbSpxlSpxlfaSxt?faid=' + faid,
method: "get",
})
}

View File

@ -1,10 +0,0 @@
//警情趋势
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
export function getJqqs(params){
return request({
url:api + '/tbJq/getJqBy24h',
method: "GET",
params
})
}

View File

@ -1,18 +0,0 @@
//预警信息
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getYjxxList(data) {
return request({
url: api + '/tbYjxx/getPageList',
method: 'post',
data
})
}
//详情
export function getInfo(id) {
return request({
url: api + `/tbYjxx/getInfo/${id}`,
method: "GET"
})
}

View File

@ -1,11 +0,0 @@
//预警指令
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 分页查询
export function getYjzlList(data) {
return request({
url: api + '/tbZl/selectInstructList',
method: "POST",
data
})
}

View File

@ -1,5 +1,5 @@
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf"; const api = "/bagl/mosty-api/mosty-jmxf";
/** /**
* 获取民警|辅警列表 * 获取民警|辅警列表
* @param {*} params * @param {*} params

View File

@ -1,34 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
/**
* 条件查询人员盘查信息
* @param {*} params
* @returns
*/
export const getRypcList = (data = {}) => {
return request({
url: api + "/tbHcBpcry/getRypcList",
method: "POST",
data
});
};
// 条件查询车辆盘查信息
export const getClpcList = (data = {}) => {
return request({
url: api + "/tbHcBpccl/getClpcList",
method: "POST",
data
});
};
//人员核查档案
export function getHjyjData(data){
return request({
url: "/mosty-api/mosty-base/other/getHjyjData",
method: "POST",
data
})
}

View File

@ -1,116 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
const api2 = "/mosty-api/mosty-jmxf";
/**
* 车辆预警排名
* @param {*} params
* @returns
*/
export const getCarYj = (params = {}) => {
return request({
url: api + "/yjzx/clyjpm",
method: "GET",
params
});
};
/**
* 各时段预警
* @param {*} params
* @returns
*/
export const getGsdYj = (params = {}) => {
return request({
url: api + "/tbYjxx/gsdyj",
method: "GET",
params
});
};
/**
* 各派出所预警
* @param {*} params
* @returns
*/
export const getPoliceYj = (params = {}) => {
return request({
url: api + "/yjzx/pcsyj",
method: "GET",
params
});
};
/**
* 感知源预警排名
* @param {*} params
* @returns
*/
export const getGzyYj = (data = {}) => {
return request({
url: api + "/yjzx/gzyyjpm",
method: "POST",
data
});
};
/**
* 人员预警排名
* @param {*} params
* @returns
*/
export const getManRankYj = (data = {}) => {
return request({
url: api + "/yjzx/ryyjpm",
method: "post",
data
});
};
/**
* 预警列表
* @param {*} params
* @returns
*/
export const getYjList = (params = {}) => {
return request({
url: api + "/tbYjxx/getPageList",
method: "POST",
data:params
});
};
/**
* 预警统计
* @param {*} params
* @returns
*/
export const getYjTj = (params = {}) => {
return request({
url: api + "/yjzx/yjtj",
method: "GET",
params
});
};
/**
* 右侧预警统计
* @param {*} params
* @returns
*/
export const getYcYjTj = (params = {}) => {
return request({
url: api + "/yjzx/ycyjtj",
method: "GET",
params
});
};
// 获取redis中的巡组的巡防轨迹信息
export const getXfgj = (params = {}) => {
return request({
url: api2 + "/gxga/xfbb/getXfgj",
method: "GET",
params
});
};

View File

@ -1,5 +1,5 @@
import request from "@/utils/request"; import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf"; const api = "/bagl/mosty-api/mosty-jmxf";
/** /**
* 要数列表 * 要数列表

View File

@ -1,20 +0,0 @@
import request from "@/utils/request";
const api = "/mosty-api/mosty-jmxf";
// 查询警情数据分页
export function getJqPage(params) {
return request({
url: api + '/tbJq/getPageList',
method: 'GET',
params
})
}
// 查询警情数据不分页
export function getJqNoPage(params) {
return request({
url: api + '/tbJq/getList',
method: 'GET',
params
})
}

View File

@ -99,6 +99,7 @@
overflow: auto; overflow: auto;
border: 1px solid #ccc; border: 1px solid #ccc;
top: 4px; top: 4px;
right: 10px; right: 10px;
left: 10px; left: 10px;
background-color: #fff; background-color: #fff;
@ -169,6 +170,10 @@
justify-content: space-between; justify-content: space-between;
line-height: 48px; line-height: 48px;
color: #000; color: #000;
position: sticky;
top: 0;
z-index: 10;
background: #fff;
} }
&::v-deep .el-form--inline { &::v-deep .el-form--inline {
@ -348,6 +353,7 @@
margin-top: 14px; margin-top: 14px;
} }
} }
.makerTitlezb{
.makerTitlezb {
color: orangered; color: orangered;
} }

View File

@ -0,0 +1,210 @@
<template>
<el-dialog :title="data.title" width="70%" :model-value="modelValue" append-to-body @close="closed" v-if="modelValue">
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="姓名">
<el-input placeholder="请输入姓名" v-model="listQuery.xm" clearabl></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.data.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table :loading="loading" @selection-change="handleSelectionChange" :row-key="keyid" height="450" ref="multipleUserRef" :data="tableData" border style="width: 100%">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column prop="ssbakk" align="center" label="保安公司名称"></el-table-column>
<el-table-column prop="njnf" align="center" label="年审年份"></el-table-column>
<el-table-column prop="xm" align="center" label="姓名"></el-table-column>
<el-table-column prop="sfzhm" align="center" label="身份证号码"></el-table-column>
<el-table-column prop="dh" align="center" label="电话"/>
<el-table-column prop="whcd" align="center" label="文化程度">
<template #default="{ row }">
<DictTag :value="row.whcd" :tag="false" :options="D_BZ_WHCD" />
</template>
</el-table-column>
<el-table-column prop="zsbh" align="center" label="证书编号"/>
<el-table-column prop="fwxymc" align="center" label="服务行业"/>
<el-table-column prop="rzsj" align="center" label="入职时间"/>
<el-table-column prop="sgxkhm" align="center" label="上岗证号码"/>
<el-table-column prop="pxgsShzt" align="center" label="审核状态">
<template #default="{ row }">
<DictTag :value="row.pxgsShzt" :tag="false" :options="D_BA_SHZT" />
</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="[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 { qcckPost } from "@/api/qcckApi";
import {getItem} from '@/utils/storage.js'
import * as MOSTY from "@/components/MyComponents/index";
import { defineProps, watch, ref, getCurrentInstance, nextTick, reactive } from "vue";
const { proxy } = getCurrentInstance();
const { D_BA_SHZT,D_BZ_WHCD } = proxy.$dict('D_BA_SHZT','D_BZ_WHCD');
const props = defineProps({
modelValue: {
type: Boolean,
required: true
},
data:{
type: Object,
default: {
title:'选择列表',
type:'wgy',//选择类型
Single:false,//是否单选
roleIds:[],//回显的数据
}
},
});
const emits = defineEmits(["update:modelValue", "choosedUsers",'close']);
const userInfo = getItem('userInfo');
const total = ref(0);
const loading = ref(false);
const listQuery = reactive({
pageCurrent: 1,
pageSize: 20
});
const tableData = ref([]);
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
watch(()=>props.modelValue, (val) => {
if (val) {
nextTick(() => {
getListData();
});
}
},{immediate: true});
const keyid = (row) => {
return row.id;
};
// 列表数据
const getListData = () => {
let params = {
...listQuery,
// pxgsShzt: "1",//培训公司已通过
sptz: "1",//已送培
sptzCompanyName:userInfo.pxgs,
sptzCompanyId:userInfo.pxgsid,
pxgsShzt:'1',//保安公司已通过
}
loading.value = true;
qcckPost(params,"/mosty-base/bans/njxx/page").then((res) => {
loading.value = false;
tableData.value = res?.records;
total.value = Number(res.total);
multipleUser();
}).catch(()=>{
loading.value = false;
});
};
//列表回显
function multipleUser() {
let ids = props.data.roleIds ? props.data.roleIds :[];
tableData.value.forEach((item) => {
if (ids.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.pageCurrent = currentPage;
getListData();
};
// 筛选
const handleFilter = () => {
listQuery.pageCurrent = 1;
getListData();
};
// 重置
const reset = () => {
listQuery.pageCurrent = 1
listQuery.pageSize = 10
getListData();
};
// pageSize 改变触发
const handleSizeChange = (currentSize) => {
listQuery.pageSize = currentSize;
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [],listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosedUsers", list);
emits("choosedUsersLeader", { userList: userList });
closed();
};
// 选择的数据
const handleSelectionChange = (val) => {
if (props.data.Single && val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
};
// 关闭
const closed = () => {
emits("update:modelValue", false);
emits("close");
};
</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 @@
<ChooseWGY v-if="['wgy'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseWGY> <ChooseWGY v-if="['wgy'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseWGY>
<!-- 保安 --> <!-- 保安 -->
<ChooseBA v-if="['ba'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseBA> <ChooseBA v-if="['ba'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseBA>
<!-- NJBAY -->
<ChooseNJBAY v-if="['Bay'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseNJBAY>
</template> </template>
<script setup> <script setup>
@ -14,6 +16,7 @@ import ChooseMFJ from "./ChooseMFJ/index.vue";
import ChooseQFQZ from "./ChooseQFQZ/index.vue"; import ChooseQFQZ from "./ChooseQFQZ/index.vue";
import ChooseWGY from "./ChooseWGY/index.vue"; import ChooseWGY from "./ChooseWGY/index.vue";
import ChooseBA from "./ChooseBA/index.vue"; import ChooseBA from "./ChooseBA/index.vue";
import ChooseNJBAY from "./ChooseNJBAY/index.vue";
import { reactive, ref, onMounted } from "vue"; import { reactive, ref, onMounted } from "vue";
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {

View File

@ -8,6 +8,7 @@
:key="item.value" :key="item.value"
:index="index" :index="index"
:class="item.elTagType" :class="item.elTagType"
:style="{'color': props.color}"
>{{ item.label }}</span> >{{ item.label }}</span>
<el-tag <el-tag
v-else v-else
@ -33,6 +34,10 @@ const props = defineProps({
type: Array, type: Array,
default: null default: null
}, },
color: {
type: String,
default: ''
},
tag: false, tag: false,
value: [Number, String, Array] value: [Number, String, Array]
}); });

View File

@ -534,10 +534,6 @@ export function MapUtil(map) {
_that._self[flag].push(line) _that._self[flag].push(line)
} }
/** /**
* 回显平面- 圆 - 多边形 - 矩形 * 回显平面- 圆 - 多边形 - 矩形
* @param {*} type 回显形状 * @param {*} type 回显形状

View File

@ -1,16 +1,16 @@
<template> <template>
<div class="form-item-box" :style="{ width: width }"> <div class="form-item-box" :style="{ width: width }">
<el-date-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'date'" v-model="modelValue" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width:100%" /> <el-date-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'date'" v-model="localValue" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width:100%" />
<el-time-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'time'" v-model="modelValue" placeholder="选择时间" style="width:100%" /> <el-time-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'time'" v-model="localValue" placeholder="选择时间" style="width:100%" />
<el-date-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'datetime'" v-model="modelValue" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择时间" style="width:100%" /> <el-date-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'datetime'" v-model="localValue" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择时间" style="width:100%" />
<el-date-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'datetimerange'" v-model="modelValue" 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-bind="$attrs" @change="changeTime" v-if="props.type == 'datetimerange'" v-model="localValue" 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-bind="$attrs" @change="changeTime" v-if="props.type == 'daterange'" v-model="modelValue" type="daterange" range-separator="To" value-format="YYYY-MM-DD" start-placeholder="选择开始日期" end-placeholder="选择开始日期" style="width:100%" /> <el-date-picker v-bind="$attrs" @change="changeTime" v-if="props.type == 'daterange'" v-model="localValue" type="daterange" range-separator="To" value-format="YYYY-MM-DD" start-placeholder="选择开始日期" end-placeholder="选择开始日期" style="width:100%" />
</div> </div>
</template> </template>
<script setup> <script setup>
import { COMPONENT_WIDTH } from "@/constant"; import { COMPONENT_WIDTH } from "@/constant";
import { defineProps, defineEmits } from "vue"; import { defineProps, defineEmits, ref, watch } from "vue";
const props = defineProps({ const props = defineProps({
//获取组件传值 //获取组件传值
placeholder: { placeholder: {
@ -33,6 +33,19 @@ const props = defineProps({
const emits = defineEmits(["update:modelValue"]); const emits = defineEmits(["update:modelValue"]);
// 创建本地 ref 来绑定值
const localValue = ref(props.modelValue);
// 监听本地值变化emit 事件
watch(localValue, (newVal) => {
emits("update:modelValue", newVal);
});
// 监听 props 变化,更新本地值
watch(() => props.modelValue, (newVal) => {
localValue.value = newVal;
});
const shortcuts = [ const shortcuts = [
{ {
text: "今天", text: "今天",

View File

@ -99,6 +99,8 @@ const handleChange = (e) => {
let obj = depList.value.find((item) => { let obj = depList.value.find((item) => {
return item.orgCode == data; return item.orgCode == data;
}); });
console.log(obj,'obj');
emits("getDepValue", obj); emits("getDepValue", obj);
} }
}; };

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="form-item-box" :style="{ width: width }"> <div class="form-item-box" :style="{ width: width }">
<el-input :placeholder="placeholder" v-bind="$attrs" v-model="modelValue" @input="onInput" ></el-input> <el-input :placeholder="placeholder" v-bind="$attrs" :model-value="modelValue" @input="onInput" ></el-input>
</div> </div>
</template> </template>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="Select-wrap" :style="{ width: width }"> <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-select :disabled="props.disabled" v-bind="$attrs" :model-value="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 v-for="item in dictEnum" :key="item.value" :label="item.zdmc || item.label" :value="item.dm || item.value">
</el-option> </el-option>
</el-select> </el-select>

View File

@ -18,6 +18,7 @@ import MarkdownEdit from "./MarkdownEdit/index.vue";
import FileUpload from "./FileUpload/index.vue"; import FileUpload from "./FileUpload/index.vue";
import Date from "./Date/index.vue"; import Date from "./Date/index.vue";
import Empty from "./Empty/index.vue"; import Empty from "./Empty/index.vue";
import CheckBox from "@/components/checkBox/index.vue";
export { export {
AddressSelect, AddressSelect,
FrameWork, FrameWork,
@ -38,5 +39,6 @@ export {
MarkdownEdit, MarkdownEdit,
FileUpload, FileUpload,
Date, Date,
Empty Empty,
CheckBox
}; };

View File

@ -14,8 +14,8 @@
style="width:100%" :min="item.min || 0" :max="item.max || 1000" /> style="width:100%" :min="item.min || 0" :max="item.max || 1000" />
<!--选择 select--> <!--选择 select-->
<MOSTY.Select v-else-if="item.type == 'select'" @change="handleNum" filterable :multiple="item.multiple" <MOSTY.Select v-else-if="item.type == 'select'" @change="handleNum" filterable :multiple="item.multiple"
v-model="listQuery[item.prop]" :dictEnum="item.options" width="100%" clearable v-model="listQuery[item.prop]" :collapse-tags="item.multiple" :dictEnum="item.options" width="100%"
:placeholder="`请选择${item.label}`" /> clearable :placeholder="`请选择${item.label}`" />
<!-- 选择性别 --> <!-- 选择性别 -->
<MOSTY.Sex v-else-if="item.type == 'Sex'" v-model:sex="listQuery[item.prop]" width="100%" clearable <MOSTY.Sex v-else-if="item.type == 'Sex'" v-model:sex="listQuery[item.prop]" width="100%" clearable
:placeholder="`请选择${item.label}`" /> :placeholder="`请选择${item.label}`" />
@ -24,16 +24,18 @@
v-model="listQuery[item.prop]" clearable filterable /> v-model="listQuery[item.prop]" clearable filterable />
<!-- 部门department --> <!-- 部门department -->
<MOSTY.Department style="width:100%" v-else-if="item.type === 'department'" clearable <MOSTY.Department style="width:100%" v-else-if="item.type === 'department'" clearable
:placeholder="listQuery.ssbm ? listQuery.ssbm : `请选择${item.label}`" v-model="listQuery[item.prop]" /> :placeholder="listQuery.ssbm ? listQuery.ssbm : `请选择${item.label}`"
@getDepValue="getdep($event, item.depMc)" v-model="listQuery[item.prop]" />
<!-- 时间选择 type: date/time/datetime/datetimerange/daterange--> <!-- 时间选择 type: date/time/datetime/datetimerange/daterange-->
<MOSTY.Date v-else-if="item.type == 'date'" :type="item.lx ? item.lx : 'date'" width="100%" clearable <MOSTY.Date v-else-if="item.type == 'date'" :type="item.lx ? item.lx : 'date'" width="100%" clearable
v-model="listQuery[item.prop]" /> v-model="listQuery[item.prop]" />
<!-- 上传 upload limit:'限制张数'--> <!-- 上传 upload limit:'限制张数'-->
<MOSTY.Upload v-else-if="item.type == 'upload'" :isAll="item.isAll" :key="item.prop" :showBtn="item.showBtn" :isImg="item.isImg" :limit="item.limit" width="100%" <MOSTY.Upload v-else-if="item.type == 'upload'" :isAll="item.isAll" :key="item.prop" :showBtn="item.showBtn"
v-model="listQuery[item.prop]" /> :isImg="item.isImg" :limit="item.limit" width="100%" v-model="listQuery[item.prop]" />
<!--选择checkbox --> <!--选择checkbox -->
<!-- <div v-else-if="item.type == 'checkbox'" >{{item.options }}</div> -->
<MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]" <MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]"
:checkList="item.options" :placeholder="`请选择${item.label}`" /> :m="item.options" :placeholder="`请选择${item.label}`" />
<!-- 单选radio --> <!-- 单选radio -->
<el-radio-group v-else-if="item.type == 'radio'" v-model="listQuery[item.prop]"> <el-radio-group v-else-if="item.type == 'radio'" v-model="listQuery[item.prop]">
@ -69,8 +71,8 @@
style="width:100%" :min="child.min || 0" :max="child.max || 1000" /> style="width:100%" :min="child.min || 0" :max="child.max || 1000" />
<!--选择 select--> <!--选择 select-->
<MOSTY.Select v-else-if="child.type == 'select'" @change="handleNum" filterable :multiple="child.multiple" <MOSTY.Select v-else-if="child.type == 'select'" @change="handleNum" filterable :multiple="child.multiple"
v-model="listQuery[child.prop]" :dictEnum="child.options" width="100%" clearable v-model="listQuery[child.prop]" :collapse-tags="child.multiple" :dictEnum="child.options" width="100%"
:placeholder="`请选择${child.label}`" /> clearable :placeholder="`请选择${child.label}`" />
<!-- 部门department --> <!-- 部门department -->
<MOSTY.Department style="width:100%" v-else-if="child.type === 'department'" clearable <MOSTY.Department style="width:100%" v-else-if="child.type === 'department'" clearable
v-model="listQuery[child.prop]" /> v-model="listQuery[child.prop]" />
@ -81,8 +83,10 @@
<MOSTY.Upload v-else-if="child.type == 'upload'" :isImg="child.isImg" :limit="child.limit" width="100%" <MOSTY.Upload v-else-if="child.type == 'upload'" :isImg="child.isImg" :limit="child.limit" width="100%"
v-model="listQuery[child.prop]" /> v-model="listQuery[child.prop]" />
<!--选择checkbox --> <!--选择checkbox -->
<MOSTY.CheckBox v-else-if="child.type == 'checkbox'" width="100%" clearable v-model="listQuery[child.prop]" <MOSTY.CheckBox v-else-if="child.type == 'checkbox'" width="100%" clearable v-model="listQuery[child.prop]"
:checkList="child.options" :placeholder="`请选择${child.label}`" /> :data="child.options" :placeholder="`请选择${child.label}`" />
<!-- 单选radio --> <!-- 单选radio -->
<el-radio-group v-else-if="child.type == 'radio'" v-model="listQuery[child.prop]"> <el-radio-group v-else-if="child.type == 'radio'" v-model="listQuery[child.prop]">
<el-radio v-for="obj in child.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-radio> <el-radio v-for="obj in child.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-radio>
@ -136,7 +140,15 @@ const submit = (resfun) => {
resfun(listQuery.value); resfun(listQuery.value);
}); });
}; };
const getdep = (e, val) => {
if (val) {
if (Array.isArray(e)) {
listQuery.value[val] = e ? e.map(item => item.orgName) : '';
} else {
listQuery.value[val] = e ? e.orgName : '';
}
}
}
const reset = () => { const reset = () => {
listQuery.value = {}; listQuery.value = {};
elform.value.resetFields(); elform.value.resetFields();
@ -148,7 +160,7 @@ const handleNum = (val) => {
}; };
watch(() => props.modelValue, (newVal) => { watch(() => props.modelValue, (newVal) => {
listQuery.value = newVal; //赋值 listQuery.value = newVal || {}; //赋值,确保 newVal 为 undefined 时设置为空对象
}, { immediate: true, deep: true }); }, { immediate: true, deep: true });
watch(() => listQuery.value, (newVal) => { watch(() => listQuery.value, (newVal) => {

View File

@ -1,20 +1,20 @@
<template> <template>
<div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''"> <div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''">
<!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据--> <!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据-->
<el-table <el-table
ref="multipleTableRef" ref="multipleTableRef"
:data="tableData" :data="tableData"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
:row-key="getConfiger.rowKey" :row-key="getConfiger.rowKey"
:border="getConfiger.border" :border="getConfiger.border"
:default-expand-all="getConfiger.defaultExpandAll" :default-expand-all="getConfiger.defaultExpandAll"
:stripe="getConfiger.stripe" :stripe="getConfiger.stripe"
:height="tableHeight" :height="tableHeight"
v-loading="tableConfiger.loading" v-loading="tableConfiger.loading"
:lazy="getConfiger.lazy" :lazy="getConfiger.lazy"
:load="load" :load="load"
:tree-props="treePros" :tree-props="treePros"
style="width: 100%" style="width: 100%"
:header-cell-class-name="() => 'HeadBgColor'" :header-cell-class-name="() => 'HeadBgColor'"
:highlight-current-row="getConfiger.showSelectType === 'radio'" :highlight-current-row="getConfiger.showSelectType === 'radio'"
:row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }"> :row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }">
@ -83,6 +83,8 @@ const props = defineProps({
// 可选的时候选择的数据 // 可选的时候选择的数据
const emit = defineEmits(["chooseData"]); const emit = defineEmits(["chooseData"]);
const multipleTableRef = ref(); const multipleTableRef = ref();
console.log(props.tableConfiger);
const currentRow = ref(); const currentRow = ref();
let getConfiger = reactive({ let getConfiger = reactive({
showSelectType: null, // 显示多选还是单选还是没有选择 checkBox/radio/null showSelectType: null, // 显示多选还是单选还是没有选择 checkBox/radio/null

View File

@ -1,8 +1,9 @@
<template> <template>
<div class="checkBox"> <div class="checkBox">
{{ data }}
<el-checkbox class="checkall" v-if="showAll" v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAll">全部</el-checkbox> <el-checkbox class="checkall" v-if="showAll" v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAll">全部</el-checkbox>
<el-checkbox-group v-model="hasChecked" @change="handleCheckedChange"> <el-checkbox-group v-model="hasChecked" @change="handleCheckedChange">
<el-checkbox v-for="(item,idx) in checkedList" :key="idx" :label="item">{{item}}</el-checkbox> <el-checkbox v-for="(item,idx) in checkedList" :key="idx" :label="item">{{item.zdmc}}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
</template> </template>
@ -20,6 +21,10 @@ const props = defineProps({
}, showAll: { }, showAll: {
type: Boolean, type: Boolean,
default: true default: true
},
m: {
type: Array,
default:()=>[]
} }
}); });
const checkAll = ref(false); const checkAll = ref(false);

224
src/components/steps.vue Normal file
View File

@ -0,0 +1,224 @@
<template>
<div>
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
<div class="steps-body">
<el-steps direction="vertical" :active="active" :space="90">
<el-step title="保安公司审核">
<template #description>
<div class="audit-description">
<div class="audit-time">{{ dataForm.bakkShsj || '未审核' }}<span class="audit-status"
v-if="dataForm.bakkShsj"
:class="{ 'status-pending': dataForm.bakkShzt == 0, 'status-pass': dataForm.bakkShzt == 1, 'status-reject': dataForm.bakkShzt == 2 }">{{
dataForm.bakkShzt == 0 ? '待审核' : dataForm.bakkShzt == 1 ? '通过' : '驳回' }}</span></div>
<div v-if="dataForm.bakkShzt == 2" class="reject-reason">
<span class="reject-label">驳回原因</span>
<span>{{ dataForm.bhyy || '未审核' }}</span>
</div>
</div>
</template>
</el-step>
<el-step title="培训公司审核">
<template #description>
<div class="audit-description">
<div class="audit-time">{{ dataForm.pxgsShsj || '未审核' }}
<span class="audit-status" v-if="dataForm.pxgsShsj"
:class="{ 'status-pending': dataForm.pxgsShzt == 0, 'status-pass': dataForm.pxgsShzt == 1, 'status-reject': dataForm.pxgsShzt == 2 }">{{
dataForm.pxgsShzt == 0 ? '待审核' : dataForm.pxgsShzt == 1 ? '通过' : '驳回' }}</span>
</div>
<div v-if="dataForm.pxgsShzt == 2" class="reject-reason">
<span class="reject-label">驳回原因</span>
<span>{{ dataForm.pxgsBhyy || '未审核' }}</span>
</div>
</div>
</template>
</el-step>
<el-step title="公安局审核" :description="dataForm.gonganShsj || '未审核'">
<template #description>
<div class="audit-description">
<div class="audit-time">{{ dataForm.gonganShsj || '未审核' }}
<span class="audit-status" v-if="dataForm.gonganShsj"
:class="{ 'status-pending': dataForm.gonganShzt == 0, 'status-pass': dataForm.gonganShzt == 1, 'status-reject': dataForm.gonganShzt == 2 }">{{
dataForm.gonganShzt == 0 ? '待审核' : dataForm.gonganShzt == 1 ? '通过' : '驳回' }}</span>
</div>
<div v-if="dataForm.gonganShzt == 2" class="reject-reason">
<span class="reject-label">驳回原因</span>
<span>{{ dataForm.gonganBhyy || '未审核' }}</span>
</div>
</div>
</template>
</el-step>
</el-steps>
</div>
</el-dialog>
</div>
</template>
<!-- :description="dataForm.pxgsShsj || '未审核'" -->
<script setup>
import { qcckPost } from "@/api/qcckApi.js";
import { ref, defineExpose } from 'vue';
const dialogForm = ref(false);
const active = ref(0)
const dataForm = ref({})
const init = (row) => {
let ids = [row.id]
qcckPost(ids, "/mosty-base/bans/njxx/getAuditStatusList").then(res => {
dialogForm.value = true;
let obj = res ? res[0] : {};
dataForm.value = obj;
active.value = Number(obj.currentAuditStage) - 1;
})
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
.steps-body {
height: 300px;
padding: 6px 10px 10px;
box-sizing: border-box;
}
.audit-description {
display: flex;
flex-direction: column;
gap: 4px;
margin: 10px 0;
}
.audit-time {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
}
.reject-reason {
font-size: 14px;
line-height: 18px;
margin-top: 4px;
padding: 6px 10px;
background-color: #fef2f2;
border-left: 3px solid #f87171;
border-radius: 0 4px 4px 0;
color: #dc2626;
}
.reject-label {
font-weight: 600;
margin-right: 4px;
}
.audit-status {
margin-left: 8px;
padding: 2px 8px;
border-radius: 10px;
font-size: 16px;
font-weight: 500;
}
.status-pending {
background-color: #f3f4f6;
color: #6b7280;
}
.status-pass {
background-color: #d1fae5;
color: #065f46;
}
.status-reject {
background-color: #fee2e2;
color: #b91c1c;
}
:deep(.steps-dialog .el-dialog__header) {
text-align: center;
padding: 20px 20px 10px;
}
:deep(.steps-dialog .el-dialog__title) {
font-size: 24px;
font-weight: 700;
color: #333;
}
:deep(.steps-dialog .el-dialog__body) {
padding: 0 20px 20px;
}
:deep(.steps-dialog .el-step__title) {
font-size: 18px;
font-weight: 600;
color: #333;
line-height: 22px;
}
:deep(.steps-dialog .el-step__description) {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
margin-top: 8px;
}
:deep(.steps-dialog .el-step__line) {
left: 8px;
background-color: transparent;
border-left: 1px dashed #dadada;
}
:deep(.steps-dialog .el-step.is-vertical .el-step__head) {
width: 24px;
}
:deep(.steps-dialog .el-step__icon) {
width: 16px;
height: 16px;
border-radius: 50%;
}
:deep(.steps-dialog .el-step__head.is-process .el-step__icon),
:deep(.steps-dialog .el-step__head.is-process .el-step__icon.is-text) {
background: #2e6bff;
border: none;
box-shadow: 0 0 0 5px rgba(46, 107, 255, 0.15);
}
:deep(.steps-dialog .el-step.is-wait .el-step__icon),
:deep(.steps-dialog .el-step.is-finish .el-step__icon) {
background: #fff;
border: 1px solid #dadada;
box-shadow: none;
}
:deep(.steps-dialog .el-step__icon-inner) {
display: none;
}
::v-deep .is-finish .el-step__icon {
background: #86b6f1;
}
::v-deep .el-dialog__close {
width: 30px;
height: 30px;
color: #fff;
svg {
width: 30px;
height: 30px;
}
}
::v-deep .el-dialog__headerbtn {
top: auto;
bottom: -60px;
border: 2px solid #fff;
color: #fff;
left: 50%;
transform: translateX(-50%);
border-radius: 50%;
}
</style>

View File

@ -35,7 +35,7 @@ const deptName = ref('');
const router = useRouter(); const router = useRouter();
onMounted(() => { onMounted(() => {
deptName.value = localStorage.getItem("deptId") ? JSON.parse(localStorage.getItem("deptId"))[0].deptName : '' deptName.value = localStorage.getItem("userInfo") ? JSON.parse(localStorage.getItem("userInfo")).pxgs || '' : ''
}) })
const active = ref(""); const active = ref("");
onMounted(() => { onMounted(() => {

View File

@ -1,5 +1,5 @@
<template> <template>
<el-sub-menu v-if="route.children.length > 0" :index="route.path"> <el-sub-menu v-if="route.children?.length > 0" :index="route.path">
<template #title> <template #title>
<MenuItem :title="route.meta.title" :icon="route.meta.icon"></MenuItem> <MenuItem :title="route.meta.title" :icon="route.meta.icon"></MenuItem>
</template> </template>
@ -15,6 +15,9 @@
<script setup> <script setup>
import MenuItem from './MenuItem.vue' import MenuItem from './MenuItem.vue'
import { defineProps } from 'vue'; import { defineProps } from 'vue';
// 导入自身组件以支持递归调用
import { defineAsyncComponent } from 'vue'
const SideBarItem = defineAsyncComponent(() => import('./SideBarItem.vue'))
defineProps({ defineProps({
route: { route: {

View File

@ -27,17 +27,25 @@ const store = useStore();
const router = useRouter(); const router = useRouter();
const routes = computed(() => { const routes = computed(() => {
const fRoutes = filterRoutes(router.getRoutes()); const fRoutes = filterRoutes(router.getRoutes());
console.log(fRoutes);
return generateMenus(fRoutes); return generateMenus(fRoutes);
}); });
if (!store.getters.token) { if (!store.getters.token) {
router.push("/login"); router.push("/login");
} }
// 改进路由初始化逻辑,避免无限刷新
if (router.getRoutes().length <= 7 && store.state.permission.routeReady <= 1) { if (router.getRoutes().length <= 7 && store.state.permission.routeReady <= 1) {
store.commit("user/setIsReady", {}); store.commit("user/setIsReady", {});
setTimeout(() => { // 使用一次性标记避免无限刷新
router.go(0); if (!window.routerInitialized) {
}, 200); window.routerInitialized = true;
setTimeout(() => {
router.go(0);
}, 200);
}
} }
//默认激活项 //默认激活项
const route = useRoute(); const route = useRoute();
const activeMenu = computed(() => { const activeMenu = computed(() => {

View File

@ -2,8 +2,10 @@
<el-scrollbar> <el-scrollbar>
<div class="meunAside noScollLine"> <div class="meunAside noScollLine">
<div style="height:100px"></div> <div style="height:100px"></div>
<div style="height: calc(100% - 100px);"><SideBarMenu></SideBarMenu></div> <div style="height: calc(100% - 100px);">
<SideBarMenu></SideBarMenu>
</div>
</div> </div>
</el-scrollbar> </el-scrollbar>
</template> </template>

View File

@ -1,55 +1,58 @@
import router from './router' import router from './router'
import Base64 from "base-64";
import store from './store' import store from './store'
import { import {
setItem,
getItem, getItem,
removeAllItem
} from "@/utils/storage"; } from "@/utils/storage";
// 白名单 // 白名单
const whiteList = ['/login','/', '/oatuh_login', '/sso_redirect', '/editPassword', '/404', '/401'] const whiteList = ['/login', '/oatuh_login', '/404', '/401', '/zeroTrust_login', '/focusExploration', '/clueVerification', '/deploymentApproval']
/** /**
* 路由前置守卫 * 路由前置守卫
* to 去哪里 * to 去哪里
* from 来自哪 * from 来自哪
* next 往下走 * next 往下走
*/ */
let onRun = true;
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
// 存在 token ,进入主页 // 存在 token ,进入主页
// if (store.state.user.token) { // if (store.state.user.token) {
// 快捷访问 // 快捷访问
// console.log(store.getters.token);
if (store.getters.token) { if (store.getters.token) {
// console.log("路由1");
// 判断用户资料是否获取 // 判断用户资料是否获取
// 若不存在用户信息,则需要获取用户信息 // 若不存在用户信息,则需要获取用户信息
// 触发获取用户信息的 action并获取用户当前权限 // 触发获取用户信息的 action并获取用户当前权限
await store.commit('permission/setRouteReady', true) store.commit('permission/setRouteReady', 1)
// 添加完动态路由之后,需要在进行一次主动跳转 // 添加完动态路由之后,需要在进行一次主动跳转
const afterMenuList = await getItem('menusPermission'); const afterMenuList = getItem('menusPermission');
// 处理用户权限,筛选出需要添加的权限 // 处理用户权限,筛选出需要添加的权限
if (store.state.permission.routes == 0) { // console.log(store.state.permission.routes);
if (store.state.permission.routes.length === 0) {
const filterRoutes = await store.dispatch('permission/filterRoutes', afterMenuList) const filterRoutes = await store.dispatch('permission/filterRoutes', afterMenuList)
filterRoutes.forEach(item => { filterRoutes.forEach(item => {
router.addRoute(item) router.addRoute(item)
}) })
// console.log("已添加动态路由");
next({ next({
...to, ...to,
replace: true replace: true
}) })
} else { } else {
// console.log('已存在路由');
next() next()
} }
// 利用 addRoute 循环添加 // 利用 addRoute 循环添加
} else { } else {
const isOatuh = getItem('isOatuh')
// 没有token的情况下可以进入白名单 // 没有token的情况下可以进入白名单
if (whiteList.indexOf(to.path) > -1) { if (whiteList.indexOf(to.path) > -1) {
// console.log("路由2");
next() next()
} else { } else {
if (isOatuh) { // 路由不在白名单中,重定向到登录页面
next('/oatuh_login') next('/login')
} else {
next('/login')
}
} }
} }
}) })

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,18 @@ import {
} from '@/router' } from '@/router'
function filter(data, menus) { function filter(data, menus) {
var newData = data.filter(x => menus ?.includes(x.name)) // 增加有效性检查,避免无限递归
newData.forEach(x => x.children && (x.children = filter(x.children, menus))) if (!Array.isArray(data) || !Array.isArray(menus)) {
return []
}
var newData = data.filter(x => x.name && menus.includes(x.name))
newData.forEach(x => {
if (x.children && Array.isArray(x.children)) {
x.children = filter(x.children, menus)
}
})
console.log("=============================");
return newData return newData
} }
export default { export default {
@ -39,28 +49,27 @@ export default {
* 根据权限筛选路由 * 根据权限筛选路由
*/ */
filterRoutes(context, menus) { filterRoutes(context, menus) {
let routes = [] try {
// 路由权限匹配 let routes = []
// menus.forEach(key => { // 路由权限匹配
// // 权限名 与 路由的 name 匹配 if (menus && Array.isArray(menus)) {
// routes.push(...privateRoutes.filter(item => item.name === key)) // 测试比对
// }) routes = filter(privateRoutes, menus)
// 最后添加 不匹配路由进入 404
/** routes.push({
* 树结构数据条件过滤 path: '/:catchAll(.*)',
* js 指定删除数组(树结构数据) redirect: '/404'
*/ })
//测试比对 }
routes = filter(privateRoutes, menus) context.commit('setRoutes', routes);
// 最后添加 不匹配路由进入 404 context.commit('setRouteReady', 1);
routes.push({ return routes
path: '/:catchAll(.*)', } catch (error) {
redirect: '/404' console.error('Error filtering routes:', error)
}) // 出错时至少保留公共路由
context.commit('setRoutes', routes); context.commit('setRoutes', []);
context.commit('setRouteReady', 1); return []
// context.commit('setRouteReady', true); }
return routes
} }
} }
} }

View File

@ -1,4 +1,4 @@
import {login,getUserInfo,getKaptcha,refreshToken,loginOut,Fzlogin } from "@/api/sys"; import { login, getUserInfo, getKaptcha, refreshToken, loginOut, Fzlogin } from "@/api/sys";
import { unifiedLogin } from "@/api/user-manage"; import { unifiedLogin } from "@/api/user-manage";
import Base64 from "base-64"; import Base64 from "base-64";
import { setItem, getItem, removeAllItem } from "@/utils/storage"; import { setItem, getItem, removeAllItem } from "@/utils/storage";
@ -62,32 +62,34 @@ export default {
*登录请求动作 *登录请求动作
*/ */
login(ctx, userInfo) { login(ctx, userInfo) {
const { userName, password, kaptcha } = userInfo;
const { userName, password, kaptcha } = userInfo;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login({ userName, password: Base64.encode(password), kaptcha }).then((data) => { login({ userName, password: Base64.encode(password), kaptcha }).then((data) => {
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);
this.commit("user/setUserName", data.userName); this.commit("user/setUserName", data.userName);
setItem('isOatuh', 0) setItem('isOatuh', 0)
setItem("USERNAME", data.userName); setItem("USERNAME", data.userName);
setItem("SFRH", data.sfrh); setItem("SFRH", data.sfrh);
setItem("USERID", data.userId); setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo); setItem("PermissionsInfo", data.permissionsInfo);
this.commit("user/setMenuList", data.menuList); this.commit("user/setMenuList", data.menuList);
setItem("menusPermission", data.menuCodeSet); setItem("menusPermission", data.menuCodeSet);
setItem("idEntityCard", data.idEntityCard); setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", { this.commit("user/setUserInfo", {
token: data.jwtToken, token: data.jwtToken,
permission: { buttonPermission: ["removeTest", "viewTest"],menus: data.menuCodeSet }, permission: { buttonPermission: ["removeTest", "viewTest"], menus: data.menuCodeSet },
menuList: data.menuList, menuList: data.menuList,
deptList: data.deptList deptList: data.deptList
}); });
} }
// 保存登录时间 // 保存登录时间
setTimeStamp(); setTimeStamp();
resolve(data); resolve(data);
}) })
.catch((err) => { .catch((err) => {
reject(err); reject(err);
}); });
@ -102,7 +104,7 @@ export default {
cookie cookie
}) })
.then((data) => { .then((data) => {
console.log(data,'data'); console.log(data, 'data');
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);

View File

@ -1,4 +1,4 @@
import path from "path"; import path from 'path'
/* /*
*获取所有的子集路由 *获取所有的子集路由
*/ */

View File

@ -73,6 +73,13 @@ const searchConfiger = ref([
placeholder: "请输入题目", placeholder: "请输入题目",
showType: "input" showType: "input"
}, },
{
label: "题目类型",
prop: "type",
placeholder: "请选择题目类型",
showType: "select",
options: D_BAXX_KTLX
},
]); ]);
const queryFrom = ref({}); const queryFrom = ref({});
@ -132,11 +139,11 @@ const getList = () => {
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
qcckPost(data, "/mosty-base/baxx/tkgl/page").then((res) => { qcckPost(data, "/mosty-base/baxx/tkgl/page").then((res) => {
console.log(res); console.log(res);
let arr = res.records || [] let arr = res.records || []
arr.forEach(item => { arr.forEach(item => {
item.correctAnswer = item.correctAnswer.split(',') item.correctAnswer =item.correctAnswer&&Array.isArray(item.correctAnswer) ? item.correctAnswer.join(',') : item.correctAnswer
}); });
console.log(arr);
pageData.tableData = arr; pageData.tableData = arr;
pageData.total = res.total; pageData.total = res.total;
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;

View File

@ -0,0 +1,336 @@
<template>
<el-dialog v-model="modelValue" width="50%" :show-close="false" center :fullscreen="fullscreen">
<!-- 使用title插槽替代header插槽Element Plus中通常使用title插槽自定义标题 -->
<template #title>
<div class="dialog-header-content">
<div class="dialog-title">{{ videoTitle }}</div>
<div class="dialog-header-actions">
<el-icon class="header-icon" @click="zoomBox"><FullScreen /></el-icon>
<el-icon class="header-icon" @click="handleClose"><Close /></el-icon>
</div>
</div>
</template>
<div class="video-container">
<!-- 视频播放区域 -->
<div
v-if="modelValue"
ref="videoPlayerRef"
class="video-player"
:style="{ height: playerHeight }"
>
<video
ref="videoRef"
class="video-element"
:src="url"
controls
autoplay
muted
playsinline
preload="auto"
@loadeddata="handleVideoLoaded"
@error="handleVideoError"
@stalled="handleVideoStalled"
>
</video>
</div>
</div>
</el-dialog>
</template>
<script setup>
import { ref, reactive, watch, onMounted, onBeforeUnmount, nextTick, computed } from "vue";
import { ElMessage } from "element-plus";
import { Loading } from '@element-plus/icons-vue';
import { downVideoFiles } from '@/api/instructCenter'
import { qcckPost , qcckGet} from "@/api/qcckApi.js";
// https://lam.clcud.com:1443/bagl/mosty-base/AppUserConfig/image/url/f1c7dd25d0fe45079b49de5ec4637923
// 定义组件属性
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
// 父组件传递的视频信息
listQuery: {
type: Object,
default: () => ({})
},
// 视频标题
videoTitle: {
type: String,
default: '测试'
}
});
// 定义组件事件
const emit = defineEmits(['update:modelValue', 'close']);
// 响应式数据
const videoPlayerRef = ref(null);
const videoRef = ref(null);
const player = ref(null);
const loading = ref(false);
const playing = ref(false);
const errorMessage = ref('');
const playerHeight = ref('60vh');
const fullscreen=ref(false);
const videoMuted = ref(true);
const url=ref('')
// 计算属性获取安全的视频源URL
const getVideoSrc = () => {
// 确保listQuery.fjid是字符串类型
const fjid = JSON.parse(props.listQuery.fjid)?.map(item => item.id).join(',') || '';
downVideoFiles(fjid).then(res => {
url.value=res
});
}
// 监听对话框显示状态
watch(() => props.modelValue, (newVal) => {
if (newVal) {
getVideoSrc()
} else {
// 对话框关闭时,销毁播放器
destroyPlayer();
}
});
const zoomBox = () => {
fullscreen.value = !fullscreen.value;
playerHeight.value = fullscreen.value ? '89vh' : '60vh';
};
// 停止播放
const stopPlay = () => {
try {
if (player.value) {
// 实际项目中这里应该是播放器的停止方法
// player.value.stop();
playing.value = false;
ElMessage.info('视频已停止');
}
} catch (error) {
console.error('停止播放失败:', error);
ElMessage.error('停止播放失败');
}
};
// 销毁播放器
const destroyPlayer = () => {
try {
if (player.value) {
// 实际项目中这里应该是播放器的销毁方法
// player.value.destroy();
player.value = null;
playing.value = false;
loading.value = false;
errorMessage.value = '';
console.log('播放器已销毁');
}
} catch (error) {
// console.error('销毁播放器失败:', error);
}
};
// 关闭对话框
const handleClose = () => {
stopPlay();
emit('update:modelValue', false);
emit('close');
};
// 视频加载完成后的处理
const handleVideoLoaded = () => {
console.log('视频数据加载完成');
if (videoRef.value) {
// 尝试播放视频
videoRef.value.play().then(() => {
console.log('视频播放成功');
playing.value = true;
}).catch(error => {
console.error('视频加载后自动播放失败:', error);
// 显示用户提示
ElMessage.warning('视频需要点击播放按钮开始播放');
});
}
};
// 视频错误处理
const handleVideoError = (event) => {
console.error('视频加载错误:', event.target.error);
errorMessage.value = `视频加载失败: ${getErrorMessage(event.target.error.code)}`;
loading.value = false;
};
// 视频卡顿处理
const handleVideoStalled = () => {
console.warn('视频加载卡顿,尝试重新加载');
if (videoRef.value) {
// 尝试重新加载视频
videoRef.value.load();
}
};
// 获取错误消息
const getErrorMessage = (errorCode) => {
const errorMessages = {
1: '用户中止了获取过程',
2: '网络错误导致获取过程失败',
3: '解码过程出错',
4: '媒体格式不支持',
5: '其他未知错误'
};
return errorMessages[errorCode] || '未知错误';
};
// 切换静音状态
const toggleMute = () => {
if (videoRef.value) {
videoRef.value.muted = !videoRef.value.muted;
videoMuted.value = videoRef.value.muted;
}
};
// 组件卸载前清理
onBeforeUnmount(() => {
destroyPlayer();
});
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.el-dialog {
.el-dialog__header {
background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
padding: 12px 24px;
margin: 0;
border-bottom: 2px solid #409eff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.el-dialog__body {
padding: 16px 24px 24px;
background-color: #0a0a0a;
color: white;
overflow: hidden;
}
}
// 头部内容样式
.dialog-header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
}
// 标题样式
.dialog-title {
color: #0b0b0b;
margin: 0;
font-weight: 500;
font-size: 18px;
line-height: 1.4;
}
// 头部操作按钮容器
.dialog-header-actions {
display: flex;
align-items: center;
gap: 16px;
}
// 头部图标样式
.header-icon {
width: 24px;
height: 24px;
color: #000000;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
padding: 2px;
&:hover {
background-color: rgba(255, 255, 255, 0.1);
color: #409eff;
transform: scale(1.1);
}
}
.video-container {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
.video-player {
width: 100%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
background-color: #000;
border-radius: 8px;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.5);
}
// 视频元素样式
.video-element {
width: 100%;
height: 100%;
object-fit: contain;
background-color: #000;
display: block;
}
.loading-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.7);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 10;
}
// 全屏状态下的样式增强
:deep(.el-dialog--fullscreen) {
.el-dialog__header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
}
.el-dialog__body {
margin-top: 60px; // 为固定头部留出空间
padding: 20px;
}
}
.video-controls {
margin-top: 15px;
display: flex;
gap: 10px;
justify-content: center;
}
.error-message {
margin-top: 15px;
width: 100%;
}
</style>

View File

@ -24,6 +24,7 @@
<el-link type="primary" link @click="addEdit('edit', row)">编辑</el-link> <el-link type="primary" link @click="addEdit('edit', row)">编辑</el-link>
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link> <el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
<el-link type="danger" link @click="handleDelete([row.id])">删除</el-link> <el-link type="danger" link @click="handleDelete([row.id])">删除</el-link>
<el-link type="primary" @click="videoDisplays(row)">视频播放</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@ -34,10 +35,13 @@
<!-- 详情 --> <!-- 详情 -->
<DetailForm ref="detailDiloag" @refresh="getList" /> <DetailForm ref="detailDiloag" @refresh="getList" />
</div> </div>
<VideoDisplay v-model="showVideoDisplay" :videoTitle="videoTitle" :listQuery="videoDisplayData"/>
</template> </template>
<script setup> <script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import VideoDisplay from "./components/videoDisplay.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
@ -45,6 +49,7 @@ import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const showVideoDisplay = ref(false)
const detailDiloag = ref(); const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const baseUrl = 'data:image/jpeg;base64,' const baseUrl = 'data:image/jpeg;base64,'
@ -71,7 +76,7 @@ const pageData = reactive({
pageSize: 20, pageSize: 20,
pageCurrent: 1 pageCurrent: 1
}, },
controlsWidth: 180, controlsWidth: 240,
tableColumn: [ tableColumn: [
{ label: "视频标题", prop: "spbt" }, { label: "视频标题", prop: "spbt" },
] ]
@ -137,6 +142,14 @@ const tabHeightFn = () => {
tabHeightFn(); tabHeightFn();
}; };
}; };
const videoDisplayData = ref();
const videoTitle=ref('');
// 视频播放
const videoDisplays = (val) => {
// videoTitle.value=val.spbt
showVideoDisplay.value = true
videoDisplayData.value = val
}
</script> </script>
<style> <style>

View File

@ -0,0 +1,210 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span>详情</span>
<div><el-button size="small" @click="close">关闭</el-button></div>
</div>
<div class="cntinfo">
<!-- 标签 -->
<ul class="tag-box">
<li class="tag_item" :class="detail.bakkShzt == 0 ? 'dsh_item' : detail.bakkShzt == 1 ? 'tgg_item' : 'jtb_item'">
<!-- 0-待审核 1-通过 2-驳回 -->
{{ detail.bakkShzt == 0 ? '待审核' : detail.bakkShzt == 1 ? '通过' : '驳回' }}
</li>
</ul>
<!-- 内容描述 -->
<el-descriptions class="desc" :column="3" border label-width="200px">
<el-descriptions-item label="保安公司名称">{{ detail.ssbakk }}</el-descriptions-item>
<el-descriptions-item label="年审年份">{{ detail.njnf }}</el-descriptions-item>
<el-descriptions-item label="姓名">{{ detail.xm }}</el-descriptions-item>
<el-descriptions-item label="身份证号码">{{ detail.sfzhm }}</el-descriptions-item>
<el-descriptions-item label="电话">{{ detail.dh }}</el-descriptions-item>
<el-descriptions-item label="性别">
<DictTag :value="detail.xb" :tag="false" :options="props.dic.D_BZ_XB" />
</el-descriptions-item>
<el-descriptions-item label="民族">
<DictTag :value="detail.mz" :tag="false" :options="props.dic.D_BZ_MZ" />
</el-descriptions-item>
<el-descriptions-item label="籍贯">{{ detail.jg }}</el-descriptions-item>
<el-descriptions-item label="文化程度">
<DictTag :value="detail.whcd" :tag="false" :options="props.dic.D_BZ_WHCD" />
</el-descriptions-item>
<el-descriptions-item label="证书编号">{{ detail.zsbh }}</el-descriptions-item>
<el-descriptions-item label="上岗证号码">{{ detail.sgxkhm }}</el-descriptions-item>
<el-descriptions-item label="服务行业">
<DictTag :value="detail.fwxy" :tag="false" :options="props.dic.D_BAXX_SSHY" />
</el-descriptions-item>
<el-descriptions-item label="服务行业名称">{{ detail.fwxymc }}</el-descriptions-item>
<el-descriptions-item label="入职时间">{{ detail.rzsj }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">
<DictTag :value="detail.zzmm" :tag="false" :options="props.dic.D_BZ_ZZMM" />
</el-descriptions-item>
<el-descriptions-item label="无犯罪记录证明">
<div class="img-grid one">
<el-image
:src="baseUrl + detail.wfbjlzm"
fit="cover"
:preview-src-list='[baseUrl + detail.wfbjlzm]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="体检报告">
<div class="img-grid one">
<el-image
:src="baseUrl + detail.tjbg"
fit="cover"
:preview-src-list='[baseUrl + detail.tjbg]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="身份证正反面">
<div class="img-grid two">
<el-image
:src="baseUrl + detail.sfzzm"
fit="cover"
:preview-src-list='[baseUrl + detail.sfzzm]'
preview-teleported
class="img"
/>
<el-image
:src="baseUrl + detail.sfzfm"
fit="cover"
:preview-src-list='[baseUrl + detail.sfzfm]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ detail.shsj }}</el-descriptions-item>
<el-descriptions-item label="发证机关">{{ detail.fqjg }}</el-descriptions-item>
<el-descriptions-item label="发证日期">{{ detail.fqsj }}</el-descriptions-item>
<el-descriptions-item label="驳回原因" :span="3" v-if="detail.bakkShzt == 2">{{ detail.bhyy }}</el-descriptions-item>
</el-descriptions>
</div>
</div>
</template>
<script setup>
import { ref, computed, defineEmits, getCurrentInstance,defineProps } from 'vue';
import { qcckPost } from "@/api/qcckApi.js";
const emit = defineEmits(["refresh"]);
const { proxy } = getCurrentInstance();
const baseUrl = '/bagl/mosty-base/minio/image/download/'
const props = defineProps({
dic: {
default: [[]], //二维数组
type: Array
}
})
const dialogForm = ref(false);
const listQuery = ref({});
const detail = ref({})
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
qcckPost({},'/mosty-base/bans/njxx/getInfo/'+row.id).then(res => {
let zj = res.sfzzfmj.split(',');
res.sfzzm = [zj[0]];
res.sfzfm = [zj[1]];
detail.value = res || {};
})
};
const close = () => {
dialogForm.value = false;
detail.value = {};
};
defineExpose({ init })
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.mapBox {
width: calc(100% - 24rem);
height: 500px;
overflow: hidden;
margin: 0 12rem;
}
.cntinfo{
position: relative;
padding: 10px 20px;
box-sizing: border-box;
.tag-box{
position: absolute;
top: 20px;
right: 50px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 99999;
.tag_item{
width: 70px;
height: 70px;
border-radius: 50%;
line-height: 65px;
text-align: center;
font-size: 16px;
margin-bottom: 20px;
}
.jtb_item{
border: 5px solid #FA3758;
color: #FA3758;
background: rgba(250,55,88,0.2);
}
.tgg_item{
color: #28EEBF;
background: rgba(40,238,191,0.2);
border: 5px solid #28EEBF;
}
.dsh_item{
background: rgba(0,114,255,0.2);
color: #0072FF;
border: 5px solid #0072FF;
}
}
}
.desc {
width: 100%;
}
.img-grid {
display: flex;
align-items: center;
gap: 10px;
min-height: 70px;
}
.img-grid.one .img,
.img-grid.one .img-placeholder {
width: 64px;
height: 64px;
}
.img-grid.two .img,
.img-grid.two .img-placeholder {
width: 64px;
height: 64px;
}
.img-placeholder {
background: #d9d9d9;
border-radius: 2px;
}
::v-deep .el-descriptions__label.el-descriptions__cell.is-bordered-label{
background: #F6FAFF;
}
</style>

View File

@ -0,0 +1,138 @@
<template>
<div>
<el-dialog class="steps-dialog" title="审核" v-model="dialogForm" :close-on-click-modal="false" @close="dialogForm = false,formData = {}" width="420px">
<el-form :model="formData" ref="formRef" :rules="rules" label-width="120px">
<el-form-item label="是否通过" prop="auditStatus">
<el-radio-group v-model="formData.auditStatus">
<el-radio label="1">通过</el-radio>
<el-radio label="0">不通过</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="驳回原因" prop="rejectReason" v-if="formData.auditStatus === '0'">
<el-input v-model="formData.rejectReason" type="textarea" placeholder="请输入驳回原因" :autosize="{ minRows: 2, maxRows: 4 }" />
</el-form-item>
<div class="flex just-center">
<el-button @click="dialogForm = false,formData = {}">取消</el-button>
<el-button type="primary" :loading="loading" @click="submitForm">提交</el-button>
</div>
</el-form>
</el-dialog>
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import { ref, defineExpose,defineEmits } from 'vue';
import { qcckPost } from "@/api/qcckApi.js";
const emit = defineEmits(['refresh'])
const dialogForm = ref(false);
const loading = ref(false)
const formData = ref({})
const rules = ref({
auditType: [{ required: true, message: '请选择审核类型', trigger: 'blur' }],
auditStatus: [{ required: true, message: '请选择是否通过', trigger: 'blur' }],
rejectReason: [{ required: true, message: '请输入驳回原因', trigger: 'blur' }],
})
const formRef = ref();
const idsVal = ref([])
const init = (ids) => {
idsVal.value = ids;
dialogForm.value = true;
}
const submitForm = () =>{
formRef.value.validate((valid) => {
if (!valid) return;
loading.value = true;
// // 保安公司审核 - bakk 培训公司审核 -- pxgs 公安局审核 -- gongan
let params = { ...formData.value,ids:idsVal.value,auditType:'bakk' }
qcckPost(params,"/mosty-base/bans/njxx/batchAudit").then((res) => {
loading.value = false;
ElMessage.success("操作成功");
dialogForm.value = false;
formData.value={}
emit('refresh')
}).catch(()=>{
loading.value = false;
});
});
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
.steps-body {
height: 260px;
padding: 6px 10px 10px;
box-sizing: border-box;
}
:deep(.steps-dialog .el-dialog__header) {
text-align: center;
padding: 20px 20px 10px;
}
:deep(.steps-dialog .el-dialog__title) {
font-size: 24px;
font-weight: 700;
color: #333;
}
:deep(.steps-dialog .el-dialog__body) {
padding: 0 20px 20px;
}
:deep(.steps-dialog .el-step__title) {
font-size: 18px;
font-weight: 600;
color: #333;
line-height: 22px;
}
:deep(.steps-dialog .el-step__description) {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
margin-top: 8px;
}
:deep(.steps-dialog .el-step__line) {
left: 8px;
background-color: transparent;
border-left: 1px dashed #dadada;
}
:deep(.steps-dialog .el-step.is-vertical .el-step__head) {
width: 24px;
}
:deep(.steps-dialog .el-step__icon) {
width: 16px;
height: 16px;
border-radius: 50%;
}
:deep(.steps-dialog .el-step__head.is-process .el-step__icon),
:deep(.steps-dialog .el-step__head.is-process .el-step__icon.is-text) {
background: #2e6bff;
border: none;
box-shadow: 0 0 0 5px rgba(46, 107, 255, 0.15);
}
:deep(.steps-dialog .el-step.is-wait .el-step__icon),
:deep(.steps-dialog .el-step.is-finish .el-step__icon) {
background: #fff;
border: 1px solid #dadada;
box-shadow: none;
}
:deep(.steps-dialog .el-step__icon-inner) {
display: none;
}
::v-deep .is-finish .el-step__icon{
background: #86b6f1;
}
</style>

View File

@ -0,0 +1,224 @@
<template>
<div>
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
<div class="steps-body">
<el-steps direction="vertical" :active="active" :space="90">
<el-step title="保安公司审核">
<template #description>
<div class="audit-description">
<div class="audit-time">{{ dataForm.bakkShsj || '未审核' }}<span class="audit-status"
v-if="dataForm.bakkShsj"
:class="{ 'status-pending': dataForm.bakkShzt == 0, 'status-pass': dataForm.bakkShzt == 1, 'status-reject': dataForm.bakkShzt == 2 }">{{
dataForm.bakkShzt == 0 ? '待审核' : dataForm.bakkShzt == 1 ? '通过' : '驳回' }}</span></div>
<div v-if="dataForm.bakkShzt == 2" class="reject-reason">
<span class="reject-label">驳回原因</span>
<span>{{ dataForm.bhyy || '未审核' }}</span>
</div>
</div>
</template>
</el-step>
<el-step title="培训公司审核">
<template #description>
<div class="audit-description">
<div class="audit-time">{{ dataForm.pxgsShsj || '未审核' }}
<span class="audit-status" v-if="dataForm.pxgsShsj"
:class="{ 'status-pending': dataForm.pxgsShzt == 0, 'status-pass': dataForm.pxgsShzt == 1, 'status-reject': dataForm.pxgsShzt == 2 }">{{
dataForm.pxgsShzt == 0 ? '待审核' : dataForm.pxgsShzt == 1 ? '通过' : '驳回' }}</span>
</div>
<div v-if="dataForm.pxgsShsj == 2" class="reject-reason">
<span class="reject-label">驳回原因</span>
<span>{{ dataForm.pxgsBhyy || '未审核' }}</span>
</div>
</div>
</template>
</el-step>
<el-step title="公安局审核" :description="dataForm.gonganShsj || '未审核'">
<template #description>
<div class="audit-description">
<div class="audit-time">{{ dataForm.gonganShsj || '未审核' }}
<span class="audit-status" v-if="dataForm.gonganShsj"
:class="{ 'status-pending': dataForm.gonganShzt == 0, 'status-pass': dataForm.gonganShzt == 1, 'status-reject': dataForm.gonganShzt == 2 }">{{
dataForm.gonganShzt == 0 ? '待审核' : dataForm.gonganShzt == 1 ? '通过' : '驳回' }}</span>
</div>
<div v-if="dataForm.gonganShsj == 2" class="reject-reason">
<span class="reject-label">驳回原因</span>
<span>{{ dataForm.gonganBhyy || '未审核' }}</span>
</div>
</div>
</template>
</el-step>
</el-steps>
</div>
</el-dialog>
</div>
</template>
<!-- :description="dataForm.pxgsShsj || '未审核'" -->
<script setup>
import { qcckPost } from "@/api/qcckApi.js";
import { ref, defineExpose } from 'vue';
const dialogForm = ref(false);
const active = ref(0)
const dataForm = ref({})
const init = (row) => {
let ids = [row.id]
qcckPost(ids, "/mosty-base/bans/njxx/getAuditStatusList").then(res => {
dialogForm.value = true;
let obj = res ? res[0] : {};
dataForm.value = obj;
active.value = Number(obj.currentAuditStage) - 1;
})
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
.steps-body {
height: 300px;
padding: 6px 10px 10px;
box-sizing: border-box;
}
.audit-description {
display: flex;
flex-direction: column;
gap: 4px;
margin: 10px 0;
}
.audit-time {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
}
.reject-reason {
font-size: 14px;
line-height: 18px;
margin-top: 4px;
padding: 6px 10px;
background-color: #fef2f2;
border-left: 3px solid #f87171;
border-radius: 0 4px 4px 0;
color: #dc2626;
}
.reject-label {
font-weight: 600;
margin-right: 4px;
}
.audit-status {
margin-left: 8px;
padding: 2px 8px;
border-radius: 10px;
font-size: 16px;
font-weight: 500;
}
.status-pending {
background-color: #f3f4f6;
color: #6b7280;
}
.status-pass {
background-color: #d1fae5;
color: #065f46;
}
.status-reject {
background-color: #fee2e2;
color: #b91c1c;
}
:deep(.steps-dialog .el-dialog__header) {
text-align: center;
padding: 20px 20px 10px;
}
:deep(.steps-dialog .el-dialog__title) {
font-size: 24px;
font-weight: 700;
color: #333;
}
:deep(.steps-dialog .el-dialog__body) {
padding: 0 20px 20px;
}
:deep(.steps-dialog .el-step__title) {
font-size: 18px;
font-weight: 600;
color: #333;
line-height: 22px;
}
:deep(.steps-dialog .el-step__description) {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
margin-top: 8px;
}
:deep(.steps-dialog .el-step__line) {
left: 8px;
background-color: transparent;
border-left: 1px dashed #dadada;
}
:deep(.steps-dialog .el-step.is-vertical .el-step__head) {
width: 24px;
}
:deep(.steps-dialog .el-step__icon) {
width: 16px;
height: 16px;
border-radius: 50%;
}
:deep(.steps-dialog .el-step__head.is-process .el-step__icon),
:deep(.steps-dialog .el-step__head.is-process .el-step__icon.is-text) {
background: #2e6bff;
border: none;
box-shadow: 0 0 0 5px rgba(46, 107, 255, 0.15);
}
:deep(.steps-dialog .el-step.is-wait .el-step__icon),
:deep(.steps-dialog .el-step.is-finish .el-step__icon) {
background: #fff;
border: 1px solid #dadada;
box-shadow: none;
}
:deep(.steps-dialog .el-step__icon-inner) {
display: none;
}
::v-deep .is-finish .el-step__icon {
background: #86b6f1;
}
::v-deep .el-dialog__close {
width: 30px;
height: 30px;
color: #fff;
svg {
width: 30px;
height: 30px;
}
}
::v-deep .el-dialog__headerbtn {
top: auto;
bottom: -60px;
border: 2px solid #fff;
color: #fff;
left: 50%;
transform: translateX(-50%);
border-radius: 50%;
}
</style>

View File

@ -0,0 +1,238 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="保安员年检管理" >
<el-button type="primary" @click="onBatchAudit(selectedRows)">批量审核</el-button>
<!-- <el-button type="primary" @click="handleItemSp(selectedRows)">批量送培</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 #whcd="{ row }">
<DictTag :value="row.whcd" :tag="false" :options="D_BZ_WHCD" />
</template>
<template #fwxy="{ row }">
<DictTag :value="row.fwxy" :tag="false" :options="D_BAXX_SSHY" />
</template>
<template #bakkShzt="{ row }">
<DictTag :value="row.bakkShzt" :tag="false" :color="row.bakkShzt == 0 ? '#ff0000' : row.bakkShzt == 1 ? '#28EEBF' : '#FA3758'" :options="D_BA_SHZT" />
</template>
<template #sptz="{ row }">
<DictTag :value="row.sptz" :tag="false" :options="D_BA_SPZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<!--currentAuditStage 当前审核阶段1-保安公司审核阶段2-培训公司审核阶段3-公安局审核阶段4-审核完成 -->
<el-link type="primary" link @click="onBatchAudit([row.id])" v-if="row.bakkShzt == 0">立即审核</el-link>
<el-link type="primary" link @click="addEdit('RefSteap', row)">审核流程</el-link>
<!-- <el-link type="primary" link @click="handleItemSp([row.id])" v-if="row.sptz == 0 && row.bakkShzt == 1">送培</el-link> -->
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" :dic="{D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD}"/>
<!-- 审核流程 -->
<Steps ref="RefSteap" ></Steps>
<!-- 审核 -->
<ShForm ref="shForm" @refresh="getList" />
</div>
</template>
<script setup>
import { getItem } from "@/utils/storage";
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 Steps from "./components/steps.vue";
import Steps from '@/components/steps.vue'
import ShForm from "./components/shForm.vue";
import { qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { ElMessage } from "element-plus";
const { proxy } = getCurrentInstance();
const { D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD } = proxy.$dict('D_BZ_ZZMM','D_BZ_XB','D_BZ_MZ','D_BA_SHZT','D_BAXX_SSHY','D_BA_SPZT','D_BZ_WHCD');
const userInfo = getItem('userInfo');
const detailDiloag = ref();
const RefSteap = ref();
const shForm = ref();
const searchBox = ref(); //搜索框
const selectedRows = ref([]);
const searchConfiger = ref([
{
label: "姓名",
prop: "xm",
showType: "input"
},
{
label: "身份证号码",
prop: "sfzhm",
showType: "input"
},
{
label: "电话",
prop: "dh",
showType: "input"
},
{
label: "审核状态",
prop: "bakkShzt",
showType: "select",
placeholder: "不限",
clearable: true,
defaultVal: "",
options: D_BA_SHZT
},
{
label: "送培状态",
prop: "sptz",
showType: "select",
placeholder: "不限",
clearable: true,
defaultVal: "",
options: D_BA_SPZT
}
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageNum: 1
},
controlsWidth: 280,
tableColumn: [
{ label: "保安公司名称", prop: "ssbakk", showOverflowTooltip: true },
{ label: "年审年份", prop: "njnf" },
{ label: "姓名", prop: "xm" },
{ label: "身份证号码", prop: "sfzhm", showOverflowTooltip: true },
{ label: "电话", prop: "dh" },
{ label: "文化程度", prop: "whcd",showSolt: true },
{ label: "证书编号", prop: "zsbh", showOverflowTooltip: true },
{ label: "服务行业", prop: "fwxy", showSolt: true },
{ label: "入职时间", prop: "rzsj" },
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
{ label: "审核状态", prop: "bakkShzt", showSolt: true },
{ label: "审核时间", prop: "shsj" },
{ label: "送培状态", prop: "sptz", showSolt: true }
]
});
onMounted(() => {
getList();
tabHeightFn();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageNum = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
const promes = {
...pageData.pageConfiger,
...queryFrom.value,
ssbakk:userInfo.pxgs,
ssbakkId:userInfo.pxgsid,
}
qcckPost(promes,'/mosty-base/bans/njxx/page').then(res => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch((err) => {
pageData.tableConfiger.loading = false;
})
};
const chooseData = (rows) => {
selectedRows.value = Array.isArray(rows) ? rows.map(v=>v.id) : [];
};
const onBatchAudit = (valIds) => {
let ids = [];
valIds.forEach(id =>{
let obj = pageData.tableData.find(it=>it.id == id);
if(obj && obj.bakkShzt == 0) ids.push(id);
});
if (!ids.length) return ElMessage.warning("请选择未审核的数据!该数据再审核状态下不能操作!");
shForm.value.init(ids);
};
// 送培
const handleItemSp = (valIds) =>{
let ids = [];
valIds.forEach(id =>{
let obj = pageData.tableData.find(it=>it.id == id);
if(obj && obj.sptz == 0 && obj.bakkShzt == 1) ids.push(id);
});
if (!ids.length) return ElMessage.warning("请选择未送培的数据!该数据已送培!");
proxy.$modal.confirm("是否确认送培?").then(() => {
let params = {
ssbakk:userInfo.pxgs,
ssbakkId:userInfo.pxgsid,
ids:ids
}
qcckPost(params,'/mosty-base/bans/njxx/sendTraining').then(res=>{
getList()
ElMessage.success("送培成功");
})
});
}
// 详情
const addEdit = (type, row) => {
nextTick(() => {
if(type == 'RefSteap'){
RefSteap.value.init(row);
}else{
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

@ -0,0 +1,109 @@
<template>
<div>
<el-dialog v-model="visible" title="批量送培" width="80%" @close="close">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
@chooseData="chooseData"
>
</MyTable>
<div class="flex just-center mt10">
<el-button type="primary" @click="close">取消</el-button>
<el-button type="primary" @click="changePxgs">确定</el-button>
</div>
</el-dialog>
</div>
<TrainingCompany ref="trainingCompany" @onBatchAudit="onBatchAudit"/>
</template>
<script setup>
import { ElMessage } from "element-plus";
import { getItem } from '@/utils/storage.js'
import { qcckPost } from "@/api/qcckApi.js";
import MyTable from "@/components/aboutTable/MyTable.vue";
import TrainingCompany from "./trainingCompany.vue";
import { ref , reactive , defineExpose , getCurrentInstance, defineEmits} from 'vue'
const userInfo = getItem('userInfo');
const emit = defineEmits(['refresh'])
const { proxy } = getCurrentInstance();
const visible = ref(false);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls: false
},
tableHeight: 550,
tableColumn: [
{ label: "保安公司名称", prop: "ssbakk",showOverflowTooltip: true },
{ label: "年审年份", prop: "njnf"},
{ label: "姓名", prop: "xm" },
{ label: "身份证号码", prop: "sfzhm",showOverflowTooltip: true },
{ label: "电话", prop: "dh" },
{ label: "文化程度", prop: "whcd" },
{ label: "证书编号", prop: "zsbh", showOverflowTooltip: true },
{ label: "服务行业", prop: "fwxymc" },
{ label: "入职时间", prop: "rzsj" },
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
]
});
const ids = ref([])
const chooseData = (rows) => {
ids.value = Array.isArray(rows) ? rows.map(item => item.id) : [];
};
const init = () => {
pageData.tableConfiger.loading = true;
pageData.keyCount++;
visible.value = true;
let promes = {
pageNum:1,
pageSize:9999,
ssbakk:userInfo.pxgs,
ssbakkId:userInfo.pxgsid,
sptz:0
}
qcckPost(promes,'/mosty-base/bans/njxx/listForSendTraining').then((res) => {
pageData.tableData = res.records || []
pageData.tableConfiger.loading = false;
}).catch((err) => {
pageData.tableConfiger.loading = false;
})
}
// 送培
const trainingCompany=ref()
const onBatchAudit = (val) => {
if (ids.value.length === 0) return ElMessage.warning("请选择要送培的人员");
proxy.$modal.confirm("是否确认送培?").then(() => {
let params = { ids: ids.value, ...val }
qcckPost(params,'/mosty-base/bans/njxx/sendTraining').then(res=>{
ElMessage.success("送培成功");
emit('refresh');
close();
})
});
}
const changePxgs = () => {
trainingCompany.value.init()
}
const close = () => {
visible.value = false;
ids.value = [];
pageData.tableData = []
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,209 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span>详情</span>
<div><el-button size="small" @click="close">关闭</el-button></div>
</div>
<div class="cntinfo">
<!-- 标签 -->
<!-- <ul class="tag-box">
<li class="tag_item" :class="detail.pxgsShzt == 0 ? 'dsh_item' : detail.pxgsShzt == 1 ? 'tgg_item' : 'jtb_item'"> -->
<!-- 0-待审核 1-通过 2-驳回 -->
<!-- {{ detail.pxgsShzt == 0 ? '待审核' : detail.pxgsShzt == 1 ? '通过' : '驳回' }}
</li>
</ul> -->
<!-- 内容描述 -->
<el-descriptions class="desc" :column="3" border label-width="200px">
<el-descriptions-item label="保安公司名称">{{ detail.ssbakk }}</el-descriptions-item>
<el-descriptions-item label="年审年份">{{ detail.njnf }}</el-descriptions-item>
<el-descriptions-item label="姓名">{{ detail.xm }}</el-descriptions-item>
<el-descriptions-item label="身份证号码">{{ detail.sfzhm }}</el-descriptions-item>
<el-descriptions-item label="电话">{{ detail.dh }}</el-descriptions-item>
<el-descriptions-item label="性别">
<DictTag :value="detail.xb" :tag="false" :options="props.dic.D_BZ_XB" />
</el-descriptions-item>
<el-descriptions-item label="民族">
<DictTag :value="detail.mz" :tag="false" :options="props.dic.D_BZ_MZ" />
</el-descriptions-item>
<el-descriptions-item label="籍贯">{{ detail.jg }}</el-descriptions-item>
<el-descriptions-item label="文化程度">
<DictTag :value="detail.whcd" :tag="false" :options="props.dic.D_BZ_WHCD" />
</el-descriptions-item>
<el-descriptions-item label="证书编号">{{ detail.zsbh }}</el-descriptions-item>
<el-descriptions-item label="上岗证号码">{{ detail.sgxkhm }}</el-descriptions-item>
<el-descriptions-item label="服务行业">
<DictTag :value="detail.fwxy" :tag="false" :options="props.dic.D_BAXX_SSHY" />
</el-descriptions-item>
<el-descriptions-item label="服务行业名称">{{ detail.fwxymc }}</el-descriptions-item>
<el-descriptions-item label="入职时间">{{ detail.rzsj }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">
<DictTag :value="detail.zzmm" :tag="false" :options="props.dic.D_BZ_ZZMM" />
</el-descriptions-item>
<el-descriptions-item label="无犯罪记录证明">
<div class="img-grid one">
<el-image
:src="baseUrl + detail.wfbjlzm"
fit="cover"
:preview-src-list='[baseUrl + detail.wfbjlzm]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="体检报告">
<div class="img-grid one">
<el-image
:src="baseUrl + detail.tjbg"
fit="cover"
:preview-src-list='[baseUrl + detail.tjbg]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="身份证正反面">
<div class="img-grid two">
<el-image
:src="baseUrl + detail.sfzzm"
fit="cover"
:preview-src-list='[baseUrl + detail.sfzzm]'
preview-teleported
class="img"
/>
<el-image
:src="baseUrl + detail.sfzfm"
fit="cover"
:preview-src-list='[baseUrl + detail.sfzfm]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ detail.auditTime }}</el-descriptions-item>
<el-descriptions-item label="发证机关">{{ detail.issuingAuthority }}</el-descriptions-item>
<el-descriptions-item label="发证日期">{{ detail.issueDate }}</el-descriptions-item>
<el-descriptions-item label="驳回原因" :span="3">{{ detail.rejectReason }}</el-descriptions-item>
</el-descriptions>
</div>
</div>
</template>
<script setup>
import { ref, defineEmits } from 'vue';
const emit = defineEmits(["refresh"]);
const baseUrl = '/bagl/mosty-base/minio/image/download/'
const props = defineProps({
dic: {
default: [[]], //二维数组
type: Array
}
})
const dialogForm = ref(false);
const listQuery = ref({});
const detail = ref({})
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
let obj = JSON.parse(JSON.stringify(row));
let zj = obj.sfzzfmj.split(',');
obj.sfzzm = [zj[0]];
obj.sfzfm = [zj[1]];
setTimeout(() => {
detail.value = obj;
}, 1000);
};
const close = () => {
dialogForm.value = false;
listQuery.value = {};
};;
defineExpose({ init })
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.mapBox {
width: calc(100% - 24rem);
height: 500px;
overflow: hidden;
margin: 0 12rem;
}
.cntinfo{
position: relative;
padding: 10px 20px;
box-sizing: border-box;
.tag-box{
position: absolute;
top: 20px;
right: 50px;
display: flex;
flex-direction: column;
gap: 10px;
.tag_item{
width: 70px;
height: 70px;
border-radius: 50%;
line-height: 65px;
text-align: center;
font-size: 16px;
margin-bottom: 20px;
}
.jtb_item{
border: 5px solid #FA3758;
color: #FA3758;
background: rgba(250,55,88,0.2);
}
.tgg_item{
color: #28EEBF;
background: rgba(40,238,191,0.2);
border: 5px solid #28EEBF;
}
.dsh_item{
background: rgba(0,114,255,0.2);
color: #0072FF;
border: 5px solid #0072FF;
}
}
}
.desc {
width: 100%;
}
.img-grid {
display: flex;
align-items: center;
gap: 10px;
min-height: 70px;
}
.img-grid.one .img,
.img-grid.one .img-placeholder {
width: 64px;
height: 64px;
}
.img-grid.two .img,
.img-grid.two .img-placeholder {
width: 64px;
height: 64px;
}
.img-placeholder {
background: #d9d9d9;
border-radius: 2px;
}
::v-deep .el-descriptions__label.el-descriptions__cell.is-bordered-label{
background: #F6FAFF;
}
</style>

View File

@ -0,0 +1,108 @@
<template>
<div>
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
<div class="steps-body">
<el-steps direction="vertical" :active="active" :space="90">
<el-step title="保安公司审核" :description="dataForm.bakkShsj || '未审核'" />
<el-step title="培训公司审核" :description="dataForm.pxgsShsj || '未审核'" />
<el-step title="公安局审核" :description="dataForm.gonganShsj || '未审核'" />
</el-steps>
</div>
</el-dialog>
</div>
</template>
<script setup>
import { qcckPost } from "@/api/qcckApi.js";
import { ref, defineExpose } from 'vue';
const dialogForm = ref(false);
const active = ref(1)
const dataForm = ref({})
const init = (row) => {
let ids = [row.id]
qcckPost(ids,"/mosty-base/bans/njxx/getAuditStatusList").then(res=>{
dialogForm.value = true;
let obj = res ? res[0] : {};
dataForm.value = obj;
active.value = Number(obj.currentAuditStage) - 1;
})
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
.steps-body {
height: 260px;
padding: 6px 10px 10px;
box-sizing: border-box;
}
:deep(.steps-dialog .el-dialog__header) {
text-align: center;
padding: 20px 20px 10px;
}
:deep(.steps-dialog .el-dialog__title) {
font-size: 24px;
font-weight: 700;
color: #333;
}
:deep(.steps-dialog .el-dialog__body) {
padding: 0 20px 20px;
}
:deep(.steps-dialog .el-step__title) {
font-size: 18px;
font-weight: 600;
color: #333;
line-height: 22px;
}
:deep(.steps-dialog .el-step__description) {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
margin-top: 8px;
}
:deep(.steps-dialog .el-step__line) {
left: 8px;
background-color: transparent;
border-left: 1px dashed #dadada;
}
:deep(.steps-dialog .el-step.is-vertical .el-step__head) {
width: 24px;
}
:deep(.steps-dialog .el-step__icon) {
width: 16px;
height: 16px;
border-radius: 50%;
}
:deep(.steps-dialog .el-step__head.is-process .el-step__icon),
:deep(.steps-dialog .el-step__head.is-process .el-step__icon.is-text) {
background: #2e6bff;
border: none;
box-shadow: 0 0 0 5px rgba(46, 107, 255, 0.15);
}
:deep(.steps-dialog .el-step.is-wait .el-step__icon),
:deep(.steps-dialog .el-step.is-finish .el-step__icon) {
background: #fff;
border: 1px solid #dadada;
box-shadow: none;
}
:deep(.steps-dialog .el-step__icon-inner) {
display: none;
}
::v-deep .is-finish .el-step__icon{
background: #86b6f1;
}
</style>

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