Browse Source

开发中

feature
dai 3 years ago
parent
commit
0429abac4f
  1. 201
      src/views/modules/home/cpts/bar-chart.vue
  2. 213
      src/views/modules/home/cpts/fangwu-info.vue
  3. 184
      src/views/modules/home/cpts/pan-chart.vue
  4. 708
      src/views/modules/home/cpts/people-more.vue
  5. 125
      src/views/modules/home/cpts/scroll-notice.vue
  6. 230
      src/views/modules/home/cpts/xuqiu-info.vue
  7. 1183
      src/views/modules/home/index.vue

201
src/views/modules/home/cpts/bar-chart.vue

@ -0,0 +1,201 @@
<template>
<div class="m-chart">
<canvas id="myChart" :width="width" :height="height" />
</div>
</template>
<script>
import nextTick from "dai-js/tools/nextTick";
import F2 from "@antv/f2/lib/index-all";
// iosbug
const fontFamily = "PingFang SC";
const fontSize = 14;
let chart;
let srcData = [];
const iniChart = function (config, srcData, total, that) {
chart = new F2.Chart({
id: "myChart",
pixelRatio: window.devicePixelRatio,
...config,
});
let data = [
{
const: "const",
name: "--",
count: 51.39,
},
{
const: "const",
name: "--",
count: 356.68,
},
{
const: "const",
name: "--",
count: 20.0,
},
{
const: "const",
name: "--",
count: 116.53,
},
];
console.log("-----------------------------------", srcData);
data = srcData;
chart.source(data);
// chart.axis(false);
chart.legend(false);
// chart.legend({
// position: "bottom",
// align: "center",
// });
chart.tooltip(false);
chart
.interval()
.position("name*count")
.color("name", [
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
"#3e8ef7",
]);
chart.render();
//
const offset = -5;
const canvas = chart.get("canvas");
const group = canvas.addGroup();
const shapes = {};
data.forEach(function (obj) {
const point = chart.getPosition(obj);
const text = group.addShape("text", {
attrs: {
x: point.x,
y: point.y + offset,
text: obj.count + "人",
textAlign: "center",
textBaseline: "bottom",
fill: "#808080",
},
});
shapes[obj.name] = text; // shape, 便
});
//
chart.interaction("interval-select", {
selectAxisStyle: {
fill: "#000",
fontWeight: "bold",
},
mode: "range", // range
// defaultSelected: {
// year: '1962 ',
// sales: 38
// },
onStart(ev) {
console.log(ev);
const data = ev.data,
selected = ev.selected;
if (data && selected) {
that.handleClickBar(data.name);
} else {
that.handleClickBar();
}
},
onEnd(ev) {
console.log("-------------------", ev);
},
});
// chart return
return chart;
};
export default {
name: "chart",
props: {
list: {
type: Array,
default: () => {
return [];
},
},
total: {
type: Number,
default: 0,
},
config: {
type: Object,
default: () => {
return {};
},
},
width: {
type: Number,
default: 400,
},
height: {
type: Number,
default: 260,
},
},
data() {
return {
iniLoading: false,
};
},
watch: {
list(data) {
// chart.changeData(data);
srcData = data;
},
},
async created() {
await nextTick(200);
iniChart(this.config, this.list, this.total, this);
await nextTick(200);
this.iniLoading = true;
},
methods: {
setList(data) {
chart.changeData(data);
srcData = data;
},
handleClickBar(name) {
let code = "";
if (name) {
let item = this.list.find((item) => item.name == name);
console.log(item);
code = item && item.code;
}
console.log(code);
this.$emit("clickBar", { code });
},
},
};
</script>
<style lang="scss" scoped></style>

213
src/views/modules/home/cpts/fangwu-info.vue

