Commit 35903014 by gao_yingdong

警犬

parent add949d4
File added
......@@ -81,6 +81,16 @@
"id":"8",
"isParent":false,
"children":[]
},
{
"ids":"80866",
"label":"其他",
"codeType":"CODE_BASEDATA",
"text":"其他",
"pId":null,
"id":"9",
"isParent":false,
"children":[]
}
]
},
......
......@@ -21,6 +21,16 @@
"id":"2",
"isParent":false,
"children":[]
},
{
"ids":"80867",
"label":"其他",
"codeType":"CODE_JSRY_RYFL",
"text":"其他",
"pId":null,
"id":"3",
"isParent":false,
"children":[]
}
]
},
......
......@@ -43,6 +43,10 @@ export const getArtisanToal = params =>
export const getRetiredTotal = params =>
postJson(`${baseUrl}/homePage/getRetiredTotal`, params)
// 种犬总数
export const getStuDogTotal = params =>
postJson(`${baseUrl}/homePage/getStuDogTotal`, params)
// 退役犬分析
export const getRetiredReasons = params =>
postJson(`${baseUrl}/homePage/getRetiredReasons`, params)
......@@ -54,4 +58,25 @@ export const getRetiredDogByType = params =>
export const getArtisanAge = params =>
postJson(`${baseUrl}/homePage/getArtisanAge`, params)
// 地图大屏 new
export const getDogByTypeMap = params =>
postJson(`${baseUrl}/homePage/getDogByTypeMap`, params)
export const getWorkDogClassificationIdMap = params =>
postJson(`${baseUrl}/homePage/getWorkDogClassificationIdMap`, params)
export const getArtisanJwjsxlMap = params =>
postJson(`${baseUrl}/homePage/getArtisanJwjsxlMap`, params)
export const getArtisanRyflMap = params =>
postJson(`${baseUrl}/homePage/getArtisanRyflMap`, params)
export const getArtisanToalMap = params =>
postJson(`${baseUrl}/homePage/getArtisanToalMap`, params)
export const getWorkDogTotalMap = params =>
postJson(`${baseUrl}/homePage/getWorkDogTotalMap`, params)
export const getQgDogTjfx = params =>
postJson(`${baseUrl}/homePage/getQgDogTjfx`, params)
\ No newline at end of file
......@@ -183,7 +183,7 @@ export default [
keepAlive: true,
oneMenuName: 'jqjsgzgl',
paixu: 1,
routeNames: ["jobDogManageEdit", "jobDogManageAdd", "jobDogManageBatchAdd"]
routeNames: ["jobDogManageEdit", "jobDogManageAdd", "jobDogManageBatchAdd",'jobDogManagexq']
}
},
{
......@@ -196,7 +196,17 @@ export default [
keepAlive: true,
oneMenuName: 'jqjsgzgl',
paixu: 2,
routeNames: ["jobDogManageSp"]
routeNames: ["jobDogManageSp",'jobDogManagexq1']
}
},
{
path: 'jobDogManagexq1',
name: 'jobDogManagexq1',
component: () => import('@/views/jobDogManage/components/jobDogManageXq.vue'),
meta: {
title: '工作犬评定管理-详情',
// 编辑新增页面此字段务必设置为true
isEditPage: true
}
},
// 工作犬评定管理(编辑页)
......@@ -232,6 +242,16 @@ export default [
isEditPage: true
}
},
{
path: 'jobDogManagetyXq1',
name: 'jobDogManagetyXq1',
component: () => import('@/views/tyshManage/components/jobDogManagetyXq.vue'),
meta: {
title: '退役审核-详情',
// 编辑新增页面此字段务必设置为true
isEditPage: true
}
},
// 工作犬评定管理(编辑页)
{
path: 'jobDogManageEdit',
......@@ -300,7 +320,7 @@ export default [
iconfont: 'icon-renyuanguanli_jingquan',
isOneMenu: true,
keepAlive: true,
routeNames: ['artisanManageEdit', 'artisanManageAdd']
routeNames: ['artisanManageEdit', 'artisanManageAdd','artisanManageDetail']
}
},
// 警犬技术人员管理(编辑页)
......@@ -314,6 +334,16 @@ export default [
isEditPage: true
}
},
{
path: 'artisanManageDetail',
name: 'artisanManageDetail',
component: () => import('@/views/artisanManage/components/artisanManageDetail.vue'),
meta: {
title: '警犬技术人员管理-详情',
// 编辑新增页面此字段务必设置为true
isEditPage: true
}
},
// 警犬技术人员管理(新增页)
{
path: 'artisanManageAdd',
......@@ -336,7 +366,7 @@ export default [
keepAlive: true,
oneMenuName: 'poDogManage',
paixu: 1,
routeNames: ['poDogJobManageEdit', 'poDogJobManageAdd'],
routeNames: ['poDogJobManageEdit', 'poDogJobManageAdd','poDogJobManageDetail'],
}
},
// 警用工作犬信息管理(编辑页)
......@@ -350,6 +380,16 @@ export default [
isEditPage: true
}
},
{
path: 'poDogJobManageDetail',
name: 'poDogJobManageDetail',
component: () => import('@/views/poDogJobManage/components/poDogJobManageDetail.vue'),
meta: {
title: '警用工作犬信息管理-详情',
// 编辑新增页面此字段务必设置为true
isEditPage: true
}
},
// 警用工作犬信息管理(新增页)
{
path: 'poDogJobManageAdd',
......@@ -372,7 +412,7 @@ export default [
keepAlive: true,
oneMenuName: 'poDogManage',
paixu: 2,
routeNames: ["poDogInfoManageEdit", "poDogInfoManageAdd"]
routeNames: ["poDogInfoManageEdit", "poDogInfoManageAdd",'poDogInfoManageDetail']
}
},
// 警用种犬信息管理(编辑页)
......@@ -386,6 +426,16 @@ export default [
isEditPage: true
}
},
{
path: 'poDogInfoManageDetail',
name: 'poDogInfoManageDetail',
component: () => import('@/views/poDogInfoManage/components/poDogInfoManageDetail.vue'),
meta: {
title: '警用种犬信息管理-详情',
// 编辑新增页面此字段务必设置为true
isEditPage: true
}
},
// 警用种犬信息管理(新增页)
{
path: 'poDogInfoManageAdd',
......@@ -409,7 +459,7 @@ export default [
keepAlive: true,
oneMenuName: 'poDogManage',
paixu: 3,
routeNames: ['poDogRetireManageEdit', 'poDogRetireManageAdd'],
routeNames: ['poDogRetireManageEdit', 'poDogRetireManageAdd','jobDogManagetyXq','jobDogManagetySp'],
}
},
......@@ -424,7 +474,7 @@ export default [
keepAlive: true,
oneMenuName: 'poDogManage',
paixu: 4,
routeNames: [],
routeNames: ['jobDogManagetyXq1'],
}
},
// 警用退役犬信息管理(编辑页)
......
......@@ -372,7 +372,7 @@ export default {
personName: [
{ required: true, message: "请输入姓名", trigger: "blur" },
{ required: true, validator: rules.nameRules, trigger: "blur" },
// { required: true, validator: rules.nameRules, trigger: "blur" },
],
idNo: [
{
......@@ -410,6 +410,13 @@ export default {
trigger: "change",
},
],
ryfl: [
{
required: true,
message: "请选择人员分类",
trigger: "change",
},
],
gsdwGajgjgdm: [
{
required: true,
......@@ -470,7 +477,7 @@ export default {
// 新增
}
this.ryflOptions = await getJsonDataApi("CODE_JSRY_RYFL");
this.ryflOptions = await getJsonDataApi("CODE_JSRY_RYF");
this.shifouOptions = await getJsonDataApi("CODE_YN");
this.jwjsxlOptions = await getJsonDataApi("CODE_JSRYGSXL");
},
......
<template>
<div class="listContentClass">
<div class="contents">
<div
class="titles"
style="width: 72px;"
>查询条件</div>
<el-form
:model="formData"
ref="formDataRef"
:inline="true"
>
<el-form-item
label="归属单位"
class="elItemClass"
>
<div class="titles" style="width: 72px">查询条件</div>
<el-form :model="formData" ref="formDataRef" :inline="true">
<el-form-item label="姓名" class="elItemClass">
<el-input
v-model="formData.personName"
:clearable="true"
placeholder="请输入姓名"
></el-input>
</el-form-item>
<el-form-item label="身份证号" class="elItemClass">
<el-input
v-model="formData.idNo"
:clearable="true"
placeholder="请输入身份证号"
></el-input>
</el-form-item>
<el-form-item label="归属单位" class="elItemClass">
<lazy-select-tree-dialog
:sendId="formData.gsdwGajgjgdm"
:formData="formData"
:currentItem="unitInfo"
/>
</el-form-item>
<el-form-item
label="归属序列"
class="elItemClass"
>
<el-form-item label="归属序列" class="elItemClass">
<el-select
clearable
placeholder="请选择归属序列"
......@@ -38,10 +39,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="性别:"
class="elItemClass"
>
<el-form-item label="性别:" class="elItemClass">
<el-radio-group v-model="formData.xb">
<el-radio
:label="item.code"
......@@ -52,10 +50,7 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label="是否警犬技术相关专业:"
class="elItemClass"
>
<el-form-item label="是否警犬技术相关专业:" class="elItemClass">
<el-radio-group v-model="formData.isjwzy">
<el-radio
:label="item.id"
......@@ -87,7 +82,7 @@
<el-button
size="small"
@click="resetForm"
style="margin-right: 0 !important;"
style="margin-right: 0 !important"
class="btnStylePub"
>
重置
......@@ -98,11 +93,14 @@
<div class="resultClass spaceBetween">
<div class="leftC">
<div
class="titles"
style="display: inline-block;width: 72px;"
>查询结果</div>
<span class="infoClass">共有 <span class="numColor">{{ total }}</span> 条查询结果,共 <span class="numColor">{{ Math.ceil(total / limit) }}</span> 页;</span>
<div class="titles" style="display: inline-block; width: 72px">
查询结果
</div>
<span class="infoClass"
>共有 <span class="numColor">{{ total }}</span> 条查询结果,共
<span class="numColor">{{ Math.ceil(total / limit) }}</span>
页;</span
>
</div>
<div class="rightC">
<el-button
......@@ -110,20 +108,23 @@
size="small"
class="btnStylePub btnStyle1"
@click="addData"
>新增</el-button>
>新增</el-button
>
<el-button
size="small"
icon="el-icon-download"
class="btnStylePub btnStyle2"
@click="importData"
>批量导入</el-button>
>批量导入</el-button
>
<el-button
size="small"
icon="el-icon-upload2"
style="margin-right: 0 !important;"
style="margin-right: 0 !important"
class="btnStylePub btnStyle3"
@click="exportData"
>导出</el-button>
>导出</el-button
>
</div>
</div>
......@@ -145,13 +146,12 @@
:index="indexMethod"
width="50"
></el-table-column> -->
<el-table-column
align="left"
label="操作"
width="100"
>
<el-table-column align="left" label="操作" width="150">
<template slot-scope="scope">
<div>
<el-button type="text" size="small" @click="doDetail(scope.row)">
详情
</el-button>
<el-button
type="text"
size="small"
......@@ -179,16 +179,38 @@
:key="item.prop"
>
<template slot-scope="scope">
<span v-if="item.prop === 'personName'">{{ scope.row.personName }}</span>
<span v-if="item.prop === 'personName'">{{
scope.row.personName
}}</span>
<span v-else-if="item.prop === 'idNo'">{{ scope.row.idNo }}</span>
<span v-else-if="item.prop === 'gender'">{{ (scope.row.gender === '1') ? ('男') : (scope.row.gender === '0' ? '女' : '') }}</span>
<span v-else-if="item.prop === 'birthDate'">{{ scope.row.birthDate }}</span>
<span v-else-if="item.prop === 'isjwzyForName'">{{ scope.row.isjwzyForName }}</span>
<span v-else-if="item.prop === 'school'">{{ scope.row.school }}</span>
<span v-else-if="item.prop === 'gsdwGajgjgdm'">{{ scope.row.gsdwGajgjgdm }}</span>
<span v-else-if="item.prop === 'jwjsxlForName'">{{ scope.row.jwjsxlForName }}</span>
<span v-else-if="item.prop === 'sxjq'">{{ scope.row.sxjq ? scope.row.sxjq + ' / 头' : '' }}</span>
<span v-else-if="item.prop === 'dqnx'">{{ scope.row.dqnx ? scope.row.dqnx + ' / 年' : '' }}</span>
<span v-else-if="item.prop === 'gender'">{{
scope.row.gender === "1"
? "男"
: scope.row.gender === "0"
? "女"
: ""
}}</span>
<span v-else-if="item.prop === 'birthDate'">{{
scope.row.birthDate
}}</span>
<span v-else-if="item.prop === 'isjwzyForName'">{{
scope.row.isjwzyForName
}}</span>
<span v-else-if="item.prop === 'school'">{{
scope.row.school
}}</span>
<span v-else-if="item.prop === 'gsdwGajgjgdm'">{{
scope.row.gsdwGajgjgdm
}}</span>
<span v-else-if="item.prop === 'jwjsxlForName'">{{
scope.row.jwjsxlForName
}}</span>
<span v-else-if="item.prop === 'sxjq'">{{
scope.row.sxjq ? scope.row.sxjq + " / 头" : ""
}}</span>
<span v-else-if="item.prop === 'dqnx'">{{
scope.row.dqnx ? scope.row.dqnx + " / 年" : ""
}}</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
</el-table-column>
......@@ -254,6 +276,8 @@ export default {
return {
userinfo: {},
formData: {
personName: "",
idNo: "",
gsdwGajgjgdm: "",
xb: "",
jwjsxl: "",
......@@ -314,7 +338,7 @@ export default {
} else {
this.colPropArr = this.headerSettInfo.defaultColumns;
}
console.log(this.colPropArr)
console.log(this.colPropArr);
this.getLists(this.currentPage);
},
methods: {
......@@ -335,6 +359,8 @@ export default {
this.formData.xb = "";
this.formData.jwjsxl = "";
this.formData.isjwzy = "";
this.formData.personName = "";
this.formData.idNo = "";
this.getLists(1);
},
......@@ -349,6 +375,8 @@ export default {
xb: this.formData.xb,
jwjsxl: this.formData.jwjsxl,
isjwzy: this.formData.isjwzy,
personName: this.formData.personName,
idNo: this.formData.idNo,
};
getArtisanList(params)
.then((res) => {
......@@ -393,7 +421,17 @@ export default {
name: "artisanManageEdit",
query: {
id: row.idNo,
xxzjbh: row.id
xxzjbh: row.id,
},
});
},
// 详情
doDetail(row) {
this.$router.push({
name: "artisanManageDetail",
query: {
id: row.idNo,
xxzjbh: row.id,
},
});
},
......@@ -451,11 +489,13 @@ export default {
xb: this.formData.xb,
jwjsxl: this.formData.jwjsxl,
isjwzy: this.formData.isjwzy,
personName: this.formData.personName,
idNo: this.formData.idNo,
};
let token = window.sessionStorage.getItem('token')
let token = window.sessionStorage.getItem("token");
axios
.post(exportArtisanUrl, JSON.stringify(params), {
headers: { "Content-Type": "application/json","blade-auth": token },
headers: { "Content-Type": "application/json", "blade-auth": token },
responseType: "blob",
})
.then((res) => {
......
<template>
<div id="jobDog">
<div class="jobDog_left">
<div
<!-- <div
class="jobDogLeftTop"
v-loading="loading1"
element-loading-text="拼命加载中"
......@@ -10,6 +10,9 @@
>
<div class="jobTitle">工作犬总数</div>
<div class="jobCont">{{ dogNum }}</div>
</div> -->
<div class="jobDogImg">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div
class="jobDogLeftBottom"
......@@ -48,6 +51,18 @@
element-loading-background="rgba(0, 0, 0, 0.8)"
></div>
</div>
<div style="position: absolute; z-index: 99; left: 19%; top: 42.1%">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div style="position: absolute; z-index: 99; left: 19%; top: 16.5%">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div style="position: absolute; z-index: 99; right: 15%; top: 17.2%">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div style="position: absolute; z-index: 99; left: 19%; top: 67.8%">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div
class="jobDogRightBottom"
ref="variety"
......@@ -71,7 +86,7 @@ import {
import utils from "@/utils/util.js";
export default {
props: {
timeArr: Array,
timeList: Array,
},
data() {
return {
......@@ -87,7 +102,7 @@ export default {
};
},
watch: {
timeArr: {
timeList: {
handler(val) {
if (val && val.length > 0) {
this.djsjStart = val[0];
......@@ -97,7 +112,7 @@ export default {
this.djsjEnd = "";
}
this.$nextTick(() => {
this.getWorkDogTotal();
// this.getWorkDogTotal();
this.getWorkDogDogSource();
this.getWorkDogSpeciesAndClassificationId();
this.getWorkDogAgeAndGender();
......@@ -112,7 +127,7 @@ export default {
methods: {
getVariety(xLabel, series) {
let dom = this.$refs.variety;
if(!dom) return;
if (!dom) return;
let myChart = this.$echarts.init(dom);
let option = {
tooltip: {
......@@ -121,7 +136,7 @@ export default {
title: {
text: "品种和专业分布",
top: "5%",
left: "2%",
left: "3%",
textStyle: {
color: "#fff",
fontSize: 16,
......@@ -228,13 +243,13 @@ export default {
let totalNum = 0;
data.map((item) => (totalNum += item.value));
let dom = this.$refs.varietydis;
if(!dom) return;
if (!dom) return;
let myChart = this.$echarts.init(dom);
let option = {
title: {
text: "品种分布",
text: "工作犬品种分布",
top: "3%",
left: "5%",
left: "13%",
textStyle: {
color: "#fff",
fontSize: 16,
......@@ -316,8 +331,8 @@ export default {
};
myChart.setOption(option);
},
getLineCharts(xLabel, series, dom, color,title) {
if(!dom) return;
getLineCharts(xLabel, series, dom, color, title) {
if (!dom) return;
let myChart = this.$echarts.init(dom);
let option = {
tooltip: {
......@@ -326,7 +341,7 @@ export default {
title: {
text: title,
top: "5%",
left: "2%",
left: "3.5%",
textStyle: {
color: "#fff",
fontSize: 16,
......@@ -423,7 +438,7 @@ export default {
//漏斗图
getSourceDis(data) {
let dom = this.$refs.sourceDis;
if(!dom) return;
if (!dom) return;
let myChart = this.$echarts.init(dom);
let option = {
tooltip: {
......@@ -477,7 +492,7 @@ export default {
title: {
text: "来源分布",
top: "4%",
left: "4%",
left: "14%",
textStyle: {
color: "#fff",
fontSize: 16,
......@@ -562,14 +577,15 @@ export default {
if (res.data[key].name) {
let obj = {
name: res.data[key].name,
type: "line",
type: "bar",
symbol: "circle",
showAllSymbol: true,
symbolSize: 0,
symbolSize: 8,
barWidth: 15, //柱子宽度
itemStyle: {
normal: {
borderColor: "#fff",
// borderColor: "#fff",
},
},
tooltip: {
......@@ -580,12 +596,13 @@ export default {
series.push(obj);
}
}
self.getLineCharts(xData, series, self.$refs.age_grade, [
"#9A51F4",
"#FF9626",
"#27C346",
"#3C7EFF",
],'年龄段和等级分布');
self.getLineCharts(
xData,
series,
self.$refs.age_grade,
["#9A51F4", "#FF9626", "#27C346", "#3C7EFF"],
"年龄段和等级分布"
);
}
});
},
......@@ -605,14 +622,15 @@ export default {
if (res.data[key].name) {
let obj = {
name: res.data[key].name,
type: "line",
type: "bar",
symbol: "circle",
showAllSymbol: true,
symbolSize: 0,
symbolSize: 8,
barWidth: 15, //柱子宽度
itemStyle: {
normal: {
borderColor: "#fff",
// borderColor: "#fff",
},
},
tooltip: {
......@@ -623,10 +641,13 @@ export default {
series.push(obj);
}
}
self.getLineCharts(xData, series, self.$refs.age_sex, [
"#FF9626",
"#24A2FF",
],'年龄段和性别分布');
self.getLineCharts(
xData,
series,
self.$refs.age_sex,
["#FF9626", "#24A2FF"],
"年龄段和性别分布"
);
}
});
},
......@@ -701,16 +722,24 @@ export default {
#jobDog {
width: 100%;
height: 100%;
padding: 20px 64px 36px;
// padding: 20px 64px 36px;
padding: 20px 0px 36px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
.jobDog_left {
position: relative;
width: 282px;
margin-right: 20px;
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
.jobDogImg {
position: absolute;
left: 18px;
top: 22px;
z-index: 99;
}
.jobDogLeftTop {
.jobTitle {
padding-top: 16px;
......
<template>
<div id="StudDog">
<div class="dog_breedBox">
<div style="position: absolute; top: 13px; left: 17px">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div style="position: absolute; top: 109.5%; z-index: 99; left: 17px">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div class="breedTitle">犬种品种分布</div>
<div
ref="dog_breed"
......@@ -18,14 +25,20 @@
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
></div>
<div
<img
style="position: absolute; left: 51.2%; top: 17%"
src="@/assets/img/data/boxTitle.png"
alt=""
/>
<!-- <div
ref="birth_time"
v-loading="loading3"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
></div>
></div> -->
<div
style="width: 100%"
ref="age_sex"
v-loading="loading4"
element-loading-text="拼命加载中"
......@@ -44,7 +57,7 @@ import {
import utils from "@/utils/util.js";
export default {
props: {
timeArr: Array,
timeList: Array,
},
data() {
return {
......@@ -175,14 +188,15 @@ export default {
if (res.data[key].name) {
let obj = {
name: res.data[key].name,
type: "line",
type: "bar",
symbol: "circle",
showAllSymbol: true,
symbolSize: 0,
symbolSize: 8,
barWidth: 15, //柱子宽度
itemStyle: {
normal: {
borderColor: "#fff",
// borderColor: "#fff",
},
},
tooltip: {
......@@ -277,7 +291,7 @@ export default {
title: {
text: "犬种来源分布",
top: "4%",
left: "2%",
left: "4%",
textStyle: {
color: "#fff",
fontSize: 16,
......@@ -548,7 +562,7 @@ export default {
},
},
watch: {
timeArr: {
timeList: {
handler(val) {
if (val && val.length > 0) {
this.djsjStart = val[0];
......@@ -561,7 +575,7 @@ export default {
this.getStuDogAgeAndGender();
this.getStuDogDogSource();
this.getStuDogSpecies();
this.getStuDogBirthDateTimePeriod();
// this.getStuDogBirthDateTimePeriod();
});
},
deep: true,
......@@ -575,7 +589,7 @@ export default {
#StudDog {
width: 100%;
height: 100%;
padding: 20px 64px 36px;
padding: 20px 0px 57px;
box-sizing: border-box;
display: flex;
flex-flow: row wrap;
......@@ -592,7 +606,7 @@ export default {
color: #fff;
font-size: 17px;
top: 10px;
left: 20px;
left: 42px;
}
> div {
width: calc(50% - 10px);
......
......@@ -2,6 +2,9 @@
<div class="HumanDog">
<div class="HumanDog_top">
<div class="HumanDog_top_left">
<div class="HumanDog_top_left_img">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div class="HumanDog_top_left_title">人员分类</div>
<div class="HumanDog_top_left_btTitle">
<span>类型</span>
......@@ -11,7 +14,14 @@
<div ref="dog_ry" class="HumanDog_top_left_box"></div>
</div>
<div class="HumanDog_top_right">
<div
style="position: absolute; top: 18px; left: 15px"
class="HumanDog_top_righ_img"
>
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div class="HumanDog_top_right_title">人员序列</div>
<div class="HumanDog_top_right_titleBBox">
<span>类别</span>
<span>统计</span>
......@@ -22,6 +32,9 @@
</div>
</div>
<div class="HumanDog_bottom">
<div class="HumanDog_bottom_img">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div class="HumanDog_bottom_title">人员分类</div>
<div ref="dog_fl" class="HumanDog_bottom_title_box"></div>
</div>
......@@ -518,8 +531,13 @@ export default {
background: #202b66c4;
border-radius: 16px 16px 16px 16px;
margin-right: 10px;
&_img {
position: absolute;
top: 18px;
left: 15px;
}
&_title {
padding: 16px 20px 0;
padding: 16px 40px 0;
font-size: 20px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
......@@ -551,8 +569,13 @@ export default {
background: #202b66c4;
border-radius: 16px 16px 16px 16px;
position: relative;
&_img {
position: absolute;
top: 18px;
left: 15px;
}
&_title {
padding: 16px 20px 0;
padding: 16px 40px 0;
font-size: 20px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
......@@ -590,8 +613,14 @@ export default {
margin-top: 20px;
background: rgba(32, 43, 102, 0.58);
border-radius: 16px 16px 16px 16px;
position: relative;
&_img {
position: absolute;
top: 18px;
left: 15px;
}
&_title {
padding: 16px 20px 0;
padding: 16px 40px 0;
font-size: 20px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
......
<template>
<div class="retireDog">
<div class="retireDog_top">
<!-- <div class="retireDog_top">
<div class="retireDog_top_title">退役犬数</div>
<div class="retireDog_top_number">
<i v-if="retireDogCount == null" class="el-icon-loading"></i>
<span v-else>{{ retireDogCount == null ? 0 : retireDogCount }}</span>
</div>
</div>
</div> -->
<div class="retireDog_bottom">
<div
class="retireDog_bottom_left"
v-loading="leftLoading"
class="retireDog_bottom_right"
v-loading="rightLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<div class="retireDog_bottom_left_title">退役犬分析</div>
<div ref="tyqfx" class="retireDog_bottom_left_echartsRef"></div>
<div class="retireDog_bottom_right_img">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div class="retireDog_bottom_left_title">等级分布</div>
<div ref="djfb" class="retireDog_bottom_left_echartsRef"></div>
</div>
<div
class="retireDog_bottom_right"
v-loading="rightLoading"
class="retireDog_bottom_left"
v-loading="leftLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<div class="retireDog_bottom_left_title">等级分布</div>
<div ref="djfb" class="retireDog_bottom_left_echartsRef"></div>
<div class="retireDog_bottom_left_img">
<img src="@/assets/img/data/boxTitle.png" alt="" />
</div>
<div class="retireDog_bottom_left_title">退役犬分析</div>
<div ref="tyqfx" class="retireDog_bottom_left_echartsRef"></div>
</div>
</div>
</div>
......@@ -40,7 +46,7 @@ import {
} from "@/api/menuDataApi/deskTop.js";
export default {
props: {
timeArr: Array,
timeList: Array,
},
data() {
return {
......@@ -321,7 +327,7 @@ export default {
},
},
watch: {
timeArr: {
timeList: {
handler(val) {
if (val && val.length > 0) {
this.djsjStart = val[0];
......@@ -331,7 +337,7 @@ export default {
this.djsjEnd = "";
}
this.$nextTick(() => {
this.countAct();
// this.countAct();
this.leftAct();
this.rightAct();
});
......@@ -347,7 +353,7 @@ export default {
.retireDog {
width: 100%;
height: 100%;
padding: 20px 42px 36px;
padding: 20px 0px 36px;
&_top {
padding: 24px;
background: #202b66bf;
......@@ -374,9 +380,10 @@ export default {
}
}
&_bottom {
margin-top: 20px;
// margin-top: 20px;
display: flex;
&_left {
position: relative;
width: calc(50% - 10px);
height: 440px;
background: rgba($color: #202b66, $alpha: 0.7);
......@@ -389,13 +396,18 @@ export default {
1 1;
opacity: 1;
// border: 1px solid;
&_img {
position: absolute;
top: 17px;
left: 16px;
}
&_title {
font-size: 20px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
color: #e3e6eb;
line-height: 32px;
padding: 14px 24px;
padding: 14px 24px 14px 40px;
}
&_echartsRef {
height: calc(100% - 200px);
......@@ -404,7 +416,8 @@ export default {
}
}
&_right {
margin-left: 20px;
position: relative;
margin-right: 20px;
width: calc(50% - 10px);
height: 440px;
background: rgba($color: #202b66, $alpha: 0.7);
......@@ -416,9 +429,14 @@ export default {
)
1 1;
opacity: 1;
&_img {
position: absolute;
top: 17px;
left: 16px;
}
// border: 1px solid;
&_title {
padding: 14px 24px;
padding: 14px 24px 14px 40px;
font-size: 20px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
......
<template>
<div class="OverviewDog">
<div class="OverviewDog_title">
<span>{{ dogName }}总数:</span>
<i
style="
font-size: 40px;
font-weight: 400;
color: #f2a74f;
line-height: 48px;
"
v-if="dogShow == null"
class="el-icon-loading"
></i
><span v-else>{{ dogCount }}</span>
</div>
<div class="OverviewDog_tabs">
<div
:class="
item.name == dogName ? 'OverviewDog_tabs_bg' : 'OverviewDog_tabs_bg1'
"
v-for="(item, index) in tabsList"
:key="index"
@click="tabsOpen(item.name)"
>
{{ item.name }}
</div>
</div>
<div class="OverviewDog_bottom">
<JobDog :timeList="timeList" v-if="dogName == '工作犬'"></JobDog>
<RetireDog :timeList="timeList" v-if="dogName == '退役犬'"></RetireDog>
<StudDog :timeList="timeList" v-if="dogName == '种犬'"></StudDog>
</div>
</div>
</template>
<script>
import JobDog from "./components/JobDog.vue"; //工作犬分析
import StudDog from "./components/StudDog.vue"; // 种犬分析
import RetireDog from "./components/retireDog.vue"; // 退役犬分析
import {
getWorkDogTotal,
getRetiredTotal,
getStuDogTotal,
} from "@/api/menuDataApi/deskTop.js";
export default {
components: {
JobDog,
StudDog,
RetireDog,
},
props: {
timeArr: Array,
},
data() {
return {
dogName: "工作犬",
dogCount: 0,
dogShow: null,
tabsList: [
{
name: "工作犬",
},
{
name: "退役犬",
},
{
name: "种犬",
},
],
djsjStart: "",
djsjEnd: "",
timeList: [],
};
},
watch: {
timeArr: {
handler(val) {
debugger;
this.timeList = val;
if (val && val.length > 0) {
this.djsjStart = val[0];
this.djsjEnd = val[1];
} else {
this.djsjStart = "";
this.djsjEnd = "";
}
this.$nextTick(() => {
if (this.dogName == "工作犬") {
this.getWorkDogTotal();
} else if (this.dogName == "退役犬") {
this.countAct();
} else if (this.dogName == "种犬") {
this.dozAct();
}
});
},
deep: true,
immediate: true,
},
},
methods: {
tabsOpen(key) {
this.dogName = key;
if (key == "工作犬") {
this.getWorkDogTotal();
} else if (key == "退役犬") {
this.countAct();
} else if (key == "种犬") {
this.dozAct();
}
},
//工作犬总数
getWorkDogTotal() {
let self = this;
self.dogShow = null;
getWorkDogTotal({
djsjStart: self.djsjStart,
djsjEnd: self.djsjEnd,
}).then((res) => {
if (res.success) {
self.dogCount = res.data.total;
}
self.dogShow = 0;
});
},
// 退役犬总数
countAct() {
let self = this;
let obj = {
djsjStart: self.djsjStart,
djsjEnd: self.djsjEnd,
};
self.dogShow = null;
getRetiredTotal(obj).then((res) => {
if (res.code == 200 && res.success) {
self.dogCount = res.data.total || 0;
} else {
self.dogCount = 0;
}
self.dogShow = 0;
});
},
// 种犬数量
dozAct() {
let self = this;
self.dogShow = null;
getStuDogTotal({
djsjStart: self.djsjStart,
djsjEnd: self.djsjEnd,
}).then((res) => {
if (res.success) {
self.dogCount = res.data.total;
}
self.dogShow = 0;
});
},
},
};
</script>
<style lang="scss" scoped>
.OverviewDog {
padding: 20px 42px 36px;
width: 100%;
height: 100%;
&_title {
> span:nth-child(1) {
font-size: 20px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
color: #ffffff;
line-height: 11px;
position: relative;
display: inline-block;
top: -8px;
}
> span:nth-child(2) {
font-size: 40px;
font-family: DIN-Medium-Regular, DIN-Medium;
font-weight: 400;
color: #f2a74f;
line-height: 48px;
}
}
&_tabs {
position: absolute;
top: 100px;
left: 38%;
font-size: 22px;
font-family: Source Han Sans CN-Normal, Source Han Sans CN;
font-weight: 400;
line-height: 50px;
display: flex;
&_bg1 {
cursor: pointer;
color: #bceefc;
margin-right: 10px;
text-align: center;
width: 152px;
height: 48px;
background: #0b1d3e;
border-radius: 14px 14px 14px 14px;
}
&_bg {
margin-right: 10px;
cursor: pointer;
text-align: center;
color: #fff;
width: 152px;
height: 48px;
background: #009dff;
border-radius: 14px 14px 14px 14px;
}
}
&_bottom {
height: 94%;
}
}
</style>
\ No newline at end of file
......@@ -34,11 +34,9 @@
</div>
</div>
<div class="content">
<JobDog :timeArr="value1" v-if="active == '工作犬分析'"></JobDog>
<StudDog :timeArr="value1" v-if="active == '种犬分析'"></StudDog>
<OverviewDog :timeArr="value1" v-if="active == '警犬概览'"></OverviewDog>
<DataV :timeArr="value1" v-if="active == '桌面'"></DataV>
<RetireDog :timeArr="value1" v-if="active == '退役犬分析'"></RetireDog>
<HumanDog :timeArr="value1" v-if="active == '带犬人分析'"></HumanDog>
<HumanDog :timeArr="value1" v-if="active == '带犬人概览'"></HumanDog>
</div>
<div class="footer">
<div
......@@ -67,30 +65,21 @@
</div>
</template>
<script>
import JobDog from "./components/JobDog.vue";
import StudDog from "./components/StudDog.vue";
import RetireDog from './components/retireDog.vue'
import HumanDog from './components/humanDog.vue'
import OverviewDog from './dataJqGl.vue'
import HumanDog from "./components/humanDog.vue";
import DataV from "./dataV.vue";
import zoom from "@/utils/autosize";
export default {
components: {
JobDog,
DataV,
StudDog,
RetireDog,
HumanDog
HumanDog,
OverviewDog,
},
data() {
return {
menuArr: [
{
name: "工作犬分析",
img: require("@/assets/img/left.png"),
activeImg: require("@/assets/img/left2.png"),
},
{
name: "种犬分析",
name: "警犬概览",
img: require("@/assets/img/left.png"),
activeImg: require("@/assets/img/left2.png"),
},
......@@ -100,12 +89,7 @@ export default {
activeImg: require("@/assets/img/zhong2.png"),
},
{
name: "退役犬分析",
img: require("@/assets/img/right.png"),
activeImg: require("@/assets/img/right2.png"),
},
{
name: "带犬人分析",
name: "带犬人概览",
img: require("@/assets/img/right.png"),
activeImg: require("@/assets/img/right2.png"),
},
......@@ -127,7 +111,7 @@ export default {
},
menuClick(item) {
this.active = item.name;
if(item.name == '桌面') {
if (item.name == "桌面") {
this.value1 = [];
}
},
......@@ -141,7 +125,7 @@ export default {
height: 100vh;
display: flex;
flex-flow: nowrap column;
background: url("~@/assets/img/bgImg.png") 100% 100%;
background: url("~@/assets/img/data/bgImg.png") 100% 100%;
.content {
flex: 1;
}
......@@ -186,35 +170,33 @@ export default {
opacity: 1;
box-sizing: border-box;
padding: 5px 0;
background: url("~@/assets/img/footerBg.png") 100% 100% / cover;
background: url("~@/assets/img/data/footerBg.png") 100% 100% / cover;
display: flex;
justify-content: center;
.footerMenu {
background-size: cover;
background-repeat: no-repeat;
color: #44cef6;
width: 195px;
width: 246px;
text-align: center;
font-size: 15px;
font-size: 17px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 -10px;
margin: 2px -5px;
cursor: pointer;
&:nth-of-type(1),
&:nth-of-type(2) {
&:nth-of-type(1) {
&:hover {
background-image: url("~@/assets/img/left1.png") !important;
}
}
&:nth-of-type(4),
&:nth-of-type(5) {
&:nth-of-type(3) {
&:hover {
background-image: url("~@/assets/img/right1.png") !important;
}
}
&:nth-of-type(3) {
&:nth-of-type(2) {
width: 120px;
background-size: 100% 100%;
&:hover {
......
<template>
<div id="deskBox">
<div class="header">
<div class="header_date">
<el-date-picker
size="small"
v-model="value1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
v-if="active != '桌面'"
>
</el-date-picker>
</div>
<div class="header_logo">
<img src="@/assets/img/logoTile2.png" alt="" />
</div>
<div class="header_weather">
<div
style="
position: absolute;
top: 20px;
right: 50px;
font-size: 20px;
color: #fff;
cursor: pointer;
"
@click="getSy"
>
系统首页
</div>
</div>
</div>
<div class="content">
<JobDog :timeArr="value1" v-if="active == '工作犬分析'"></JobDog>
<StudDog :timeArr="value1" v-if="active == '种犬分析'"></StudDog>
<DataV :timeArr="value1" v-if="active == '桌面'"></DataV>
<RetireDog :timeArr="value1" v-if="active == '退役犬分析'"></RetireDog>
<HumanDog :timeArr="value1" v-if="active == '带犬人分析'"></HumanDog>
</div>
<div class="footer">
<div
class="footerMenu"
:style="{
backgroundImage: `url(${
active == item.name ? item.activeImg : item.img
})${active == item.name ? '!important' : ''}`,
}"
v-for="item in menuArr"
:key="item.name"
@click="menuClick(item)"
:class="{ active: active == item.name }"
>
<img
v-if="item.name == '桌面' && active != item.name"
src="@/assets/img/computer1.png"
/>
<img
v-else-if="item.name == '桌面' && active == item.name"
src="@/assets/img/computer2.png"
/>
<p v-else>{{ item.name }}</p>
</div>
</div>
</div>
</template>
<script>
import JobDog from "./components/JobDog.vue";
import StudDog from "./components/StudDog.vue";
import RetireDog from './components/retireDog.vue'
import HumanDog from './components/humanDog.vue'
import DataV from "./dataV.vue";
import zoom from "@/utils/autosize";
export default {
components: {
JobDog,
DataV,
StudDog,
RetireDog,
HumanDog
},
data() {
return {
menuArr: [
{
name: "工作犬分析",
img: require("@/assets/img/left.png"),
activeImg: require("@/assets/img/left2.png"),
},
{
name: "种犬分析",
img: require("@/assets/img/left.png"),
activeImg: require("@/assets/img/left2.png"),
},
{
name: "桌面",
img: require("@/assets/img/zhong.png"),
activeImg: require("@/assets/img/zhong2.png"),
},
{
name: "退役犬分析",
img: require("@/assets/img/right.png"),
activeImg: require("@/assets/img/right2.png"),
},
{
name: "带犬人分析",
img: require("@/assets/img/right.png"),
activeImg: require("@/assets/img/right2.png"),
},
],
active: "桌面",
value1: [],
};
},
mounted() {
this.$nextTick(() => {});
zoom("deskBox");
window.addEventListener("resize", function () {
zoom("deskBox");
});
},
methods: {
getSy() {
this.$router.push("/jqglIndex");
},
menuClick(item) {
this.active = item.name;
if(item.name == '桌面') {
this.value1 = [];
}
},
},
};
</script>
<style lang="scss" scoped>
#deskBox {
width: 100%;
height: 100vh;
display: flex;
flex-flow: nowrap column;
background: url("~@/assets/img/bgImg.png") 100% 100%;
.content {
flex: 1;
}
.header {
height: 80px;
background: url("~@/assets/img/deskHeader.png") 100% 100% / cover;
background-color: linear-gradient(180deg, #11246a 0%, #22528b 100%);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 40px;
.header_weather {
text-align: right;
color: #ebedf1;
font-size: 16px;
font-family: PingFang SC-Regular, PingFang SC;
}
.header_date {
.el-date-editor /deep/ {
background-color: #001235;
border: 1px solid #073e62;
.el-input__icon {
color: #2276fc;
}
.el-range-separator {
color: #3f5580;
}
.el-range-input {
background-color: #001235;
color: #fff;
}
}
}
.header_date,
.header_weather {
width: 30%;
}
}
.footer {
height: 60px;
box-shadow: 0px 0px 26px 0px #000000;
opacity: 1;
box-sizing: border-box;
padding: 5px 0;
background: url("~@/assets/img/footerBg.png") 100% 100% / cover;
display: flex;
justify-content: center;
.footerMenu {
background-size: cover;
background-repeat: no-repeat;
color: #44cef6;
width: 195px;
text-align: center;
font-size: 15px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 -10px;
cursor: pointer;
&:nth-of-type(1),
&:nth-of-type(2) {
&:hover {
background-image: url("~@/assets/img/left1.png") !important;
}
}
&:nth-of-type(4),
&:nth-of-type(5) {
&:hover {
background-image: url("~@/assets/img/right1.png") !important;
}
}
&:nth-of-type(3) {
width: 120px;
background-size: 100% 100%;
&:hover {
background-image: url("~@/assets/img/zhong1.png") !important;
}
}
}
.active {
// background: linear-gradient(180deg, #37b7ff 0%, #083baa 100%);
color: #f1f2f5;
}
}
}
</style>
\ No newline at end of file
......@@ -143,7 +143,7 @@ export default {
name: "南昌片区",
itemStyle: {
normal: {
areaColor: "#31aeff",
areaColor: "#F5D060",
},
emphasis: {
areaColor: "#0c3662",
......@@ -236,9 +236,11 @@ export default {
uncode = "";
}
}
self.$emit("doMap", uncode);
jsonRequest("/homePage/getQgMapNum", {
unitcode: uncode,
}).then((res) => {
debugger;
if (!e) self.mapDogNum = res.data.rows;
if (e == undefined || e == "undefined") {
resolve(res);
......@@ -495,6 +497,7 @@ export default {
if (this.provinces[i].name.indexOf(param.name) != -1) {
let boo = false;
let res = await this.getMapData(this.provinces[i].key);
debugger;
if (
res.code === 200 &&
res.success &&
......@@ -654,6 +657,8 @@ export default {
cursor: pointer;
}
.infoClass {
background: rgba(0, 0, 0, 0.5);
border-radius: 8px 8px 8px 8px;
position: absolute;
top: 10px;
left: 30px;
......@@ -699,7 +704,7 @@ export default {
background: rgb(49, 255, 162);
}
.bg4 {
background: rgb(49, 174, 255);
background: #f5d060;
}
.center_span {
font-size: 14px;
......
......@@ -134,7 +134,7 @@
size="small"
class="elTableClass"
>
<el-table-column align="left" label="操作" width="100">
<el-table-column align="left" label="操作" width="150">
<template slot-scope="scope">
<div>
<el-button
......@@ -164,7 +164,6 @@
type="text"
size="small"
@click="xqData(scope.row)"
v-if="scope.row.spstatus == '02'"
>详情
</el-button>
</div>
......
......@@ -125,6 +125,9 @@
<el-button type="text" size="small" @click="spData(scope.row)">
审批
</el-button>
<el-button type="text" size="small" @click="xqData(scope.row)">
详情
</el-button>
</div>
</template>
</el-table-column>
......@@ -374,6 +377,14 @@ export default {
},
});
},
xqData(row) {
this.$router.push({
name: "jobDogManagexq1",
query: {
xxzjbh: row.xxzjbh,
},
});
},
deleteData(row) {
this.$confirm(`此操作将永久删除该数据,是否继续?`, "提示", {
confirmButtonText: "确定",
......@@ -426,10 +437,10 @@ export default {
trainingUnit: this.formData.trainingUnit,
spFlow: this.formData.spFlow,
};
let token = window.sessionStorage.getItem('token')
let token = window.sessionStorage.getItem("token");
axios
.post(exportSp, JSON.stringify(params), {
headers: { "Content-Type": "application/json","blade-auth": token },
headers: { "Content-Type": "application/json", "blade-auth": token },
responseType: "blob",
})
.then((res) => {
......
......@@ -7,15 +7,9 @@
* @FilePath: \警犬\founder_vue\src\views\login.vue
-->
<template>
<div
class="login"
id="home"
>
<div class="login" id="home">
<div class="logo">
<img
src="@/assets/img/logoleft.png"
alt=""
/>
<img src="@/assets/img/logoleft.png" alt="" />
</div>
<div class="login-container">
<el-form
......@@ -27,30 +21,18 @@
label-width="0px"
class="demo-ruleForm login-page"
>
<div
class="jinhui"
style="position: absolute; top: -35px; left: 141px"
>
<img
src="../assets/img/login/jinhui.png"
alt=""
/>
<div class="jinhui" style="position: absolute; top: -35px; left: 141px">
<img src="../assets/img/login/jinhui.png" alt="" />
</div>
<div class="title">
<div>警犬管理与调度系统</div>
</div>
<div
v-show="ifShowForm"
style="height:300px"
>
<div v-show="ifShowForm" style="height: 300px">
<div
class="el-input el-input-div"
style="position: relative; margin-top: 36px"
>
<el-form-item
prop="account"
class="inputs"
>
<el-form-item prop="account" class="inputs">
<el-input
type="text"
v-model="ruleForm2.account"
......@@ -58,20 +40,12 @@
placeholder="用户名"
></el-input>
</el-form-item>
<span style="position: absolute; top: 10px; left: 6px; height: 100%"><img
class="icon"
src="../assets/img/login/user.png"
alt=""
<span style="position: absolute; top: 10px; left: 6px; height: 100%"
><img class="icon" src="../assets/img/login/user.png" alt=""
/></span>
</div>
<div
class="el-input el-input-div"
style="position: relative"
>
<el-form-item
prop="password"
class="inputs"
>
<div class="el-input el-input-div" style="position: relative">
<el-form-item prop="password" class="inputs">
<el-input
type="password"
v-model="ruleForm2.password"
......@@ -79,16 +53,11 @@
placeholder="用户密码"
></el-input>
</el-form-item>
<span style="position: absolute; top: 10px; left: 6px; height: 100%"><img
class="icon"
src="../assets/img/login/pwd.png"
alt=""
<span style="position: absolute; top: 10px; left: 6px; height: 100%"
><img class="icon" src="../assets/img/login/pwd.png" alt=""
/></span>
</div>
<el-form-item
style="width: 100%"
class="loginBtn"
>
<el-form-item style="width: 100%" class="loginBtn">
<el-button
style="
width: 100%;
......@@ -103,19 +72,32 @@
"
@click="handleSubmit"
:loading="logining"
>登录</el-button>
>登录</el-button
>
</el-form-item>
</div>
<div
@click="download"
style="
width: 240px;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: bold;
line-height: 41px;
color: #1a1a1c;
opacity: 1;
text-align: center;
margin: 6px auto 0px;
cursor: pointer;
"
>
<span style="border-bottom: 1px solid">用户手册</span>
</div>
</el-form>
</div>
<div class="footer">
<div class="footerfont">
<div
class="fontsize"
style="margin-bottom: 17px"
>
<div class="fontsize" style="margin-bottom: 17px">
建设单位:公安部刑侦局
</div>
<div class="fontsize">技术支持:方正国际软件(北京)有限公司</div>
......@@ -151,6 +133,22 @@ export default {
this.getCaptcha();
},
methods: {
download() {
let fileCName = "警犬系统用户手册v1.0.docx";
let fileLocalUrl = "files/sc.docx";
const anchor = document.createElement("a");
anchor.href = fileLocalUrl;
anchor.setAttribute("download", fileCName);
anchor.style.display = "none";
document.body.appendChild(anchor);
setTimeout(() => {
anchor.click();
document.body.removeChild(anchor);
setTimeout(() => {
URL.revokeObjectURL(anchor.href);
}, 250);
}, 66);
},
/**
* post请求
*/
......
......@@ -123,6 +123,9 @@
<el-table-column align="left" label="操作" width="100">
<template slot-scope="scope">
<div>
<el-button type="text" size="small" @click="doDetail(scope.row)">
详情
</el-button>
<el-button
type="text"
size="small"
......@@ -367,6 +370,15 @@ export default {
},
});
},
// 详情
doDetail(row) {
this.$router.push({
name: "poDogInfoManageDetail",
query: {
chipCode: row.id,
},
});
},
deleteData(row) {
this.$confirm(`此操作将永久删除该数据,是否继续?`, "提示", {
confirmButtonText: "确定",
......
......@@ -407,10 +407,10 @@ export default {
return {
updatePdrqAndTrainingLevelIdFlag: null,
pickerOptions: {
disabledDate(time) {
console.log(time.getTime(), Date.now() - 8.64e6);
return time.getTime() < Date.now() - 1 * 24 * 60 * 60 * 1000;
},
// disabledDate(time) {
// console.log(time.getTime(), Date.now() - 8.64e6);
// return time.getTime() < Date.now() - 1 * 24 * 60 * 60 * 1000;
// },
},
phIndex: 0,
dialogImageUrl: "",
......
<template>
<div class="listContentClass">
<div class="contents">
<div
class="titles"
style="width: 72px;"
>查询条件</div>
<div class="titles" style="width: 72px">查询条件</div>
<el-form
:model="formData"
ref="formDataRef"
......@@ -12,20 +9,14 @@
label-width="100px"
label-position="right"
>
<el-form-item
label="芯片号"
class="elItemClass"
>
<el-form-item label="芯片号" class="elItemClass">
<el-input
v-model="formData.chipCode"
:clearable="true"
placeholder="请输入芯片号"
></el-input>
</el-form-item>
<el-form-item
label="犬名"
class="elItemClass"
>
<el-form-item label="犬名" class="elItemClass">
<el-input
v-model="formData.name"
:clearable="true"
......@@ -44,20 +35,14 @@
>
</el-date-picker>
</el-form-item> -->
<el-form-item
label="归属单位"
class="elItemClass"
>
<el-form-item label="归属单位" class="elItemClass">
<lazy-select-tree-dialog
:sendId="formData.trainingUnit"
:formData="formData"
:currentItem="unitInfo"
/>
</el-form-item>
<el-form-item
label="专业方向"
class="elItemClass"
>
<el-form-item label="专业方向" class="elItemClass">
<el-select
clearable
placeholder="请选择专业方向"
......@@ -72,14 +57,11 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="工作犬等级"
class="elItemClass"
>
<el-form-item label="工作犬等级" class="elItemClass">
<el-select
clearable
placeholder="请选择工作犬等级"
style="width:220px;"
style="width: 220px"
v-model="formData.trainingLevelId"
>
<el-option
......@@ -91,10 +73,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="品种"
class="elItemClass"
>
<el-form-item label="品种" class="elItemClass">
<el-select
clearable
placeholder="请选择警用犬种"
......@@ -109,10 +88,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="带犬人员"
class="elItemClass"
>
<el-form-item label="带犬人员" class="elItemClass">
<el-input
v-model="formData.jsrymc"
:clearable="true"
......@@ -140,7 +116,7 @@
<el-button
size="small"
@click="resetForm"
style="margin-right: 0 !important;"
style="margin-right: 0 !important"
class="btnStylePub"
>
重置
......@@ -151,11 +127,14 @@
<div class="resultClass spaceBetween">
<div class="leftC">
<div
class="titles"
style="display: inline-block;width: 72px;"
>查询结果</div>
<span class="infoClass">共有 <span class="numColor">{{ total }}</span> 条查询结果,共 <span class="numColor">{{ Math.ceil(total / limit) }}</span> 页;</span>
<div class="titles" style="display: inline-block; width: 72px">
查询结果
</div>
<span class="infoClass"
>共有 <span class="numColor">{{ total }}</span> 条查询结果,共
<span class="numColor">{{ Math.ceil(total / limit) }}</span>
页;</span
>
</div>
<div class="rightC">
<el-button
......@@ -163,20 +142,23 @@
size="small"
class="btnStylePub btnStyle1"
@click="addData"
>新增</el-button>
>新增</el-button
>
<el-button
size="small"
icon="el-icon-download"
class="btnStylePub btnStyle2"
@click="importData"
>批量导入</el-button>
>批量导入</el-button
>
<el-button
size="small"
icon="el-icon-upload2"
style="margin-right: 0 !important;"
style="margin-right: 0 !important"
class="btnStylePub btnStyle3"
@click="exportData"
>导出</el-button>
>导出</el-button
>
</div>
</div>
......@@ -191,13 +173,12 @@
size="small"
class="elTableClass"
>
<el-table-column
align="left"
label="操作"
width="100"
>
<el-table-column align="left" label="操作" width="150">
<template slot-scope="scope">
<div>
<el-button type="text" size="small" @click="doDetail(scope.row)"
>详情
</el-button>
<el-button
type="text"
size="small"
......@@ -226,16 +207,34 @@
>
<template slot-scope="scope">
<span v-if="item.prop === 'name'">{{ scope.row.name }}</span>
<span v-else-if="item.prop === 'chipCode'">{{ scope.row.chipCode }}</span>
<span v-else-if="item.prop === 'genderForName'">{{ scope.row.genderForName }}</span>
<span v-else-if="item.prop === 'birthDate'">{{ scope.row.birthDate }}</span>
<span v-else-if="item.prop === 'trainingUnit'">{{ scope.row.trainingUnit }}</span>
<span v-else-if="item.prop === 'policeCategoryForName'">{{ scope.row.policeCategoryForName }}</span>
<span v-else-if="item.prop === 'useCategoryForName'">{{ scope.row.useCategoryForName }}</span>
<span v-else-if="item.prop === 'trainingLevelIdForName'">{{ scope.row.trainingLevelIdForName }}</span>
<span v-else-if="item.prop === 'speciesIdForName'">{{ scope.row.speciesIdForName }}</span>
<span v-else-if="item.prop === 'chipCode'">{{
scope.row.chipCode
}}</span>
<span v-else-if="item.prop === 'genderForName'">{{
scope.row.genderForName
}}</span>
<span v-else-if="item.prop === 'birthDate'">{{
scope.row.birthDate
}}</span>
<span v-else-if="item.prop === 'trainingUnit'">{{
scope.row.trainingUnit
}}</span>
<span v-else-if="item.prop === 'policeCategoryForName'">{{
scope.row.policeCategoryForName
}}</span>
<span v-else-if="item.prop === 'useCategoryForName'">{{
scope.row.useCategoryForName
}}</span>
<span v-else-if="item.prop === 'trainingLevelIdForName'">{{
scope.row.trainingLevelIdForName
}}</span>
<span v-else-if="item.prop === 'speciesIdForName'">{{
scope.row.speciesIdForName
}}</span>
<span v-else-if="item.prop === 'dna'">{{ scope.row.dna }}</span>
<span v-else-if="item.prop === 'wordForName'">{{ scope.row.wordForName }}</span>
<span v-else-if="item.prop === 'wordForName'">{{
scope.row.wordForName
}}</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
</el-table-column>
......@@ -496,6 +495,15 @@ export default {
},
});
},
// 详情
doDetail(row) {
this.$router.push({
name: "poDogJobManageDetail",
query: {
id: row.id,
},
});
},
deleteData(row) {
this.$confirm(`此操作将永久删除该数据,是否继续?`, "提示", {
confirmButtonText: "确定",
......@@ -552,10 +560,10 @@ export default {
speciesId: this.formData.speciesId,
jsrymc: this.formData.jsrymc,
};
let token = window.sessionStorage.getItem('token')
let token = window.sessionStorage.getItem("token");
axios
.post(exportPoDogJobUrl, JSON.stringify(params), {
headers: { "Content-Type": "application/json","blade-auth": token },
headers: { "Content-Type": "application/json", "blade-auth": token },
responseType: "blob",
})
.then((res) => {
......
......@@ -342,7 +342,7 @@
</el-form-item>
<el-form-item
label="退役日期"
:label="tyLabl"
class="elItemClass elDateClass"
prop="retiredDate"
>
......@@ -350,7 +350,7 @@
v-model="detailInfo.retiredDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择退役日期"
:placeholder="'请选择' + tyLabl"
>
</el-date-picker>
</el-form-item>
......@@ -475,12 +475,21 @@
class="btnStylePub"
@click="saveData(true)"
v-if="
userInfoJson.grade != 'B' &&
detailInfo.spstatus != '01' &&
detailInfo.spstatus != '02'
detailInfo.spstatus != '02' &&
((detailInfo.trainingLevelId == '4' &&
userInfoJson.grade == 'X') ||
((detailInfo.trainingLevelId == '2' ||
detailInfo.trainingLevelId == '3') &&
(userInfoJson.grade == 'X' || userInfoJson.grade == 'D')) ||
(detailInfo.trainingLevelId == '1' &&
userInfoJson.grade != 'B'))
"
>提请审批</el-button
>
<!-- userInfoJson.grade != 'B' &&
detailInfo.spstatus != '01' &&
detailInfo.spstatus != '02' 旧的 -->
<el-button
type="primary"
size="small"
......@@ -526,6 +535,7 @@ export default {
},
data() {
return {
tyLabl: "退役日期",
fileList3: [],
zdAll: true,
updatepdtraininglevelidflag: null,
......@@ -1167,7 +1177,7 @@ export default {
if (this.$route.query.xxzjbh) {
this.editParams(params, boo);
} else {
this.addParams(params,boo);
this.addParams(params, boo);
}
}
});
......@@ -1269,6 +1279,16 @@ export default {
this.updateKaoHeRules(val);
},
},
"detailInfo.ifretired": {
handler(val) {
if (val == "0") {
this.tyLabl = "延长退役日期";
} else {
this.tyLabl = "退役日期";
}
},
deep: true,
},
},
};
</script>
......
......@@ -124,7 +124,7 @@
size="small"
class="elTableClass"
>
<el-table-column align="left" label="操作" width="100">
<el-table-column align="left" label="操作" width="150">
<template slot-scope="scope">
<div>
<el-button
......@@ -154,7 +154,6 @@
type="text"
size="small"
@click="xqData(scope.row)"
v-if="scope.row.spstatus == '02'"
>详情
</el-button>
</div>
......
<template>
<div>工作犬等级评定方法(2023版)</div>
<div>
<span
@click="downLoadSc"
style="color: #2c5de5; border-bottom: 1px solid; cursor: pointer"
>工作犬等级评定方法(2023版)</span
>
</div>
</template>
<script>
......@@ -7,5 +13,23 @@ export default {
data() {
return {};
},
methods: {
downLoadSc() {
let fileCName = "公安机关工作犬等级评定办法(2023年版)";
let fileLocalUrl = "files/dogindex.doc";
const anchor = document.createElement("a");
anchor.href = fileLocalUrl;
anchor.setAttribute("download", fileCName);
anchor.style.display = "none";
document.body.appendChild(anchor);
setTimeout(() => {
anchor.click();
document.body.removeChild(anchor);
setTimeout(() => {
URL.revokeObjectURL(anchor.href);
}, 250);
}, 66);
},
},
};
</script>
\ No newline at end of file
......@@ -16,7 +16,10 @@
alt=""
style="width: 30px; margin-left: 25px"
/>
<div v-else style="display: flex;justify-content: center;align-items: center">
<div
v-else
style="display: flex; justify-content: center; align-items: center"
>
<img style="width: 60px" src="@/assets/img/jqlogo.png" alt="" />
<img style="width: 170px" src="@/assets/img/jqTitle.png" alt="" />
</div>
......@@ -60,6 +63,22 @@
</span>
<span class="fontClass">数据大屏</span>
</div>
<div
style="margin-left: 20px"
class="dataDaPingClass"
@click="getUpdate"
>
<i
style="
font-size: 22px;
color: #2c5de5;
position: relative;
top: 2px;
"
class="el-icon-upload"
></i>
<span class="fontClass">文件下载</span>
</div>
<div class="lineClass"></div>
<el-dropdown
class="userClass"
......@@ -101,6 +120,22 @@
></router-view>
</div>
</div>
<!-- 附件下载 -->
<el-dialog custom-class="yhscxzDialog" :visible.sync="dialogyhcsxzVisible">
<template #title>
<span class="updateWj">文件下载</span>
</template>
<div class="yhscxzDialog_one" @click="downLoadSc('1')">
批量带犬人员采示例.mp4
</div>
<div class="yhscxzDialog_one" @click="downLoadSc('2')">
批量工作犬采集示例.mp4
</div>
<div class="yhscxzDialog_one" @click="downLoadSc('3')">
系统采集示例.mp4
</div>
</el-dialog>
</div>
</template>
......@@ -118,11 +153,12 @@ export default {
userInfoObj: {},
isCollapseP: false,
matchedArr: [],
dialogyhcsxzVisible: false,
};
},
methods: {
getMatched(val) {
debugger
debugger;
let matArr = [];
let curMatched = this.$route.matched[1];
if (curMatched.meta.isEditPage) {
......@@ -159,6 +195,38 @@ export default {
getHome() {
this.$router.push("/dataV");
},
getUpdate() {
this.dialogyhcsxzVisible = true;
},
downLoadSc(key) {
let fileCName = "";
let fileLocalUrl = "";
if (key == "1") {
// window.open("./File/yiliaoUSerManual.docx");files/jsrydrmb.xlsx
fileCName = "批量带犬人员采示例.mp4";
fileLocalUrl = "files/one.mp4";
} else if (key == "2") {
// window.open("./File/yiliaoUSerManual.docx");
fileCName = "批量工作犬采集示例.mp4";
fileLocalUrl = "files/two.mp4";
} else {
fileCName = "系统采集示例.mp4";
fileLocalUrl = "files/three.mp4";
// window.open("./File/yiliaoUSerManual.docx");
}
const anchor = document.createElement("a");
anchor.href = fileLocalUrl;
anchor.setAttribute("download", fileCName);
anchor.style.display = "none";
document.body.appendChild(anchor);
setTimeout(() => {
anchor.click();
document.body.removeChild(anchor);
setTimeout(() => {
URL.revokeObjectURL(anchor.href);
}, 250);
}, 66);
},
collapse() {
this.isCollapseP = !this.isCollapseP;
},
......@@ -170,7 +238,7 @@ export default {
},
watch: {
"$route.name": function (val) {
debugger
debugger;
this.getMatched(val);
},
},
......@@ -304,6 +372,23 @@ export default {
}
</style>
<style scoped lang="scss">
.yhscxzDialog {
width: 300px !important;
.updateWj {
font-size: 16px;
font-weight: 500;
}
.el-dialog__body {
height: auto;
}
.yhscxzDialog_one {
color: #1a81e1;
padding: 10px 10px 5px;
text-decoration: underline;
cursor: pointer;
}
}
.active {
color: #1c60ff !important;
}
......
......@@ -130,6 +130,9 @@
<el-button type="text" size="small" @click="spData(scope.row)">
审批
</el-button>
<el-button type="text" size="small" @click="xqData(scope.row)">
详情
</el-button>
</div>
</template>
</el-table-column>
......@@ -286,7 +289,7 @@ export default {
this.getLists(this.currentPage);
},
methods: {
spData(row){
spData(row) {
this.$router.push({
name: "jobDogManagetySp",
query: {
......@@ -294,6 +297,14 @@ export default {
},
});
},
xqData(row) {
this.$router.push({
name: "jobDogManagetyXq1",
query: {
xxzjbh: row.xxzjbh,
},
});
},
setAlign(val) {
let rightArr = ["trainCountForName"];
if (rightArr.includes(val)) {
......@@ -441,10 +452,10 @@ export default {
trainingUnit: this.formData.trainingUnit,
spFlow: this.formData.spFlow,
};
let token = window.sessionStorage.getItem('token')
let token = window.sessionStorage.getItem("token");
axios
.post(tyexportSp, JSON.stringify(params), {
headers: { "Content-Type": "application/json","blade-auth": token },
headers: { "Content-Type": "application/json", "blade-auth": token },
responseType: "blob",
})
.then((res) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment