Commit 8bba7f60 authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents 8111d7a1 5134cd5c
<template>
<div class="header-site">
<a-popover trigger="click" placement="bottomLeft" v-model="visible">
<a class="ant-dropdown-link" @click="visible = true">
{{ siteName }} <a-icon type="down" />
</a>
<template slot="content">
<div class="content" style="min-width: 50vw; min-height: 200px">
<div class="flex_row flex_align_c primary-color name">
<a-icon type="environment" style="margin-right: 10px" />
<span style="">{{ siteName }}</span>
</div>
<div class="site-list">
<span
v-for="(item, index) in sitelist"
:key="index"
:class="{ 'primary-color': item.id == checkid }"
@click="setSite(item)"
>{{ item.label }}</span
>
</div>
<div class="check-site">
<span>您的选择是:</span>
<span
v-for="(item, index) in checkarr"
:key="index"
@click="updataSite(item)"
>{{ index > 0 ? ">" : "" }}{{ item.label }}</span
>
</div>
<div class="site-btn">
<a-button style="margin-right: 10px" @click="visible = false"
>取消</a-button
>
<a-button type="primary" @click="onSucessSite" :disabled="isSite"
>确定</a-button
>
</div>
</div>
</template>
</a-popover>
</div>
</template>
<script>
import { getSiteTree } from "@/services/basicsetFun";
import { mapMutations } from "vuex";
import local from "@/utils/local";
// import Cookie from "js-cookie";
export default {
data() {
return {
sitelist: [],
visible: false,
offsetLeft: 0,
checkarr: [], //选中站点
checkid: undefined, //最终选中站点
siteName: "",
isSite: true,
};
},
computed: {},
created() {
this.getwaitedListdata();
},
mounted() {},
methods: {
...mapMutations("site", ["SET_SITE_ID", "SET_siteName"]),
// 确认站点
onSucessSite() {
if (this.checkarr.length == 0) return;
let obj = this.checkarr[this.checkarr.length - 1];
this.clickSite(obj);
},
// 选中
setSite(obj) {
this.checkid = undefined;
// 为子节点不添加数据
let data = this.checkarr[this.checkarr.length - 1];
if (data && (data.isLeaf || data.children.length == 0)) {
// 如果为子节点更新最后一个数据
this.checkid = obj.id;
this.checkarr[this.checkarr.length - 1] = obj;
} else {
this.checkarr.push(obj);
if (obj.children && obj.children.length > 0) {
this.sitelist = obj.children;
}
}
if (obj && obj.type == "site") {
this.isSite = false;
} else {
this.isSite = true;
}
},
// 更新选中
updataSite(row) {
const { id } = row;
this.checkid = undefined;
let index = this.checkarr.findIndex((v) => v.id == id);
this.checkarr.length = index + 1;
this.sitelist = row.children;
if (row && row.type == "site") {
this.isSite = false;
} else {
this.isSite = true;
}
// this.getwaitedListdata(id);
},
getwaitedListdata() {
getSiteTree().then((res) => {
const { code, data } = res.data;
if (code == 1) {
const { siteTree } = data;
this.sitelist = siteTree;
let arr = [];
const treeFn = function(e) {
e.forEach((element) => {
arr.push(element);
if (element.children && element.children.length > 0) {
treeFn(element.children);
}
});
};
const siteid = local.getLocal("siteId");
treeFn(siteTree);
const siteObj = arr.find((v) => v.id == siteid);
this.siteName = siteObj ? siteObj.label : "请选择站点";
}
});
},
clickSite(obj) {
// Cookie.set("siteid", obj.id);
// let siteInfo = {
// siteName: obj.label,
// siteid: obj.id,
// };
local.setLocal("siteId", obj.id);
local.setLocal("siteName", obj.label);
this.SET_SITE_ID(obj.id);
this.SET_siteName(obj.label);
this.show = false;
if (location.href.search(/token/gi) >= 0) {
setTimeout(() => {
location.reload();
});
} else {
location.reload();
}
},
ontrigger(e) {
if (e.target && e.target.nodeName == "A") {
this.show = !this.show;
}
},
},
};
</script>
<style lang="less" scoped>
.ant-dropdown-link {
padding: 0 20px;
font-size: 16px;
min-width: 200px;
display: inline-block;
color: #fff;
}
.content {
display: flex;
flex-direction: column;
justify-content: space-around;
.name {
font-size: 20px;
}
.site-list {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
display: flex;
flex-wrap: wrap;
span {
line-height: 1.5;
padding: 10px 20px;
cursor: pointer;
&:hover {
color: #1890ff;
}
}
}
.check-site,
.site-btn {
padding: 0 20px;
}
.check-site {
cursor: pointer;
}
}
</style>
<template> <template>
<div class="header-site"> <div :trigger="['click']" class="trigger" @click="ontrigger">
<a-popover trigger="click" placement="bottomLeft" v-model="visible"> <slot>
<a class="ant-dropdown-link" @click="visible = true"> <a class="ant-dropdown-link" @click="(e) => e.preventDefault()">
{{ siteName }} <a-icon type="down" /> {{ siteName }} <a-icon type="down" />
</a> </a>
<template slot="content"> </slot>
<div class="content" style="min-width: 50vw; min-height: 200px"> <div
slot="overlay"
class="select-site"
:style="{ left: `${offsetLeft}px` }"
v-if="show"
>
<div class="flex_row flex_align_c primary-color name"> <div class="flex_row flex_align_c primary-color name">
<a-icon type="environment" style="margin-right: 10px" /> <a-icon type="environment" style="margin-right: 10px" />
<span style="">{{ siteName }}</span> <span style="">{{ siteName }}</span>
...@@ -22,6 +27,7 @@ ...@@ -22,6 +27,7 @@
<div class="check-site"> <div class="check-site">
<span>您的选择是:</span> <span>您的选择是:</span>
<span <span
class="check-item"
v-for="(item, index) in checkarr" v-for="(item, index) in checkarr"
:key="index" :key="index"
@click="updataSite(item)" @click="updataSite(item)"
...@@ -29,28 +35,26 @@ ...@@ -29,28 +35,26 @@
> >
</div> </div>
<div class="site-btn"> <div class="site-btn">
<a-button style="margin-right: 10px" @click="visible = false" <a-button @click="show = false" style="margin-right: 10px"
>取消</a-button >取消</a-button
> >
<a-button type="primary" @click="onSucessSite" :disabled="isSite" <a-button type="primary" @click="onSucessSite" :disabled="isSite"
>确定</a-button >确定</a-button
> >
</div> </div>
</div> </div>
</template>
</a-popover>
</div> </div>
</template> </template>
<script> <script>
import { getSiteTree } from "@/services/basicsetFun"; import { getSiteTree } from "@/services/basicsetFun";
import { mapMutations } from "vuex"; import { mapMutations } from "vuex";
import local from "@/utils/local"; import local from "@/utils/local";
// import Cookie from "js-cookie";
export default { export default {
data() { data() {
return { return {
sitelist: [], sitelist: [],
visible: false, show: false,
offsetLeft: 0, offsetLeft: 0,
checkarr: [], //选中站点 checkarr: [], //选中站点
checkid: undefined, //最终选中站点 checkid: undefined, //最终选中站点
...@@ -62,13 +66,17 @@ export default { ...@@ -62,13 +66,17 @@ export default {
created() { created() {
this.getwaitedListdata(); this.getwaitedListdata();
}, },
mounted() {}, mounted() {
const { offsetLeft } = this.$el;
this.offsetLeft = offsetLeft;
},
methods: { methods: {
...mapMutations("site", ["SET_SITE_ID", "SET_siteName"]), ...mapMutations("site", ["SET_SITE_ID", "SET_siteName"]),
// 确认站点 // 确认站点
onSucessSite() { onSucessSite() {
if (this.checkarr.length == 0) return; if (this.checkarr.length == 0) return;
let obj = this.checkarr[this.checkarr.length - 1]; let obj = this.checkarr[this.checkarr.length - 1];
this.clickSite(obj); this.clickSite(obj);
}, },
// 选中 // 选中
...@@ -76,16 +84,22 @@ export default { ...@@ -76,16 +84,22 @@ export default {
this.checkid = undefined; this.checkid = undefined;
// 为子节点不添加数据 // 为子节点不添加数据
let data = this.checkarr[this.checkarr.length - 1]; let data = this.checkarr[this.checkarr.length - 1];
if (data && (data.isLeaf || data.children.length == 0)) { if (data && (data.isLeaf || data.children.length == 0)) {
// 如果为子节点更新最后一个数据 // 如果为子节点更新最后一个数据
this.checkid = obj.id; this.checkid = obj.id;
this.checkarr[this.checkarr.length - 1] = obj; this.checkarr[this.checkarr.length - 1] = obj;
// 如果选中数据有子集更新站点列表
if (obj.children && obj.children.length > 0) {
this.sitelist = obj.children;
}
} else { } else {
this.checkarr.push(obj); this.checkarr.push(obj);
if (obj.children && obj.children.length > 0) { if (obj.children && obj.children.length > 0) {
this.sitelist = obj.children; this.sitelist = obj.children;
} }
} }
if (obj && obj.type == "site") { if (obj && obj.type == "site") {
this.isSite = false; this.isSite = false;
} else { } else {
...@@ -97,8 +111,13 @@ export default { ...@@ -97,8 +111,13 @@ export default {
const { id } = row; const { id } = row;
this.checkid = undefined; this.checkid = undefined;
let index = this.checkarr.findIndex((v) => v.id == id); let index = this.checkarr.findIndex((v) => v.id == id);
this.checkarr.length = index + 1;
if (index > -1) {
this.checkarr.splice(index + 1, this.checkarr.length - (index + 1));
}
if (row.children && row.children.length > 0) {
this.sitelist = row.children; this.sitelist = row.children;
}
if (row && row.type == "site") { if (row && row.type == "site") {
this.isSite = false; this.isSite = false;
...@@ -110,11 +129,12 @@ export default { ...@@ -110,11 +129,12 @@ export default {
getwaitedListdata() { getwaitedListdata() {
getSiteTree().then((res) => { getSiteTree().then((res) => {
const { code, data } = res.data; const { code, data } = res.data;
if (code == 1) { if (code == 1) {
const { siteTree } = data; const { siteTree } = data;
this.sitelist = siteTree; this.sitelist = siteTree;
let arr = []; let arr = [];
const treeFn = function(e) { const treeFn = function (e) {
e.forEach((element) => { e.forEach((element) => {
arr.push(element); arr.push(element);
if (element.children && element.children.length > 0) { if (element.children && element.children.length > 0) {
...@@ -130,17 +150,13 @@ export default { ...@@ -130,17 +150,13 @@ export default {
}); });
}, },
clickSite(obj) { clickSite(obj) {
// Cookie.set("siteid", obj.id);
// let siteInfo = {
// siteName: obj.label,
// siteid: obj.id,
// };
local.setLocal("siteId", obj.id); local.setLocal("siteId", obj.id);
local.setLocal("siteName", obj.label); local.setLocal("siteName", obj.label);
this.SET_SITE_ID(obj.id); this.SET_SITE_ID(obj.id);
this.SET_siteName(obj.label); this.SET_siteName(obj.label);
this.show = false; this.show = false;
if (location.href.search(/token/gi) >= 0) { if (location.href.search(/token/gi) >= 0) {
this.$router.push({ path: "/resource/advimg" });
setTimeout(() => { setTimeout(() => {
location.reload(); location.reload();
}); });
...@@ -157,28 +173,43 @@ export default { ...@@ -157,28 +173,43 @@ export default {
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.trigger {
display: inline-block;
position: relative;
}
.ant-dropdown-link { .ant-dropdown-link {
color: #fff;
padding: 0 20px; padding: 0 20px;
font-size: 16px; font-size: 16px;
min-width: 200px; min-width: 200px;
display: inline-block; display: inline-block;
color: #fff;
} }
.content { .select-site {
display: flex; position: fixed;
flex-direction: column; left: 0;
justify-content: space-around; top: 65px;
background: #fff;
border-radius: 6px;
padding: 10px;
min-width: 60%;
max-width: 80%;
z-index: 9;
color: rgba(0, 0, 0, 0.8);
font-size: 14px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
.name { .name {
font-size: 20px; font-size: 20px;
} }
.site-list { .site-list {
// padding: 10px 0;
border-top: 1px solid #ddd; border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd; border-bottom: 1px solid #ddd;
display: flex; overflow: hidden;
flex-wrap: wrap;
span { span {
float: left;
line-height: 1.5; line-height: 1.5;
padding: 10px 20px; padding: 10px 20px;
display: inline-block;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
color: #1890ff; color: #1890ff;
...@@ -189,7 +220,7 @@ export default { ...@@ -189,7 +220,7 @@ export default {
.site-btn { .site-btn {
padding: 0 20px; padding: 0 20px;
} }
.check-site { .check-item {
cursor: pointer; cursor: pointer;
} }
} }
......
...@@ -136,15 +136,12 @@ export default { ...@@ -136,15 +136,12 @@ export default {
try { try {
let Obj = JSON.parse(value); let Obj = JSON.parse(value);
let isjson = let isjson =
typeof Obj == "object" &&
Object.prototype.toString.call(Obj).toLowerCase() == Object.prototype.toString.call(Obj).toLowerCase() ==
"[object object]" && "[object object]" && Object.keys(Obj).length;
Object.keys(Obj).length;
!value.length;
if (isjson) { if (isjson) {
callback(); callback();
} else { } else {
callback(new Error("输入的JSON对象格式")); callback(new Error("请输入JSON对象格式"));
} }
} catch (err) { } catch (err) {
callback(new Error("输入的JSON数据格式有误")); callback(new Error("输入的JSON数据格式有误"));
......
...@@ -69,6 +69,10 @@ ...@@ -69,6 +69,10 @@
<template slot="sort" slot-scope="text"> <template slot="sort" slot-scope="text">
{{ text.sort ? text.sort : "--" }} {{ text.sort ? text.sort : "--" }}
</template> </template>
<!-- 类型 -->
<template slot="type" slot-scope="text">
{{ text.type ? dict.type[text.type] : "--" }}
</template>
<!-- 创建时间 --> <!-- 创建时间 -->
<template slot="createTime" slot-scope="text"> <template slot="createTime" slot-scope="text">
{{ text.createTime | dateFormat }} {{ text.createTime | dateFormat }}
...@@ -148,6 +152,21 @@ ...@@ -148,6 +152,21 @@
/> />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12">
<a-form-model-item label="类型" prop="type">
<a-select v-model="formData.type" placeholder="请选择类型">
<a-select-option
v-for="(v, key) in dict.type"
:key="key"
:value="Number(key)"
>
{{ v }}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12"> <a-col :span="12">
<a-form-model-item label="排序" prop="sort"> <a-form-model-item label="排序" prop="sort">
<a-input-number <a-input-number
...@@ -180,27 +199,6 @@ ...@@ -180,27 +199,6 @@
<div class="ant-upload-text">点击上传</div> <div class="ant-upload-text">点击上传</div>
</div> </div>
</a-upload> </a-upload>
<!-- <a-upload
name="file"
list-type="picture-card"
:action="api + 'base/file/commonupload'"
@change="handleUpload"
:before-upload="beforeUpload"
:show-upload-list="false"
:accept="accept"
>
<div v-if="formData.modelIcon">
<div class="svg-box" v-if="isSvg(formData.modelIcon)">
<img :src="api + formData.modelIcon" />
</div>
<img v-else :src="api + formData.modelIcon" />
</div>
<div v-else>
<a-icon :type="loading ? 'loading' : 'plus'" />
<div class="ant-upload-text">点击上传</div>
</div>
</a-upload> -->
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</a-row> </a-row>
...@@ -275,6 +273,10 @@ const columns = [ ...@@ -275,6 +273,10 @@ const columns = [
width: "5%", width: "5%",
scopedSlots: { customRender: "sort" }, scopedSlots: { customRender: "sort" },
}, },
{
title: "类型",
scopedSlots: { customRender: "type" },
},
{ {
title: "创建时间", title: "创建时间",
width: "12%", width: "12%",
...@@ -317,6 +319,7 @@ export default { ...@@ -317,6 +319,7 @@ export default {
modelUrl: "", // 模块地址 modelUrl: "", // 模块地址
remark: "", // 备注 remark: "", // 备注
sort: "", // 排序 sort: "", // 排序
type: undefined, // 类型
}, },
current: 1, current: 1,
size: 10, size: 10,
...@@ -336,9 +339,13 @@ export default { ...@@ -336,9 +339,13 @@ export default {
modelIcon: [ modelIcon: [
{ required: true, message: "模块图标不能为空", trigger: "change" }, { required: true, message: "模块图标不能为空", trigger: "change" },
], ],
type: [
{ required: true, message: "模块类型不能为空", trigger: "change" },
],
}, },
StatementVisible: false, StatementVisible: false,
modelInfo: {}, modelInfo: {},
dict: {},
}; };
}, },
created() { created() {
...@@ -354,13 +361,16 @@ export default { ...@@ -354,13 +361,16 @@ export default {
modelName: `%${this.searchValue}%`, modelName: `%${this.searchValue}%`,
...search, ...search,
}); });
let { pageInfo, data } = res.data.data; if (res.data.code == 1) {
let { pageInfo, data, dict } = res.data.data;
if (!data.length && this.current > 1) { if (!data.length && this.current > 1) {
this.current -= 1; this.current -= 1;
this.getmodelList(); this.getmodelList();
} }
this.dict = dict;
this.total = pageInfo.totalResult; this.total = pageInfo.totalResult;
this.modelList = data; this.modelList = data;
}
this.loading = false; this.loading = false;
}, },
// 新增按钮 // 新增按钮
......
...@@ -192,3 +192,8 @@ PRIMARY KEY (`id`) ...@@ -192,3 +192,8 @@ PRIMARY KEY (`id`)
ALTER TABLE mortals_sys_app_category ADD COLUMN `cover` varchar(256) DEFAULT '' COMMENT '封面' AFTER sort; ALTER TABLE mortals_sys_app_category ADD COLUMN `cover` varchar(256) DEFAULT '' COMMENT '封面' AFTER sort;
ALTER TABLE mortals_sys_app_category ADD COLUMN `remark` varchar(256) DEFAULT '' COMMENT '备注' AFTER cover; ALTER TABLE mortals_sys_app_category ADD COLUMN `remark` varchar(256) DEFAULT '' COMMENT '备注' AFTER cover;
-- ----------------------------
2023-08-29
-- ----------------------------
ALTER TABLE `mortals_sys_model` ADD COLUMN `type` tinyint(2) DEFAULT '1' COMMENT '模块分类' AFTER `sort`;
\ No newline at end of file
package com.mortals.xhx.module.model.model; package com.mortals.xhx.module.model.model;
import java.util.List;
import java.util.ArrayList;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.model.model.vo.ModelVo; import com.mortals.xhx.module.model.model.vo.ModelVo;
/** /**
* 模块实体对象 * 模块实体对象
...@@ -45,7 +38,10 @@ public class ModelEntity extends ModelVo { ...@@ -45,7 +38,10 @@ public class ModelEntity extends ModelVo {
@JSONField(serialize = false) @JSONField(serialize = false)
private Integer sort; private Integer sort;
/**
* 模块分类
*/
private Integer type;
public ModelEntity(){} public ModelEntity(){}
/** /**
...@@ -133,8 +129,20 @@ public class ModelEntity extends ModelVo { ...@@ -133,8 +129,20 @@ public class ModelEntity extends ModelVo {
this.sort = sort; this.sort = sort;
} }
/**
* 获取 模块分类
* @return Integer
*/
public Integer getType() {
return type;
}
/**
* 设置 模块分类
* @param type
*/
public void setType(Integer type) {
this.type = type;
}
@Override @Override
public int hashCode() { public int hashCode() {
...@@ -160,6 +168,7 @@ public class ModelEntity extends ModelVo { ...@@ -160,6 +168,7 @@ public class ModelEntity extends ModelVo {
sb.append(",modelUrl:").append(getModelUrl()); sb.append(",modelUrl:").append(getModelUrl());
sb.append(",remark:").append(getRemark()); sb.append(",remark:").append(getRemark());
sb.append(",sort:").append(getSort()); sb.append(",sort:").append(getSort());
sb.append(",type:").append(getType());
return sb.toString(); return sb.toString();
} }
...@@ -176,5 +185,7 @@ public class ModelEntity extends ModelVo { ...@@ -176,5 +185,7 @@ public class ModelEntity extends ModelVo {
this.remark = null; this.remark = null;
this.sort = 0; this.sort = 0;
this.type = 1;
} }
} }
\ No newline at end of file
package com.mortals.xhx.module.model.model; package com.mortals.xhx.module.model.model;
import java.util.List; import java.util.List;
import com.mortals.xhx.module.model.model.ModelEntity;
/** /**
* 模块查询对象 * 模块查询对象
* *
...@@ -72,6 +71,21 @@ public class ModelQuery extends ModelEntity { ...@@ -72,6 +71,21 @@ public class ModelQuery extends ModelEntity {
/** 结束 修改时间 */ /** 结束 修改时间 */
private String updateTimeEnd; private String updateTimeEnd;
/** 开始 模块分类 */
private Integer typeStart;
/** 结束 模块分类 */
private Integer typeEnd;
/** 增加 模块分类 */
private Integer typeIncrement;
/** 模块分类列表 */
private List <Integer> typeList;
/** 模块分类排除列表 */
private List <Integer> typeNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */ /** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<ModelQuery> orConditionList; private List<ModelQuery> orConditionList;
...@@ -551,6 +565,86 @@ public class ModelQuery extends ModelEntity { ...@@ -551,6 +565,86 @@ public class ModelQuery extends ModelEntity {
return this; return this;
} }
/**
* 获取 开始 模块分类
* @return typeStart
*/
public Integer getTypeStart(){
return this.typeStart;
}
/**
* 设置 开始 模块分类
* @param typeStart
*/
public void setTypeStart(Integer typeStart){
this.typeStart = typeStart;
}
/**
* 获取 结束 模块分类
* @return $typeEnd
*/
public Integer getTypeEnd(){
return this.typeEnd;
}
/**
* 设置 结束 模块分类
* @param typeEnd
*/
public void setTypeEnd(Integer typeEnd){
this.typeEnd = typeEnd;
}
/**
* 获取 增加 模块分类
* @return typeIncrement
*/
public Integer getTypeIncrement(){
return this.typeIncrement;
}
/**
* 设置 增加 模块分类
* @param typeIncrement
*/
public void setTypeIncrement(Integer typeIncrement){
this.typeIncrement = typeIncrement;
}
/**
* 获取 模块分类
* @return typeList
*/
public List<Integer> getTypeList(){
return this.typeList;
}
/**
* 设置 模块分类
* @param typeList
*/
public void setTypeList(List<Integer> typeList){
this.typeList = typeList;
}
/**
* 获取 模块分类
* @return typeNotList
*/
public List<Integer> getTypeNotList(){
return this.typeNotList;
}
/**
* 设置 模块分类
* @param typeNotList
*/
public void setTypeNotList(List<Integer> typeNotList){
this.typeNotList = typeNotList;
}
/** /**
* 设置 排序 * 设置 排序
* @param sort * @param sort
......
package com.mortals.xhx.module.model.web; package com.mortals.xhx.module.model.web;
import com.mortals.framework.annotation.UnAuth; import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.IBaseEnum;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.framework.web.BasePhpCRUDJsonMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.common.code.ModelTypeEnum;
import com.mortals.xhx.module.model.model.ModelEntity; import com.mortals.xhx.module.model.model.ModelEntity;
import com.mortals.xhx.module.model.model.ModelQuery; import com.mortals.xhx.module.model.model.ModelQuery;
import com.mortals.xhx.module.model.service.ModelService; import com.mortals.xhx.module.model.service.ModelService;
import com.mortals.xhx.module.window.model.WindowMatterEntity;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -55,6 +53,7 @@ public class ModelController extends BaseCRUDJsonBodyMappingController<ModelServ ...@@ -55,6 +53,7 @@ public class ModelController extends BaseCRUDJsonBodyMappingController<ModelServ
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "type", IBaseEnum.getEnumMap(ModelTypeEnum.class));
super.init(model, context); super.init(model, context);
} }
......
package com.mortals.xhx.common.code;
import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
public enum ModelTypeEnum implements IBaseEnum {
JC(1,"平台基础能力",SysConstains.STYLE_DEFAULT),
G2G(2,"G2G:政府面向政府", SysConstains.STYLE_DEFAULT),
G2C(3,"G2C:政府面向公民", SysConstains.STYLE_DEFAULT),
;
private int value;
private String desc;
private String style;
ModelTypeEnum(int value, String desc, String style) {
this.value = value;
this.desc = desc;
this.style = style;
}
@Override
public int getValue() {
return this.value;
}
@Override
public String getDesc() {
return this.desc;
}
@Override
public String getStyle() {
return this.style;
}
public static ModelTypeEnum getByValue(int value) {
for (ModelTypeEnum e : ModelTypeEnum.values()) {
if (e.getValue() == value) {
return e;
}
}
return null;
}
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (ModelTypeEnum item : ModelTypeEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
\ No newline at end of file
...@@ -38,6 +38,11 @@ public class ModelFeignVO implements Serializable { ...@@ -38,6 +38,11 @@ public class ModelFeignVO implements Serializable {
@JSONField(serialize = false) @JSONField(serialize = false)
private Integer sort; private Integer sort;
/**
* 模块分类
*/
private Integer type;
/** 模块下包含的数据统计 */ /** 模块下包含的数据统计 */
private List<ModelCensusFeignVO> censusList; private List<ModelCensusFeignVO> censusList;
} }
VUE_APP_API_BASE_URL=http://8.136.255.30:11072 # 易政秀
\ No newline at end of file VUE_APP_API_ES_URL=http://8.136.255.30
# 系统名称
VUE_APP_systemName = 智慧大厅集成化综合管理平台
\ No newline at end of file
# 开发环境配置 # 开发环境配置
NODE_ENV = development NODE_ENV = development
#VUE_APP_API_BASE_URL=http://8.136.255.30:11078 # VUE_APP_API_BASE_URL=http://8.136.255.30:11078
VUE_APP_API_BASE_URL=http://192.168.0.98:11078 VUE_APP_API_BASE_URL=http://192.168.0.98:11078
#图片显示拼接 #图片显示拼接
VUE_APP_API_IMG_URL=http://8.136.255.30:11078/ # VUE_APP_API_IMG_URL=http://8.136.255.30:11078/
VUE_APP_API_IMG_URL=http://192.168.0.98:11078/
#余林 #余林
#VUE_APP_API_PHP_URL=http://8.136.255.30:8090 # VUE_APP_API_PHP_URL=http://8.136.255.30:8090
VUE_APP_API_PHP_URL=http://192.168.0.98:8090 VUE_APP_API_PHP_URL=http://192.168.0.98:8090
#宜宾 #宜宾
#VUE_APP_API_BASE_URL=http://10.12.185.213:11072 #VUE_APP_API_BASE_URL=http://10.12.185.213:11072
......
...@@ -6,5 +6,3 @@ VUE_APP_API_BASE_URL=/basics_api ...@@ -6,5 +6,3 @@ VUE_APP_API_BASE_URL=/basics_api
VUE_APP_API_PHP_URL=/zwfw_api VUE_APP_API_PHP_URL=/zwfw_api
#图片显示拼接 #图片显示拼接
VUE_APP_API_IMG_URL = VUE_APP_API_IMG_URL =
VUE_APP_API_PRP_RUL=http://112.19.80.237:11007
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -11,36 +11,48 @@ ...@@ -11,36 +11,48 @@
}, },
"dependencies": { "dependencies": {
"@babel/polyfill": "^7.12.1", "@babel/polyfill": "^7.12.1",
"@ianwalter/vuex-reset": "^4.3.4",
"@jiaminghi/data-view": "^2.10.0", "@jiaminghi/data-view": "^2.10.0",
"ant-design-vue": "^1.7.8", "ant-design-vue": "^1.7.8",
"axios": "^0.27.2", "axios": "^0.27.2",
"babel-polyfill": "^6.26.0", "babel-polyfill": "^6.26.0",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"crypto-js": "^4.1.1",
"echarts": "^5.3.3", "echarts": "^5.3.3",
"element-ui": "^2.15.8", "element-ui": "^2.15.8",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"gsap": "^3.12.2",
"heatmap.js": "^2.0.5", "heatmap.js": "^2.0.5",
"highlight.js": "^11.5.1", "highlight.js": "^11.5.1",
"js-export-excel": "^1.1.4", "js-export-excel": "^1.1.4",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moment": "^2.29.4", "moment": "^2.29.4",
"qs": "^6.10.3", "qs": "^6.10.3",
"secure-ls": "^1.2.6",
"swiper": "5",
"three": "^0.155.0",
"v-viewer": "^1.6.4", "v-viewer": "^1.6.4",
"vue": "^2.6.14", "vue": "^2.6.14",
"vue-highlightjs": "^1.3.3", "vue-highlightjs": "^1.3.3",
"vue-lazyload": "1.3.3",
"vue-router": "^3.5.1", "vue-router": "^3.5.1",
"vuex": "^3.6.2" "vuedraggable": "^2.24.3",
"vuex": "^3.6.2",
"vuex-persistedstate": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/postcss7-compat": "^2.2.17",
"@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0", "@vue/cli-service": "~5.0.0",
"autoprefixer": "^10.4.15",
"browserslist": "^4.21.4", "browserslist": "^4.21.4",
"caniuse-lite": "^1.0.30001442", "caniuse-lite": "^1.0.30001442",
"less": "^4.0.0", "less": "^4.0.0",
"less-loader": "^8.0.0", "less-loader": "^8.0.0",
"postcss": "^8.4.12", "postcss": "^8.4.12",
"tailwindcss": "^3.3.3",
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"webpack-bundle-analyzer": "^4.7.0" "webpack-bundle-analyzer": "^4.7.0"
}, },
......
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="">
<head>
<head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> <link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title> <title><%= process.env.VUE_APP_systemName %></title>
智慧大厅综合管理系统
</title>
<style> <style>
*, @font-face {
:after, font-family: Source Han Sans CN ;
:before { src: url('./SourceHanSansSC-Regular-2.otf');
-webkit-box-sizing: border-box !important; }
-moz-box-sizing: border-box !important;
-o-box-sizing: border-box !important;
-ms-box-sizing: border-box !important;
box-sizing: border-box !important;
}
html,
body {
font-size: 16px;
font-family: "Arial", "Microsoft YaHei", "黑体", "宋体", "微软雅黑",
sans-serif !important;
width: 100%;
height: 100%;
}
</style> </style>
</head> </head>
<body>
<body style="font-size: 16px;">
<noscript> <noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
Please enable it to continue.</strong>
</noscript> </noscript>
<div id="app"></div> <div id="app"></div>
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
</html> </html>
<template> <template>
<div class="app"> <div class="app w-full h-full">
<a-spin v-bind="loadingProps">
<a-config-provider :locale="zh_CN"> <a-config-provider :locale="zh_CN">
<router-view /> <router-view />
<!-- <keep-alive>
<router-view />
</keep-alive> -->
</a-config-provider> </a-config-provider>
</a-spin>
<!-- 导出进度条 --> <!-- 导出进度条 -->
<div class="export" v-if="progressFile.show"> <div
v-if="progressFile.show"
class="export w-full h-full flex justify-center items-center fixed left-0 top-0 z-50"
>
<div class="w-[300px]">
<a-progress :percent="progressFile.percent" status="active" /> <a-progress :percent="progressFile.percent" status="active" />
</div> </div>
</div> </div>
</div>
</template> </template>
<script> <script>
import Vue from "vue"; import Vue from "vue";
import zh_CN from "ant-design-vue/lib/locale-provider/zh_CN"; import zh_CN from "ant-design-vue/lib/locale-provider/zh_CN";
export default { export default {
name: "App",
data() { data() {
return { return {
zh_CN, zh_CN,
loadingProps: { loadingProps: {
spinning: false, spinning: false,
}, },
progressFile:{ progressFile: {
show:false, show: false,
percent:1 percent: 1,
} },
}; };
}, },
beforeCreate() { beforeCreate() {
Vue.prototype.$app = this; Vue.prototype.$app = this;
}, },
created() { created() {
this.readVueXData(); // this.readVueXData();
}, },
methods: { methods: {
readVueXData() { readVueXData() {
...@@ -57,26 +56,17 @@ export default { ...@@ -57,26 +56,17 @@ export default {
}, },
}; };
</script> </script>
<style lang="less" scoped>
.app { <style lang="less">
width: 100% !important; .export {
min-width: 1440px !important; background-color: rgba(0, 0, 0, 0.3);
height: 100%;
}
.ant-spin-nested-loading,
/deep/.ant-spin-container {
width: 100%;
min-height: 100% !important;
display: flex;
// flex-direction: column;
} }
.export{ .ant-calendar-prev-month-btn::before,
position: fixed; .ant-calendar-prev-year-btn::before,
left: 50%; .ant-calendar-prev-year-btn::after,
top: 50%; .ant-calendar-next-month-btn::before,
transform: translate(-50%); .ant-calendar-next-year-btn::before,
z-index: 99; .ant-calendar-next-year-btn::after {
width: 300px; border-color: rgba(0, 0, 0, 1) !important;
height: 150px;
} }
</style> </style>
\ No newline at end of file
import http from "../request/http"; import http from "../request/http";
let baseURL = process.env.VUE_APP_API_BASE_URL let baseURL = process.env.VUE_APP_API_BASE_URL;
// 1.16.1. 查询站点编排列表 // 1.16.1. 查询站点编排列表
export function appsListInterface(params) { export function appsListInterface(params) {
return http.post(`${baseURL}/zwfw/site/model/list`, params); return http.post(`${baseURL}/zwfw/site/model/list/group`, params);
}
// 获取收藏
export function getCollect(params) {
return http.post(`${baseURL}/zwfw/user/model/collect/get`, params);
}
// 保存收藏
export function saveCollect(params) {
return http.post(`${baseURL}/zwfw/user/model/collect/save`, params);
} }
...@@ -20,9 +20,3 @@ export function changePassword(params) { ...@@ -20,9 +20,3 @@ export function changePassword(params) {
export function editPassword(params) { export function editPassword(params) {
return http.post(`${baseURL}/zwfw/user/reset/password`, params); return http.post(`${baseURL}/zwfw/user/reset/password`, params);
} }
// 获取图形验证码
export function createCode(params) {
return http.post(`${baseURL}/zwfw/securitycode/createCode`, params, {
responseType: "blob",
});
}
/* 颜色 */
.primary {
color: #1890ff;
}
.delete {
color: #ff4d4f;
}
.green {
color: #1bbc9b;
}
.clofff {
color: #fff;
}
.orange {
color: orange;
}
.bgdel {
background-color: #ff4d4f;
}
.bgpr {
background-color: #1890ff;
}
.bgg {
background-color: #1bbc9b;
}
/* 版心 */
.container {
width: 1200px;
}
/* 弹性布局 */
.flex {
display: flex;
}
.flex1 {
flex: 1;
}
.flexc {
flex-direction: column;
}
.flexwrap {
flex-wrap: wrap;
}
.jcc {
justify-content: center;
}
.jca {
justify-content: space-around;
}
.jcb {
justify-content: space-between;
}
.jce {
justify-content: space-evenly;
}
.aic {
align-items: center;
}
.aca {
align-content: space-around;
}
.acb {
align-content: space-between;
}
.ace {
align-content: space-evenly;
}
/* margin */
.m10 {
margin: 10px;
}
.m15 {
margin: 15px;
}
.m20 {
margin: 20px;
}
.mt10 {
margin-top: 10px;
}
.mt15 {
margin-top: 15px;
}
.mt20 {
margin-top: 20px;
}
.mt50 {
margin-top: 50px;
}
.ml10 {
margin-left: 10px;
}
.ml15 {
margin-left: 15px;
}
.ml20 {
margin-left: 20px;
}
.ml25 {
margin-left: 25px;
}
.mr10 {
margin-right: 10px;
}
.mr15 {
margin-right: 15px;
}
.mr20 {
margin-right: 20px;
}
.mr25 {
margin-right: 25px;
}
.mr50 {
margin-right: 50px;
}
.mb10 {
margin-bottom: 10px;
}
.mb15 {
margin-bottom: 15px;
}
.mb20 {
margin-bottom: 20px;
}
.mb25 {
margin-bottom: 25px;
}
/* padding */
.pd10 {
padding: 10px;
}
.pd15 {
padding: 15px;
}
.pd20 {
padding: 20px;
}
.pdt10 {
padding-top: 10px;
}
.pdt15 {
padding-top: 15px;
}
.pdt20 {
padding-top: 20px;
}
.pdt30 {
padding-top: 30px;
}
.pdl8 {
padding-left: 8px;
}
.pdl10 {
padding-left: 10px;
}
.pdl15 {
padding-left: 15px;
}
.pdl20 {
padding-left: 20px;
}
.pdr10 {
padding-right: 10px;
}
.pdr15 {
padding-right: 15px;
}
.pdr20 {
padding-right: 20px;
}
.pdb10 {
padding-bottom: 10px;
}
.pdb15 {
padding-bottom: 15px;
}
.pdb20 {
padding-bottom: 20px;
}
/* 字体大小 */
.font16 {
font-size: 16px;
}
.font18 {
font-size: 18px;
}
.font20 {
font-size: 20px;
}
.font22 {
font-size: 22px;
}
.font24 {
font-size: 24px;
}
.font26 {
font-size: 26px;
}
.font28 {
font-size: 28px;
}
.font30 {
font-size: 30px;
}
/* 字体位置 */
.tac {
text-align: center;
}
.tal {
text-align: left;
}
.tar {
text-align: right;
}
/* 加粗 */
.fontw600 {
font-weight: 600;
}
.fontw700 {
font-weight: 700;
}
.fontw800 {
font-weight: 800;
}
/* 手型鼠标 */
.pointer {
cursor: pointer;
}
.pagination {
margin-top: 10px;
text-align: right;
}
.color_title {
margin-left: 15px;
position: relative;
margin-bottom: 15px;
color: #1890ff;
}
.color_title::before {
content: "";
width: 4px;
height: 20px;
position: absolute;
top: 0px;
left: -16px;
background-color: #0595fd;
}
::-webkit-scrollbar {
width: 6px;
height: 6px;
overflow-y: auto;
}
::-webkit-scrollbar-thumb {
border-radius: 6px;
background-color: rgba(144, 147, 153, 0.5);
}
::-webkit-scrollbar-track {
border-radius: 6px;
background: #fff;
}
.ant-modal-close {
color: #188fff !important;
}
.ant-modal-close svg {
font-size: 26px !important;
}
.ant-modal-title {
color: #1890ff !important;
font-size: 18px;
font-weight: bold;
}
.header_box {
padding-bottom: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.header_box > div {
display: flex;
justify-content: flex-start;
align-items: center;
}
.header_box > div b {
font-style: normal;
font-weight: unset;
font-size: 16px;
margin-left: 20px;
}
.header_box > div b i {
color: #0595fd;
font-style: normal;
}
.header_box > div sub {
font-size: 14px;
font-style: normal;
bottom: unset;
margin-left: 20px;
}
.header_box > div .export_btn {
outline: none;
cursor: pointer;
border: none;
padding: 0.8rem 1.2rem;
margin: 0;
font-family: inherit;
font-size: inherit;
position: relative;
display: inline-block;
font-size: 0.8rem;
border-radius: 6px;
overflow: hidden;
background: #42dac8;
color: ghostwhite;
}
.header_box > div .export_btn span {
position: relative;
z-index: 10;
transition: color 0.4s;
}
.header_box > div .export_btn:hover span {
color: #fef2f2;
}
.header_box > div .export_btn::before,
.header_box > div .export_btn::after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.header_box > div .export_btn::before {
content: "";
background: #08cfb8;
width: 120%;
left: -10%;
transform: skew(30deg);
transition: transform 0.4s cubic-bezier(0.3, 1, 0.8, 1);
}
.header_box > div .export_btn:hover::before {
transform: translate3d(100%, 0, 0);
}
.header_box > span {
display: flex;
justify-content: space-between;
align-items: center;
}
.header_box > span /deep/ .ant-input-affix-wrapper {
width: 15rem !important;
margin-right: 1rem !important;
}
.header_box > span /deep/ .ant-input {
height: 2.3rem !important;
}
.header_box > span /deep/ .ant-select-selection {
width: 170px !important;
height: 2.3rem !important;
margin-right: 1rem !important;
}
.header_box > span /deep/ .ant-select-selection__rendered {
height: 100% !important;
}
.header_box > span /deep/ .ant-select-selection-selected-value {
height: 100% !important;
line-height: 2.3rem !important;
}
.header_box > span .search_btn {
padding: 0.8rem 1.2rem;
border: 0;
border-radius: 5px;
background: #1890ff;
box-shadow: rgba(0, 0, 0, 0.05) 0 0 8px;
letter-spacing: 1.5px;
text-transform: uppercase;
font-size: 0.8rem;
color: hsl(0, 0%, 100%);
transition: all 0.5s ease;
cursor: pointer;
}
.header_box > span .search_btn:hover {
letter-spacing: 3px;
background-color: #7d5cf9;
color: hsl(0, 0%, 100%);
box-shadow: #5d18dc 0px 2px 10px 0px;
}
.header_box > span .search_btn:active {
letter-spacing: 3px;
background-color: #7d5cf9;
color: hsl(0, 0%, 100%);
box-shadow: #5d18dc 0px 0px 0px 0px;
transform: translateY(2px);
transition: 100ms;
}
.main .type0 {
color: #888888;
}
.main .type1 {
color: #f94545;
}
.main .type2 {
color: #04ca8f;
}
.main .ant-btn-link {
padding: 0 !important;
}
.main .ant-btn-link + .ant-btn-link {
margin-left: 1rem !important;
}
.main .ant-table-pagination {
float: right !important;
}
.ant-btn-success {
background-color: #04ca8f;
border-color: #04ca8f;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
-webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.05);
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.05);
}
.ant-btn-success:hover,
.ant-btn-success:focus {
color: #fff;
background-color: #42dac8;
border-color: #42dac8;
}
.ant-select {
min-width: 120px;
}
.ant-calendar-picker {
min-width: 270px;
}
.ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.addclass {
background: linear-gradient(90deg, #5ab6ff 0%, #2e9aff 100%) !important;
color: #fff !important;
}
/* 颜色 */ @searBG:#F0F0F0;
/* 基础 */
.primary { .primary {
color: #1890ff; color: #1890ff;
} }
...@@ -31,56 +33,49 @@ ...@@ -31,56 +33,49 @@
background-color: #1bbc9b; background-color: #1bbc9b;
} }
/* 版心 */ img {
.container { display: inline-block;
width: 1200px;
} }
/* 弹性布局 */ /* 弹性布局 */
.flex { .flex {
display: flex; display: flex;
} }
.flex1 { .flex1 {
flex: 1; flex: 1;
} }
.flexc { .flexc {
flex-direction: column; flex-direction: column;
} }
.flexwrap { .flexwrap {
flex-wrap: wrap; flex-wrap: wrap;
} }
.jcc { .jcc {
justify-content: center; justify-content: center;
} }
.jca { .jca {
justify-content: space-around; justify-content: space-around;
} }
.jcb { .jcb {
justify-content: space-between; justify-content: space-between;
} }
.jce { .jce {
justify-content: space-evenly; justify-content: space-evenly;
} }
.jc-start {
justify-content: flex-start;
}
.jc-end {
justify-content: flex-end;
}
.aic { .aic {
align-items: center; align-items: center;
} }
.aca { .aca {
align-content: space-around; align-content: space-around;
} }
.acb { .acb {
align-content: space-between; align-content: space-between;
} }
.ace { .ace {
align-content: space-evenly; align-content: space-evenly;
} }
...@@ -334,7 +329,7 @@ ...@@ -334,7 +329,7 @@
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
border-radius: 6px; border-radius: 6px;
background: #fff; background: #0000;
} }
.ant-modal-close { .ant-modal-close {
...@@ -358,7 +353,7 @@ ...@@ -358,7 +353,7 @@
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
&>div { & > div {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
...@@ -433,7 +428,7 @@ ...@@ -433,7 +428,7 @@
} }
} }
&>span { & > span {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
...@@ -510,8 +505,8 @@ ...@@ -510,8 +505,8 @@
.ant-btn-link { .ant-btn-link {
padding: 0 !important; padding: 0 !important;
&+.ant-btn-link { & + .ant-btn-link {
margin-left: 1rem !important; margin-left: 6px !important;
} }
} }
...@@ -550,8 +545,235 @@ ...@@ -550,8 +545,235 @@
white-space: nowrap; white-space: nowrap;
} }
.addclass { .addclass,.ant-btn-primary {
background: linear-gradient(90deg, #5ab6ff 0%, #2e9aff 100%) !important; background: linear-gradient(90deg, #5ab6ff 0%, #2e9aff 100%) !important;
color: #fff !important; color: #fff !important;
border:none !important border: none !important;
}
.total-info {
margin: 16px;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #fff;
}
.reportforms-out-box {
width: 100%;
flex: 1;
background-color: #fff;
border-radius: 8px;
overflow: hidden;
.ant-tabs-bar {
margin: 0px;
}
.ant-tabs-nav-wrap {
background: #e2effc;
}
.ant-tabs-nav-scroll {
height: 54px;
}
.ant-tabs-tab {
font-size: 18px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #787878;
}
.ant-tabs-tab-active {
font-size: 18px;
font-weight: bold;
color: #0857e8;
}
.ant-tabs-ink-bar {
width: 40px !important;
height: 6px;
background: #0857e8;
border-radius: 4px 4px 0px 0px;
bottom: 0px;
}
.tab-box {
height: 54px;
padding: 0px 10px;
background: #e2effc;
a {
display: inline-block;
height: inherit;
margin-right: 40px;
font-size: 18px;
line-height: 54px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #787878;
}
.router-link-active {
font-size: 18px;
font-weight: bold;
color: #0857e8;
position: relative;
&::after {
content: "";
width: 40px;
height: 6px;
background: #0857e8;
border-radius: 4px 4px 0px 0px;
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: 0px;
}
}
}
.reportforms-out {
padding: 10px;
}
.ant-table {
max-width:1500px;
border:none;
tr, th,td{
border:none !important;
}
// 表格鼠标移入显示滚动条
.ant-table-body,.ant-table-body-inner{
&::-webkit-scrollbar{
display: none;
}
}
:hover{
.ant-table-body,.ant-table-body-inner{
&::-webkit-scrollbar{
display:block;
}
}
}
}
.ant-table-thead th {
background: linear-gradient(0deg, #f9fbff 0%, #cbddff 78%);
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #232323;
}
.ant-table-tbody {
tr:nth-child(even){
background:#F2F6FE;
}
td{
font-family: Source Han Sans CN;
font-weight: 500;
color: #787878;
}
}
.search-form {
width: 100%;
}
.ant-pagination-item {
font-family: Source Han Sans CN;
}
.ant-pagination-item-active {
background: #0857e8;
a {
color: #fff;
}
}
}
.search-form {
width: 100%;
.ant-space {
width: inherit;
}
.export-btn {
height: 42px;
background: #00a870;
box-shadow: 0px 4px 8px 1px rgba(0, 168, 112, 0.26);
border-radius: 4px;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #ffffff;
}
.ant-select {
width: 100%;
min-height:42px;
.ant-select-selection__rendered {
min-height:42px;
display: flex;
align-items: center;
}
.ant-select-selection {
min-height:42px;
background: @searBG;
border-radius: 4px;
border: none;
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #232323;
}
}
.ant-select-selection__choice__content{
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #232323;
}
.ant-select-selection__clear{
background: @searBG;
}
.ant-calendar-picker {
min-width: 100% !important;
max-width: 100%;
}
.ant-calendar-picker-input {
.ant-calendar-range-picker-input:nth-child(1) {
width:33%;
text-align: left;
}
.ant-calendar-range-picker-input:nth-child(3) {
width:33%;
text-align: right;
}
}
.ant-calendar-picker-clear{
background: @searBG;
}
.ant-input {
width: 100%;
height: 42px;
background: @searBG;
border: none;
border-radius: 4px;
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #232323;
}
.search-btn {
height: 42px;
background: #0857e8;
box-shadow: 0px 4px 8px 1px rgba(8, 87, 232, 0.26);
border-radius: 4px;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #ffffff;
}
} }
// 表格鼠标移入显示滚动条
// .ant-table {
// .ant-table-body,.ant-table-body-inner{
// &::-webkit-scrollbar{
// display: none;
// }
// }
// :hover{
// .ant-table-body,.ant-table-body-inner{
// &::-webkit-scrollbar{
// display:block;
// }
// }
// }
// }
\ No newline at end of file
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}
\ No newline at end of file
/*
* 在 normalize.css 基础上进行的其他重置
*/
* {
box-sizing: border-box;
}
html,
body {
width: 100%;
height: 100%;
}
html {
/* AntD 字体家族:https://ant.design/docs/spec/font-cn#%E5%AD%97%E4%BD%93%E5%AE%B6%E6%97%8F */
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
}
p {
margin: 0;
padding: 0;
}
input,
button {
border: none;
/* 去掉浏览器默认的 input 边框样式 */
outline: none;
/* 去掉浏览器默认的聚焦时候的蓝色边框 */
}
a {
text-decoration: none;
color: #000;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
padding: 0
}
\ No newline at end of file
/* @import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities'; */
/* @tailwind base; */
@tailwind components;
@tailwind utilities;
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
This diff is collapsed.
@font-face {
font-family: "iconfont"; /* Project id 4222008 */
src: url('iconfont.woff2?t=1693536528455') format('woff2'),
url('iconfont.woff?t=1693536528455') format('woff'),
url('iconfont.ttf?t=1693536528455') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-hidden:before {
content: "\e901";
}
.icon-dot:before {
content: "\e608";
}
.icon-pwd:before {
content: "\e615";
}
.icon-show:before {
content: "\e61c";
}
.icon-user:before {
content: "\e649";
}
window._iconfont_svg_string_4222008='<svg><symbol id="icon-hidden" viewBox="0 0 1024 1024"><path d="M469.333333 681.386667c-36.053333-2.432-71.253333-8.533333-104.96-17.92l-69.802666 149.674666a42.368 42.368 0 0 1-56.533334 20.266667 42.666667 42.666667 0 0 1-20.821333-56.32l66.986667-143.658667a451.712 451.712 0 0 1-148.906667-112.682666 388.693333 388.693333 0 0 1-70.570667-119.338667 42.666667 42.666667 0 1 1 80.128-29.354667 303.445333 303.445333 0 0 0 55.210667 93.098667C270.634667 547.413333 383.018667 597.333333 505.728 597.333333c122.752 0 235.136-49.962667 305.706667-132.181333a303.445333 303.445333 0 0 0 55.210666-93.098667 42.666667 42.666667 0 0 1 80.128 29.354667 388.693333 388.693333 0 0 1-70.570666 119.338667 423.68 423.68 0 0 1-18.773334 20.48l104.362667 104.362666a42.666667 42.666667 0 0 1-0.298667 60.032 42.368 42.368 0 0 1-60.032 0.298667l-109.653333-109.653333c-20.48 14.08-42.24 26.581333-65.024 37.418666l66.901333 143.36a42.666667 42.666667 0 0 1-20.821333 56.362667 42.368 42.368 0 0 1-56.533333-20.266667l-69.717334-149.546666a520.533333 520.533333 0 0 1-91.946666 16.810666v130.645334A42.666667 42.666667 0 0 1 512 853.333333c-23.722667 0-42.666667-18.944-42.666667-42.24v-129.706666z" fill="#3D3D3D" ></path><path d="M176.128 524.373333a42.368 42.368 0 0 1 60.032 0.256 42.666667 42.666667 0 0 1 0.298667 60.074667l-121.216 121.216a42.368 42.368 0 0 1-60.074667-0.298667 42.666667 42.666667 0 0 1-0.298667-60.032l121.258667-121.258666z" fill="#3D3D3D" ></path></symbol><symbol id="icon-dot" viewBox="0 0 1024 1024"><path d="M512 320a192.064 192.064 0 0 1 0 384 192 192 0 0 1 0-384z" fill="" ></path></symbol><symbol id="icon-pwd" viewBox="0 0 1024 1024"><path d="M725.4 928.3H299.7c-88 0-159.6-71.6-159.6-159.6V555.8c0-88 71.6-159.6 159.6-159.6h425.7c88 0 159.6 71.6 159.6 159.6v212.8c0 88.1-71.6 159.7-159.6 159.7zM299.7 460c-52.8 0-95.8 43-95.8 95.8v212.8c0 52.8 43 95.8 95.8 95.8h425.7c52.8 0 95.8-43 95.8-95.8V555.8c0-52.8-43-95.8-95.8-95.8H299.7z" fill="#A1A0A5" ></path><path d="M778.6 406.8h-63.9c0-110.9-90.2-244.8-202.2-244.8S310.3 296 310.3 406.8h-63.9c0-142.7 116.2-308.6 266.1-308.6s266.1 165.9 266.1 308.6z" fill="#A1A0A5" ></path></symbol><symbol id="icon-show" viewBox="0 0 1024 1024"><path d="M678.976 586.24c0 92.224-74.752 166.976-166.976 166.976S345.024 678.464 345.024 586.24 419.776 419.2 512 419.2s166.976 74.816 166.976 167.04z" fill="#666666" ></path><path d="M512 266.112C229.248 266.112 0 586.24 0 586.24s229.248 320.128 512 320.128 512-320.128 512-320.128-229.248-320.128-512-320.128z m0 532.992c-117.568 0-212.864-95.296-212.864-212.864 0-117.568 95.296-212.864 212.864-212.864s212.864 95.296 212.864 212.864c0 117.568-95.296 212.864-212.864 212.864z" fill="#666666" ></path><path d="M678.976 586.24c0 92.224-74.752 166.976-166.976 166.976S345.024 678.464 345.024 586.24 419.776 419.2 512 419.2s166.976 74.816 166.976 167.04z" fill="#666666" ></path><path d="M678.976 586.24c0 92.224-74.752 166.976-166.976 166.976S345.024 678.464 345.024 586.24 419.776 419.2 512 419.2s166.976 74.816 166.976 167.04z" fill="#666666" ></path></symbol><symbol id="icon-user" viewBox="0 0 1024 1024"><path d="M602.08 960.576H423.488c-169.408 0-303.2 0-303.2-87.872v-17.568c0-164.672 136.032-298.624 303.2-298.624H602.08c167.168 0 303.2 133.952 303.2 298.624v17.568c-0.032 87.872-140.544 87.872-303.2 87.872zM423.456 609.184c-138.112 0-250.496 110.304-250.496 245.92v17.568c0 35.168 144.768 35.168 250.496 35.168h178.592c87.52 0 250.496 0 250.496-35.168v-17.568c0-135.616-112.384-245.92-250.496-245.92H423.456z m80.384-70.304c-132.736 0-240.672-106.4-240.672-237.184S371.104 64.544 503.84 64.544s240.672 106.368 240.672 237.152S636.544 538.88 503.84 538.88zM315.872 301.696c0 101.696 84.32 184.48 187.968 184.48s187.968-82.752 187.968-184.48-84.32-184.448-187.968-184.448S315.872 200 315.872 301.696z" ></path></symbol></svg>',function(n){var t=(t=document.getElementsByTagName("script"))[t.length-1],e=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var i,o,c,l,a,d=function(t,e){e.parentNode.insertBefore(t,e)};if(e&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}i=function(){var t,e=document.createElement("div");e.innerHTML=n._iconfont_svg_string_4222008,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?d(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(i,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),i()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(c=i,l=n.document,a=!1,h(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,s())})}function s(){a||(a=!0,c())}function h(){try{l.documentElement.doScroll("left")}catch(t){return void setTimeout(h,50)}s()}}(window);
\ No newline at end of file
{
"id": "4222008",
"name": "门户",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "4354835",
"name": "闭眼睛",
"font_class": "hidden",
"unicode": "e901",
"unicode_decimal": 59649
},
{
"icon_id": "1920286",
"name": "点",
"font_class": "dot",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "12387627",
"name": "密码",
"font_class": "pwd",
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "15391351",
"name": "可见",
"font_class": "show",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "29195000",
"name": "用户",
"font_class": "user",
"unicode": "e649",
"unicode_decimal": 58953
}
]
}
<template>
<div class="previe-modal" v-if="Visible" @click="Visible = false">
<img @click.stop v-if="previeData.type === 'img'" :src="previeData.url" />
<video
@click.stop
v-else
:src="previeData.url"
autoplay
muted
controls
></video>
<a-icon type="close-circle" />
</div>
</template>
<script>
export default {
props: {
previeData: {
type: Object,
required: true,
default: () => {
return {};
},
},
previeVisible: {
type: Boolean,
required: true,
default: false,
},
},
computed: {
Visible: {
get() {
return this.previeVisible;
},
set(val) {
this.$emit("update:previeVisible", val);
},
},
},
};
</script>
<style lang="less" scoped>
.previe-modal {
width: 100%;
height: 100%;
position: fixed;
top: 0px;
left: 0px;
z-index: 10000;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
img,
video {
height: 400px;
max-width: 800px;
object-fit: contain;
}
.anticon-close-circle {
font-size: 40px;
margin-top: 30px;
color: #fff;
cursor: pointer;
}
}
</style>
\ No newline at end of file
<template>
<div>
<a-range-picker
v-bind="$attrs"
:allowClear="allowClear"
valueFormat="YYYY-MM-DD"
:value="value"
@change="handleChange"
>
<img slot="suffixIcon" src="@/assets/images/dataManage/icon-date.png" />
</a-range-picker>
</div>
</template>
<script>
export default {
model: {
value: "value",
event: "change",
},
props: {
value: {
required: true,
default: "",
},
allowClear: {
default: false,
},
},
data() {
return {};
},
methods: {
handleChange(value) {
this.$emit("change", value);
},
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<div>
<a-select
:v-bind="$attrs"
:allowClear="allowClear"
:showSearch="showSearch"
:value="value"
:optionFilterProp="optionFilterProp"
@change="handleChange"
>
<img slot="clearIcon" src="@/assets/images/icon-close.png" />
<img slot="suffixIcon" src="@/assets/images/dataManage/pull-down.png" />
<slot></slot>>
</a-select>
</div>
</template>
<script>
export default {
model: {
value: "value",
event: "change",
},
props: {
value: {
required: true,
default: "",
},
allowClear: {
default: "",
},
showSearch: {
default: "",
},
optionFilterProp: {
default: "",
},
},
data() {
return {};
},
methods: {
handleChange(value) {
this.$emit("change", value);
},
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
let customComponents = {
install: function (Vue) {
//在use的时候vue会自动调用此方法
const files = require.context(
"@/components/reportformsForm",
true,
/\.vue$/
); //返回的是一个函数
// require.context()的参数
// 参数一 {String}:读取文件的目录路径
// 参数二 {Boolean}:是否深入遍历,即是否遍历子目录(二级目录)
// 参数三 {RegExp}:匹配目录内文件的正则表达式/\.vue$/表示匹配所有.vue后缀名的文件
files.keys().forEach((item) => {
const componentConfig = files(item);
const name = componentConfig.default.name || componentConfig.name;
const component = componentConfig.default || componentConfig;
Vue.component(name, component); //注册当前组件
});
},
};
export default customComponents;
<template>
<!-- 效能监察报表搜索 -->
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<a-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择"
v-model="searchForm.have_process"
>
<a-select-option value="" label="全部"> 全部 </a-select-option>
<a-select-option :value="0" label="未处理"> 未处理 </a-select-option>
</a-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择窗口"
v-model="searchForm.window_id"
>
<a-select-option value="" label="全部窗口">全部窗口</a-select-option>
<a-select-option
v-for="v in windowData"
:key="v.id"
:value="v.id"
:label="v.name + '-' + v.fromnum"
>{{ v.name + "-" + v.fromnum }}</a-select-option
>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择类型"
v-model="searchForm.warn_alert"
>
<a-select-option value="" label="全部类型">全部类型</a-select-option>
<a-select-option
v-for="(v, key) in alert"
:key="key"
:value="key"
:label="v"
>{{ v }}</a-select-option
>
</y-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入工作人员姓名查询"
v-model="searchForm.workman_name"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import Storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { debounce } from "lodash";
import { windowList } from "@/api/customer";
const alert = {
1: "离岗",
2: "离开",
4: "玩手机",
5: "扶头",
6: "趴桌",
};
export default {
name: "abnormalReportForm-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: Storage.get(2, "siteId"),
alert,
// 搜索数据
searchForm: {
have_process: "",
warn_alert: "",
window_id: "",
workman_name: "",
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
},
windowData: [],
};
},
created() {
this.windowList();
},
methods: {
...mapMutations("search", ["set_searForm", "reset"]),
// 获取窗口列表
async windowList() {
let res = await windowList({
page: 1,
size: -1,
siteId: this.siteId,
});
if (res.code == 1) {
let { data } = res.data;
this.windowData = data;
}
},
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<!-- 物联网警告报表搜索 -->
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择类型"
v-model="searchForm.alarmType"
>
<a-select-option value="" label="全部类型"> 全部类型 </a-select-option>
<a-select-option :value="0" label="离线"> 离线 </a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择状态"
v-model="searchForm.alarmStatus"
>
<a-select-option value="" label="全部状态">全部状态</a-select-option>
<a-select-option :value="0" label="未清除"> 未清除 </a-select-option>
<a-select-option :value="1" label="清除未确认">
清除未确认
</a-select-option>
<a-select-option :value="2" label="清除已确认">
清除已确认
</a-select-option>
</y-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入设备名称查询"
v-model="searchForm.deviceName"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { debounce } from "lodash";
export default {
name: "alerting-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: storage.get(2, "siteId"),
// 搜索数据
searchForm: {
alarmStatus: "",
alarmType: "",
deviceName: "",
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
},
};
},
created() {},
methods: {
...mapMutations("search", ["set_searForm", "reset"]),
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入手机号码搜索"
v-model="searchForm.phone"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { debounce } from "lodash";
export default {
name: "callRecordForm-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: storage.get(2, "siteId"),
// 搜索数据
searchForm: {
phone: "",
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
},
};
},
created() {},
methods: {
...mapMutations("search", ["set_searForm", "reset"]),
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<!-- 排号机搜索 -->
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择大厅"
v-model="searchForm.hallid"
>
<img slot="clearIcon" src="@/assets/images/icon-close.png" />
<img slot="suffixIcon" src="@/assets/images/dataManage/pull-down.png" />
<a-select-option value="" label="全部大厅"> 全部大厅 </a-select-option>
<a-select-option
v-for="v in datingList"
:key="v.id"
:value="v.id"
:label="v.hallName"
>
{{ v.hallName }}
</a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择部门"
v-model="searchForm.sectionid"
>
<a-select-option value="" label="全部部门"> 全部部门 </a-select-option>
<a-select-option
v-for="v in deptList"
:key="v.id"
:value="v.id"
:label="v.name"
>
{{ v.name }}
</a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择设备"
v-model="searchForm.id"
>
<a-select-option value="" label="全部设备"> 全部设备 </a-select-option>
<a-select-option
v-for="v in deviceData"
:key="v.id"
:value="v.id"
:label="v.name"
>
{{ v.name }}
</a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择状态"
v-model="searchForm.style"
>
<a-select-option value="" label="全部状态"> 全部状态 </a-select-option>
<a-select-option
v-for="v in style"
:key="v.key"
:value="v.key"
:label="v.name"
>
{{ v.name }}
</a-select-option>
</y-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time">
<img slot="suffixIcon" src="@/assets/images/dataManage/icon-date.png" />
</y-range-picker>
<a-input
allowClear
placeholder="输入排队编号搜索"
v-model="searchForm.flownum"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import storage from "@/utils/js/Storage";
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import { mapMutations } from "vuex";
import { getDatingList, getBumenList, getCalllist } from "@/api/dataAdmin";
import { debounce } from "lodash";
const style = [
{
key: 1,
name: "办理中",
},
{
key: 4,
name: "办理完成",
},
];
export default {
name: "callRecord-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: storage.get(2, "siteId"),
style,
datingList: [], // 大厅列表
deptList: [], // 部门列表
deviceData: [], // 设备列表
// 搜索数据
searchForm: {
id: "", // 排队机id
style: "", // 状态
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
flownum: "", // 排号编码
hallid: "", // 大厅id
sectionid: "", // 部门id
},
};
},
created() {
this.getDatingListArr();
this.getBumenListArr();
this.getCalllist();
},
methods: {
...mapMutations("search", ["set_searForm", "set_isExport", "reset"]),
// 获取大厅列表
async getDatingListArr() {
let res = await getDatingList({
page: 1,
size: -1,
siteId: this.siteId,
});
if (res.code == 1) {
let { data } = res.data;
this.datingList = data;
}
},
// // 获取部门列表
async getBumenListArr() {
let res = await getBumenList({
page: 1,
size: -1,
siteId: this.siteId,
});
if (res.code == 1) {
let { data } = res.data;
this.deptList = data;
}
},
//获取排号机设备列表
async getCalllist() {
let res = await getCalllist({
page: 1,
size: -1,
});
if (res.code == 1) {
let { data } = res.data;
this.deviceData = data;
}
},
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<!-- 办事部门评价报表搜索 -->
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择大厅"
v-model="searchForm.hallid"
>
<a-select-option value="" label="全部大厅"> 全部大厅 </a-select-option>
<a-select-option
v-for="v in datingList"
:key="v.id"
:value="v.id"
:label="v.hallName"
>
{{ v.hallName }}
</a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择部门"
v-model="searchForm.sectionid"
>
<a-select-option value="" label="全部部门"> 全部部门 </a-select-option>
<a-select-option
v-for="v in deptList"
:key="v.id"
:value="v.id"
:label="v.name"
>
{{ v.name }}
</a-select-option>
</y-select>
<a-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择评价"
v-model="evaChoose"
mode="multiple"
>
<img slot="clearIcon" src="@/assets/images/icon-close.png" />
<img slot="suffixIcon" src="@/assets/images/dataManage/pull-down.png" />
<!-- <a-select-option value="" label="全部评价"> 全部评价 </a-select-option> -->
<a-select-option
v-for="v in optonList"
:key="v.id"
:value="v.id"
:label="v.name"
>
{{ v.name }}
</a-select-option>
</a-select>
<a-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择来源"
v-model="evaFrom"
mode="multiple"
>
<img slot="clearIcon" src="@/assets/images/icon-close.png" />
<img slot="suffixIcon" src="@/assets/images/dataManage/pull-down.png" />
<!-- <a-select-option value="" label="全部来源"> 全部来源 </a-select-option> -->
<a-select-option value="1" label="窗口评价"> 窗口评价 </a-select-option>
<a-select-option value="2" label="自助服务终端">
自助服务终端
</a-select-option>
<a-select-option value="3" label="背靠背评价">
背靠背评价
</a-select-option>
<a-select-option value="4" label="微官网"> 微官网 </a-select-option>
<a-select-option value="5" label="好差评"> 好差评 </a-select-option>
<a-select-option value="6" label="一体化评价">
一体化评价
</a-select-option>
</a-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入评价人姓名或窗口编号搜索"
v-model="searchForm.info"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { getDatingList, getBumenList, getOptonList } from "@/api/dataAdmin";
import { debounce } from "lodash";
export default {
name: "departmentEvaluation-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: storage.get(2, "siteId"),
datingList: [], // 大厅列表
deptList: [], // 部门列表
evaChoose: [], //评价选项
evaFrom: [], // 评价来源
evaDates: [], // 评价日期
optonList: [], // 评价选项列表
// 搜索数据
searchForm: {
info: "",
type: "bmpj",
sectionid: "", // 部门id
hallid: "", // 大厅id
option_id: "", // 评价ids
pjxt: "", // 评价来源
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
},
};
},
created() {
this.getDatingListArr();
this.getBumenListArr();
this.getOptonList();
},
methods: {
...mapMutations("search", ["set_searForm", "set_isExport", "reset"]),
// 获取大厅列表
async getDatingListArr() {
let res = await getDatingList({
page: 1,
size: -1,
siteId: this.siteId,
});
if (res.code == 1) {
let { data } = res.data;
this.datingList = data;
}
},
// // 获取部门列表
async getBumenListArr() {
let res = await getBumenList({
page: 1,
size: -1,
siteId: this.siteId,
});
if (res.code == 1) {
let { data } = res.data;
this.deptList = data;
}
},
// 获取评价选项
async getOptonList() {
let res = await getOptonList();
if (res.code == 1) {
this.optonList = res.data;
}
},
// 搜索
handleSearch() {
let option_id = this.evaChoose.join(",");
let pjxt = this.evaFrom.join(",");
this.searchForm.option_id = option_id;
this.searchForm.pjxt = pjxt;
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<!-- 存件记录报表搜索 -->
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择设备"
v-model="searchForm.number"
>
<a-select-option value="" label="全部设备"> 全部设备 </a-select-option>
<a-select-option
v-for="v in deviceData"
:key="v.id"
:value="v.id"
:label="v.name"
>
{{ v.name }}
</a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择状态"
v-model="searchForm.status"
>
<a-select-option value="" label="全部状态"> 全部状态 </a-select-option>
<a-select-option :value="1" label="未取件"> 未取件 </a-select-option>
<a-select-option :value="2" label="已取件"> 已取件 </a-select-option>
</y-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入邮递员姓名或联系电话查询"
v-model="searchForm.keyword"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { getSitePickupDevice } from "@/api/dataAdmin";
import { debounce } from "lodash";
export default {
name: "depositRecord-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: storage.get(2, "siteId"),
deviceData: [], // 设备列表
// 搜索数据
searchForm: {
number: "",
keyword: "",
status: "",
time: [
this.$moment(new Date()).format("YYYY-MM-DD"),
this.$moment(new Date()).format("YYYY-MM-DD"),
],
},
};
},
created() {
this.getSitePickupDevice();
},
methods: {
...mapMutations("search", ["set_searForm", "reset"]),
//获取设备列表
async getSitePickupDevice() {
let res = await getSitePickupDevice({
page: 1,
size: -1,
});
if (res.code == 1) {
let { data } = res;
this.deviceData = data;
}
},
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择"
v-model="searchForm.type"
>
<a-select-option :value="1" label="按事项"> 按事项 </a-select-option>
<a-select-option :value="2" label="按材料"> 按材料 </a-select-option>
</y-select>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择类型"
v-model="searchForm.status"
>
<a-select-option value="" label="全部类型"> 全部类型 </a-select-option>
<a-select-option :value="1" label="本地打印">
本地打印
</a-select-option>
<a-select-option :value="2" label="在线提交">
在线提交
</a-select-option>
</y-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入名称搜索"
v-model="searchForm.searchName"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { debounce } from "lodash";
export default {
name: "fillForm-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
siteId: storage.get(2, "siteId"),
// 搜索数据
searchForm: {
type: 2, // 事项或者材料搜索
status: "", // 打印或者提交
searchName: "", // 搜索内容
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
},
};
},
created() {},
methods: {
...mapMutations("search", ["set_searForm", "set_isExport", "reset"]),
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<!-- 微官网注册报表搜索 -->
<div class="search-form">
<a-space direction="vertical" size="middle">
<a-button block class="export-btn" icon="upload" @click="handleExport">
导出
</a-button>
<y-select
allowClear
showSearch
optionFilterProp="label"
placeholder="请选择类型"
v-model="searchForm.check_real"
>
<a-select-option value="" label="全部类型"> 全部类型 </a-select-option>
<a-select-option
v-for="(v, key) in check_realList"
:key="key"
:value="key"
:label="v"
>
{{ v }}
</a-select-option>
</y-select>
<y-range-picker valueFormat="YYYY-MM-DD" v-model="searchForm.time" />
<a-input
allowClear
placeholder="请输入昵称关键字搜索"
v-model="searchForm.search"
/>
<a-button block class="search-btn" icon="search" @click="handleSearch">
搜索
</a-button>
</a-space>
</div>
</template>
<script>
import YSelect from "@/components/YSelect.vue";
import YRangePicker from "@/components/YRangePicker.vue";
import storage from "@/utils/js/Storage";
import { mapMutations } from "vuex";
import { debounce } from "lodash";
let check_realList = {
0: "未实名认证",
1: "实名认证",
};
export default {
name: "microForm-search",
components: {
YSelect,
YRangePicker,
},
data() {
return {
check_realList,
siteId: storage.get(2, "siteId"),
// 搜索数据
searchForm: {
search: "",
check_real: "",
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
], // 时间区间
},
};
},
created() {},
methods: {
...mapMutations("search", ["set_searForm", "reset"]),
// 搜索
handleSearch() {
this.set_searForm(this.searchForm);
},
// 导出
handleExport: debounce(
function () {
this.$bus.$emit("export");
},
2000,
{
leading: true,
trailing: false,
}
),
},
beforeDestroy() {
this.reset();
},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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