@ -0,0 +1,213 @@
<template>
<div>
<div>
<el-form
ref="ref_form"
:inline="false"
:model="dataForm"
:disabled="formType === 'detail'"
class="form"
>
<el-form-item
label="所属小区:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.neighborHoodName }}</span>
</el-form-item>
<el-form-item
label="所属楼栋:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.buildingName }}</span>
</el-form-item>
<el-form-item
label="单元号:"
prop="buildingUnitId"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.unitNum }}</span>
</el-form-item>
<el-form-item
label="门牌号:"
prop="doorName"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.doorName }}</span>
</el-form-item>
<el-form-item
label="房屋类型:"
prop="houseType"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.houseType }}</span>
</el-form-item>
<el-form-item
label="房屋用途:"
prop="purpose"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.purpose }}</span>
</el-form-item>
<el-form-item
label="房屋状态:"
prop="rentFlag"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.rentFlag }}</span>
</el-form-item>
<el-form-item
label="房主姓名:"
prop="ownerName"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.ownerName }}</span>
</el-form-item>
<el-form-item
label="房主电话:"
prop="ownerPhone"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.ownerPhone }}</span>
</el-form-item>
<el-form-item
label="房主身份证:"
prop="ownerIdCard"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.ownerIdCard }}</span>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button @click="handleCancle">关闭</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
let loading; //
export default {
data() {
return {
formType: "detail", // addeditdetail
dataForm: {
neighborHoodId: "", // ID
buildingId: "", //ID
buildingUnitId: "", //ID
doorName: "", //
houseType: "", //
purpose: "", //
rentFlag: 1, //10
ownerPhone: "", //
ownerName: "", //
ownerIdCard: "", //
},
};
},
components: {},
mounted() {},
methods: {
async initForm(type, row) {
this.$refs.ref_form.resetFields();
this.formType = type;
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row));
}
},
handleCancle() {
this.$emit("dialogCancle");
this.resetData();
},
resetData() {
this.dataForm = {
neighborHoodId: "", // ID
buildingId: "", //ID
buildingUnitId: "", //ID
doorName: "", //
houseType: "1", //
purpose: "1", //
rentFlag: 1, //10
ownerPhone: "", //
ownerName: "", //
ownerIdCard: "", //
};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {},
props: {},
};
</script>
<style lang="scss" scoped>
.item_width_1 {
width: 500px;
}
.item_width_2 {
width: 400px;
}
.item_width_3 {
margin-left: 10px;
width: 200px;
}
.div_btn {
display: flex;
justify-content: center;
}
.el-tabs {
margin: 0 20px;
}
.el-upload__tip {
color: rgb(155, 155, 155);
margin: 0;
}
.form {
margin-top: 30px;
height: 60vh;
overflow-y: auto;
}
</style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

184
src/views/modules/home/cpts/pan-chart.vue

@ -0,0 +1,184 @@
<template>
<div class="m-chart">
<canvas id="myChart" :width="width" :height="height" />
</div>
</template>
<script>
import nextTick from "dai-js/tools/nextTick";
import F2 from "@antv/f2/lib/index-all";
// iosbug
const fontFamily = "PingFang SC";
const fontSize = 14;
let chart;
let srcData = [];
const iniChart = function (config, srcData, total) {
chart = new F2.Chart({
id: "myChart",
...config,
});
let data = [
{
const: "const",
name: "交通出行",
count: 51.39,
},
{
const: "const",
name: "饮食",
count: 356.68,
},
{
const: "const",
name: "生活日用",
count: 20.0,
},
{
const: "const",
name: "住房缴费",
count: 116.53,
},
];
console.log("-----------------------------------", srcData);
data = srcData;
chart.source(data);
chart.coord("polar", {
transposed: true,
radius: 0.9,
innerRadius: 0.6,
});
chart.axis(false);
chart.legend(false);
// chart.legend({
// position: "bottom",
// align: "center",
// });
chart.tooltip(false);
chart.guide().html({
position: ["50%", "50%"],
html: `<div style="text-align: center;width:150px;height: 35px;">\n <p style="font-size: 18px;color: #999;margin: 0" id="title">总人数</p>\n <p style="font-size: 30px;color: #343434;margin: 0;font-weight: bold;" id="count">${total}</p>\n </div>`,
});
chart
.interval()
.position("const*count")
.adjust("stack")
.color("name", [
"#e70014",
"#ea6200",
"#f59701",
"#fcc900",
"#fef200",
"#cedc01",
"#8fc41e",
"#22ad38",
"#009b44",
"#009c6c",
"#019e97",
"#00a1be",
"#00a2c1",
"#00a0ea",
"#0085d2",
"#0067b6",
"#00469b",
"#1d2089",
"#5e1986",
"#920784",
"#bd0081",
"#e5007f",
"#e5026d",
"#e4024e",
"#e40031",
]);
chart.pieLabel({
sidePadding: 30,
activeShape: true,
label1: function label1(data) {
return {
text: data.count + "人",
fill: "#343434",
fontWeight: "bold",
fontSize: 14
};
},
label2: function label2(data) {
return {
text: data.name,
fill: "#999",
fontSize: 14
};
},
onClick: function onClick(ev) {
const data = ev.data;
if (data) {
// $("#title").text(data.name);
// $("#count").text(data.count);
}
},
});
chart.render();
// chart return
return chart;
};
export default {
name: "chart",
props: {
list: {
type: Array,
default: () => {
return [];
},
},
total: {
type: Number,
default: 0,
},
config: {
type: Object,
default: () => {
return {};
},
},
width: {
type: Number,
default: 400,
},
height: {
type: Number,
default: 260,
},
},
data() {
return {
iniLoading: false,
};
},
watch: {
list(data) {
// chart.changeData(data);
srcData = data;
},
},
async created() {
await nextTick(200);
iniChart(this.config, this.list, this.total);
await nextTick(200);
this.iniLoading = true;
},
methods: {
setList(data) {
chart.changeData(data);
srcData = data;
},
},
};
</script>
<style lang="scss" scoped></style>

708
src/views/modules/home/cpts/people-more.vue

@ -0,0 +1,708 @@
<template>
<div class="m-pop">
<div class="wrap">
<div class="btn-close"
@click="handleClose">
<img src="@/assets/img/shuju/people/close.png" />
</div>
<div class="wrap2">
<div class="title">
<span>更多信息</span>
</div>
<div v-if="view_real_data"
class="div_tuomin">
<el-button size="mini"
class="diy-button--search"
@click="handleTuomin">显示脱敏信息</el-button>
</div>
<div :key="'fieldSubList' + index"
v-for="(fieldSubList, index) in fieldList">
<div class="list">
<div class="item"
v-if="index == 0">
<span class="item-field">所属网格</span>
<span>{{ gridName }}</span>
</div>
<div class="item"
v-if="index == 0">
<span class="item-field">所属小区</span>
<span>{{ xiaoquName }}</span>
</div>
<div class="item"
v-if="index == 0">
<span class="item-field">所属楼栋</span>
<span>{{ louName }}-{{ danyuanName }}</span>
</div>
<div class="item"
v-if="index == 0">
<span class="item-field">所属家庭</span>
<span>{{ homeName }}</span>
</div>
<div class="item"
:key="field.itemId"
v-for="field in fieldSubList">
<span class="item-field">{{ field.label }}</span>
<span v-if="field.columnName==='MOBILE'||field.columnName==='ID_CARD'">{{ info[field.columnName]||'--'}}</span>
<span v-else-if="
field.itemType == 'select' ||
field.itemType == 'radio' ||
field.itemType == 'checkbox' ||
field.itemType == 'cascader'
">{{
info[field.columnName] == null
? "--"
: getOptionLabel(
field.options,
info[field.columnName],
field.itemType
)
}}</span>
<span v-else>{{
info[field.columnName] == null ? "--" : info[field.columnName]
}}</span>
</div>
</div>
<div class="line"></div>
</div>
<div class="tabs">
<div class="tab-btn"
@click="subStartGroupIndex"
v-if="groupList.length > 9">
<img src="@/assets/img/shuju/people/arrow-double-left.png" />
</div>
<div v-show="index >= startGroupIndex && index < startGroupIndex + 9"
class="tab"
:class="groupIndex % groupList.length == index ? 'z-on' : ''"
:key="'tab' + index"
@click="groupIndex = index"
v-for="(item, index) in groupList">
{{ item.label }}
</div>
<div class="tab-btn"
@click="addStartGroupIndex"
v-if="groupList.length > 9">
<img src="@/assets/img/shuju/people/arrow-double-right.png" />
</div>
</div>
<div :key="'group' + index"
v-show="groupIndex % groupList.length == index"
v-for="(group, index) in groupList">
<div v-if="
group.tableName == 'ic_resi_demand' &&
Array.isArray(allInfo.ic_resi_demand) &&
allInfo.ic_resi_demand.length > 0
">
<div class="list"
:key="'ic_resi_demand' + infoIndex"
v-for="(infoItem, infoIndex) in allInfo.ic_resi_demand">
<div class="item"
:key="field.itemId"
v-for="field in group.itemList">
<span class="item-field">{{ field.label }}</span>
<span v-if="
field.itemType == 'select' ||
field.itemType == 'radio' ||
field.itemType == 'checkbox' ||
field.itemType == 'cascader'
">{{
infoItem[field.columnName] == null
? "--"
: getOptionLabel(
field.options,
infoItem[field.columnName],
field.itemType
)
}}</span>
<span v-else>{{
infoItem[field.columnName] == null
? "--"
: infoItem[field.columnName]
}}</span>
</div>
</div>
</div>
<div v-else-if="group.tableName == 'ic_hs'"
style="margin-top: 10px; padding: 0 20px">
<el-table class="table"
:data="natList"
border
height="400"
:header-cell-style="{ background: '#2195FE', color: '#FFFFFF' }"
style="width: 100%">
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50"></el-table-column>
<el-table-column prop="testTime"
header-align="center"
align="center"
label="检测时间"
width="150">
</el-table-column>
<el-table-column prop="address"
header-align="center"
align="center"
label="检测机构"
show-overflow-tooltip
min-width="180">
</el-table-column>
<el-table-column prop="result"
header-align="center"
align="center"
label="检测结果"
width="240">
</el-table-column>
</el-table>
</div>
<div v-else-if="group.tableName == 'ic_xc'"
style="margin-top: 10px; padding: 0 20px">
<el-table class="table"
:data="tripList"
border
height="400"
:header-cell-style="{ background: '#2195FE', color: '#FFFFFF' }"
style="width: 100%">
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50"></el-table-column>
<el-table-column prop="fromRegion"
header-align="center"
align="center"
label="来自地区"
show-overflow-tooltip
min-width="100">
</el-table-column>
<el-table-column prop="arrivalTime"
header-align="center"
align="center"
label="来到本地时间"
width="140">
</el-table-column>
<el-table-column prop="leaveTime"
header-align="center"
align="center"
label="离开本地时间"
width="140">
</el-table-column>
<el-table-column prop="noticeTime"
header-align="center"
align="center"
label="最近一次通知时间"
width="140">
</el-table-column>
<el-table-column prop="remark"
header-align="center"
align="center"
label="备注"
show-overflow-tooltip
width="120">
</el-table-column>
</el-table>
</div>
<div v-else-if="group.tableName == 'ic_ym'"
style="margin-top: 10px; padding: 0 20px">
<el-table v-if="vaccineList"
class="table"
:data="vaccineList"
border
height="400"
:header-cell-style="{ background: '#2195FE', color: '#FFFFFF' }"
style="width: 100%">
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50"></el-table-column>
<el-table-column prop="vaccinateTime"
header-align="center"
align="center"
label="接种时间"
show-overflow-tooltip
min-width="100">
</el-table-column>
<el-table-column prop="address"
header-align="center"
align="center"
label="接种地点">
</el-table-column>
<el-table-column prop="manufactor"
header-align="center"
align="center"
label="疫苗厂家">
</el-table-column>
</el-table>
</div>
<div class="list"
v-else>
<div class="item"
:class="{ 'z-long': group.itemList.length == 1 }"
:key="field.itemId"
v-for="field in group.itemList">
<span class="item-field">{{ field.label }}</span>
<span v-if="
field.itemType == 'select' ||
field.itemType == 'radio' ||
field.itemType == 'checkbox' ||
field.itemType == 'cascader'
">{{
!allInfo[group.tableName] ||
allInfo[group.tableName][0][field.columnName] == null
? "--"
: getOptionLabel(
field.options,
allInfo[group.tableName][0][field.columnName],
field.itemType
)
}}</span>
<span v-else>{{
!allInfo[group.tableName] ||
allInfo[group.tableName][0][field.columnName] == null
? "--"
: allInfo[group.tableName][0][field.columnName]
}}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import cptCard from "@/views/modules/visual/cpts/card";
import { requestPost } from "@/js/dai/request";
export default {
name: "peopleMore",
props: {
userId: {
type: String,
default: "",
},
gridName: {
type: String,
default: "",
},
view_real_data: {//
type: Boolean,
default: false,
}
},
components: {
cptCard,
},
data () {
return {
fieldList: [],
groupList: [],
groupIndex: 0,
startGroupIndex: 0,
info: {},
allInfo: {},
xiaoquList: [],
louList: [],
danyuanList: [],
homeList: [],
natList: [], //
tripList: [], //
vaccineList: [],
};
},
computed: {
isShundeju () {
return this.$store.state.user.customerId == "1550309684576591874";
},
xiaoquName () {
const {
xiaoquList,
info: { VILLAGE_ID },
} = this;
if (Array.isArray(xiaoquList) && xiaoquList.length > 0 && VILLAGE_ID) {
let item = xiaoquList.find((item) => item.value == VILLAGE_ID);
if (item) {
return item.label;
}
}
return "";
},
louName () {
const {
louList,
info: { BUILD_ID },
} = this;
if (Array.isArray(louList) && louList.length > 0 && BUILD_ID) {
let item = louList.find((item) => item.value == BUILD_ID);
if (item) {
return item.label;
}
}
return "";
},
danyuanName () {
const {
danyuanList,
info: { UNIT_ID },
} = this;
if (Array.isArray(danyuanList) && danyuanList.length > 0 && UNIT_ID) {
let item = danyuanList.find((item) => item.value == UNIT_ID);
if (item) {
return item.label;
}
}
return "";
},
danyuanName () {
const {
danyuanList,
info: { UNIT_ID },
} = this;
if (Array.isArray(danyuanList) && danyuanList.length > 0 && UNIT_ID) {
let item = danyuanList.find((item) => item.value == UNIT_ID);
if (item) {
return item.label;
}
}
return "";
},
homeName () {
const {
homeList,
info: { HOME_ID },
} = this;
if (Array.isArray(homeList) && homeList.length > 0 && HOME_ID) {
let item = homeList.find((item) => item.value == HOME_ID);
if (item) {
return item.label;
}
}
return "";
},
},
watch: {
userId () {
this.getApiData();
},
},
mounted () {
this.getApiData();
},
methods: {
async handleTuomin () {
const url = "/data/aggregator/epmetuser/detailByType";
const { data, code, msg } = await requestPost(url, {
id: this.userId,
type: "checkIcResiUser",
});
if (code === 0) {
this.$set(this.info, 'MOBILE', data.mobile)
this.$set(this.info, 'ID_CARD', data.idCard)
} else {
this.$message.error(msg);
}
},
addStartGroupIndex () {
const { startGroupIndex, groupList } = this;
if (startGroupIndex < groupList.length - 9) {
this.startGroupIndex = startGroupIndex + 1;
} else {
this.startGroupIndex = groupList.length - 9;
}
},
subStartGroupIndex () {
const { startGroupIndex, groupList } = this;
if (startGroupIndex > 0) {
this.startGroupIndex = startGroupIndex - 1;
} else {
this.startGroupIndex = 0;
}
},
handleClose () {
this.$emit("close");
},
async getApiData () {
await this.getField();
await this.getInfo();
this.getDetailList();
this.getXiaoquList();
this.getLouList();
this.getDanyuanList();
this.getHomeList();
},
getOptionLabel (options, value, type = "") {
if (Array.isArray(options)) {
let valueArr = value.split(",");
if (type == "cascader") {
let finalValue = [];
this.getNodePath(options, value, finalValue);
return finalValue.join("-");
} else {
return valueArr
.map((val) => {
let item = options.find((item) => item.value == val);
if (item && item.label) {
return item.label;
}
return "--";
})
.join("、");
}
}
return "--";
},
getNodePath (node, val, path) {
// node:val:id, path:id
for (let i = 0; i < node.length; i++) {
const ele = node[i];
if (ele.value === val) {
path.push(ele.label);
return path;
} else if (ele.children && ele.children.length > 0) {
if (ele.children.some((row) => row.value === val)) {
path.unshift(ele.label);
this.getNodePath(ele.children, val, path);
} else {
this.getNodePath(ele.children, val, path);
}
}
}
return path;
},
//
async getField () {
const url = "/oper/customize/icform/getcustomerform";
const { data, code, msg } = await requestPost(url, {
dynamic: true,
formCode: "resi_base_info",
});
if (code === 0) {
this.groupList = data.groupList;
this.fieldList = (function (arr) {
let col = [];
let ele = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (item.itemType == "divider" || i == arr.length - 1) {
col.push([...ele]);
ele = [];
} else {
ele.push(item);
}
}
return col;
})(data.itemList);
this.fieldList.forEach((subList, index) => {
subList.forEach(async (item, subIndex) => {
if (item.optionSourceType == "remote" && item.optionSourceValue) {
this.fieldList[index][subIndex].options = await this.getOptions(
item.optionSourceValue
);
}
});
});
} else {
this.$message.error(msg);
}
},
//
async getInfo () {
const url = "/epmetuser/icresiuser/detail";
const { data, code, msg } = await requestPost(url, {
icResiUserId: this.userId,
formCode: "resi_base_info",
});
if (code === 0) {
this.info = data.ic_resi_user[0];
this.allInfo = data;
this.fieldList.forEach((subList, index) => {
subList.forEach((item, subIndex) => {
if (
item.itemType == "radio" &&
item.childGroup &&
this.allInfo[item.tableName] &&
this.allInfo[item.tableName][0][item.columnName] == "1"
) {
this.groupList = [...this.groupList, item.childGroup];
}
});
});
await Promise.all(
this.groupList.map((subList, index) => {
return Promise.all(
subList.itemList.map(async (item, subIndex) => {
if (
item.optionSourceType == "remote" &&
item.optionSourceValue
) {
this.groupList[index].itemList[subIndex].options =
await this.getOptions(item.optionSourceValue);
}
})
);
})
);
console.log("44444444", this.groupList);
let arr = [
{
groupId: "hs123",
itemList: [],
label: "核酸检测信息",
sort: 998,
supportAdd: false,
tableName: "ic_hs",
},
];
if (!this.isShundeju) {
arr = [
...arr,
{
groupId: "hs124",
itemList: [],
label: "行程信息",
sort: 999,
supportAdd: false,
tableName: "ic_xc",
},
{
groupId: "hs125",
itemList: [],
label: "疫苗信息",
sort: 999,
supportAdd: false,
tableName: "ic_ym",
},
];
this.groupList = [...this.groupList, ...arr];
} else {
this.groupList = [...arr, ...this.groupList];
}
} else {
this.$message.error(msg);
}
},
//
async getOptions (url) {
if (!url) return [];
const { data, code, msg } = await requestPost(url, {});
if (code === 0) {
return data;
} else {
return [];
}
},
async getXiaoquList () {
const url = "/gov/org/icneighborhood/neighborhoodoption";
const { data, code, msg } = await requestPost(url, {
agencyId: this.info.AGENCY_ID,
gridId: this.info.GRID_ID,
});
if (code === 0) {
this.xiaoquList = data;
} else {
this.$message.error(msg);
}
},
async getLouList () {
const url = "/gov/org/icbuilding/buildingoption";
const { data, code, msg } = await requestPost(url, {
neighborHoodId: this.info.VILLAGE_ID,
});
if (code === 0) {
this.louList = data;
} else {
this.$message.error(msg);
}
},
async getDanyuanList () {
const url = "/gov/org/icbuildingunit/unitoption";
const { data, code, msg } = await requestPost(url, {
buildingId: this.info.BUILD_ID,
});
if (code === 0) {
this.danyuanList = data;
} else {
this.$message.error(msg);
}
},
async getHomeList () {
const url = "/gov/org/ichouse/houseoption";
const { data, code, msg } = await requestPost(url, {
unitId: this.info.UNIT_ID,
});
if (code === 0) {
this.homeList = data;
} else {
this.$message.error(msg);
}
},
async getDetailList () {
const url = "/epmetuser/epidemicPrevention/info";
let params = {
id: this.userId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
const { vaccineList, natList, tripList } = data;
this.vaccineList = vaccineList;
this.natList = natList;
this.tripList = tripList;
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" src="@/assets/scss/people-info.scss" scoped></style>

125
src/views/modules/home/cpts/scroll-notice.vue

@ -0,0 +1,125 @@
<template>
<div class="m-scoll-notice">
<div class="wrapper">
<div class="bar" ref="barparent">
<div class="bartext" ref="barchild" :style="bartextStyle">
<!-- <li
v-for="(item, index) in list"
:key="item.configId + item.buildingId + index"
@click="toNoticeInfo(item)"
>
{{ item.noticeContent }}
</li> -->
<slot></slot>
</div>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
export default {
props: {
list: {
type: Array,
default: [],
},
},
data() {
return {
parentClientWidth: 100000,
beyond: false,
};
},
components: {},
computed: {
bartextStyle() {
let len = this.list.length;
let beyond = this.beyond;
return {
// paddingLeft: beyond ? this.parentClientWidth + "px" : "",
animation: beyond
? `move_left_right ${len * 5}s linear 0s infinite`
: "",
};
},
},
mounted() {
this.move();
},
methods: {
move() {
const parentClientWidth = this.$refs.barparent.clientWidth;
this.parentClientWidth = parentClientWidth;
//
const parent = this.$refs.barparent;
const child = this.$refs.barchild;
console.log("对比", child.clientWidth, parent.clientWidth);
this.beyond = child.clientWidth > parent.clientWidth;
},
handleCancle() {
this.$emit("dialogCancle");
this.resetData();
},
resetData() {
this.dataForm = {
neighborHoodId: "", // ID
buildingId: "", //ID
buildingUnitId: "", //ID
doorName: "", //
houseType: "1", //
purpose: "1", //
rentFlag: 1, //10
ownerPhone: "", //
ownerName: "", //
ownerIdCard: "", //
};
},
},
};
</script>
<style lang="scss">
.m-scoll-notice {
.wrapper {
// padding: 0 15px;
display: flex;
align-items: center;
// background-color: "#FFF6EC";
}
.bar {
width: 100%;
// height: 32px;
// line-height: 32px;
overflow: hidden;
box-sizing: border-box;
}
.bartext {
white-space: nowrap;
display: inline-block;
}
.bartext li {
white-space: nowrap;
display: inline-block;
color: red;
font-size: 14px;
}
.state-text-overflow {
animation: move_left_right 120s linear 0s infinite;
}
@keyframes move_left_right {
from {
transform: translateX(0%);
}
to {
transform: translateX(-100%);
}
}
}
</style>

230
src/views/modules/home/cpts/xuqiu-info.vue

@ -0,0 +1,230 @@
<template>
<div>
<div>
<el-form
ref="ref_form"
:inline="false"
:model="dataForm"
:disabled="formType === 'detail'"
class="form"
>
<el-form-item label="状态:" label-width="150px" style="display: block">
<span>{{ dataForm.statusName }}</span>
</el-form-item>
<el-form-item
label="所属网格:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.gridName }}</span>
</el-form-item>
<el-form-item
label="需求类型:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.categoryName }}</span>
</el-form-item>
<el-form-item
label="需求内容:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.content }}</span>
</el-form-item>
<el-form-item
label="上报类型:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.reportTypeName }}</span>
</el-form-item>
<el-form-item label="上报人:" label-width="150px" style="display: block">
<span>{{ dataForm.reportUserName }}</span>
</el-form-item>
<el-form-item
label="上报时间:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.reportTime }}</span>
</el-form-item>
<el-form-item label="需求人:" label-width="150px" style="display: block">
<span>{{ dataForm.demandUserName }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.serviceShowName"
label="服务方:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.serviceShowName }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.wantServiceTime"
label="服务时间:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.wantServiceTime }}</span>
</el-form-item>
<el-form-item
v-if="
dataForm.serviceStartTime &&
dataForm.serviceEndTime &&
dataForm.status == 'finished'
"
label="实际服务时间:"
label-width="150px"
style="display: block"
>
<span
>{{ dataForm.serviceStartTime }}{{
dataForm.serviceEndTime
}}</span
>
</el-form-item>
<el-form-item
v-if="dataForm.finishResult && dataForm.status == 'finished'"
label="完成情况:"
label-width="150px"
style="display: block"
>
<span>{{
dataForm.finishResult == "resolved" ? "已解决" : "未解决"
}}</span>
</el-form-item>
<el-form-item
v-if="dataForm.score && dataForm.status == 'finished'"
label="评价得分:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.score }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.finishDesc && dataForm.status == 'finished'"
label="评价备注:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.finishDesc }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.cancelTime && dataForm.status == 'canceled'"
label="取消时间:"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.cancelTime }}</span>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button @click="handleCancle">关闭</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
let loading; //
export default {
data() {
return {
formType: "detail", // addeditdetail
dataForm: {},
};
},
components: {},
mounted() {},
methods: {
async initForm(type, row) {
this.$refs.ref_form.resetFields();
this.formType = type;
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row));
}
},
handleCancle() {
this.$emit("dialogCancle");
this.resetData();
},
resetData() {
this.dataForm = {};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {},
props: {},
};
</script>
<style lang="scss" scoped>
.item_width_1 {
width: 500px;
}
.item_width_2 {
width: 400px;
}
.item_width_3 {
margin-left: 10px;
width: 200px;
}
.div_btn {
display: flex;
justify-content: center;
}
.el-tabs {
margin: 0 20px;
}
.el-upload__tip {
color: rgb(155, 155, 155);
margin: 0;
}
.form {
margin-top: 30px;
height: 60vh;
overflow-y: auto;
}
</style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

1183
src/views/modules/home/index.vue

File diff suppressed because it is too large
Loading…
Cancel
Save