Browse Source

Merge branch 'data-page' of http://120.46.222.128:10021/elink-star/epmet-work-mp into work_tab_bar

# Conflicts:
#	subpages/searchResult/pages/resiInfo/resiInfo.js
#	utils/config.js
work_tab_bar
是小王呀\24601 2 years ago
parent
commit
b1fc2bfc9e
  1. 17
      components/custom-tab-bar/index.js
  2. 2
      ec-canvas/echarts.js
  3. BIN
      images/cardIcon.png
  4. BIN
      images/mine/avater.png
  5. BIN
      images/work/card.png
  6. BIN
      images/work/center.png
  7. BIN
      images/work/sqmp.png
  8. 51
      libs/jsencrypt/lib/lib/asn1js/asn1.d.ts
  9. 565
      libs/jsencrypt/lib/lib/asn1js/asn1.js
  10. 5
      libs/jsencrypt/lib/lib/asn1js/base64.d.ts
  11. 88
      libs/jsencrypt/lib/lib/asn1js/base64.js
  12. 3
      libs/jsencrypt/lib/lib/asn1js/hex.d.ts
  13. 64
      libs/jsencrypt/lib/lib/asn1js/hex.js
  14. 9
      libs/jsencrypt/lib/lib/asn1js/int10.d.ts
  15. 87
      libs/jsencrypt/lib/lib/asn1js/int10.js
  16. 9778
      libs/jsencrypt/lib/lib/asn1js/oids.d.ts
  17. 1962
      libs/jsencrypt/lib/lib/asn1js/oids.js
  18. 1
      pages/index/index.js
  19. 4
      pages/index/index.wxml
  20. 2
      pages/index/index.wxss
  21. 4
      pages/mine/mine.wxml
  22. 64
      pages/resiAndHouse/resiAndHouse.js
  23. 7
      pages/resiAndHouse/resiAndHouse.wxml
  24. 7
      pages/resiAndHouse/resiAndHouse.wxss
  25. 6
      pages/work/work.wxml
  26. 10
      subpages/addResi/component/expandForm/index.wxml
  27. 15
      subpages/addResi/pages/addResi/addResi.js
  28. 218
      subpages/businessRecord/businessRecord.js
  29. 5
      subpages/businessRecord/businessRecord.json
  30. 54
      subpages/businessRecord/businessRecord.wxml
  31. 34
      subpages/businessRecord/businessRecord.wxss
  32. 189
      subpages/house/pages/housePortrait/component/graph/graph.js
  33. 6
      subpages/house/pages/housePortrait/component/graph/graph.json
  34. 4
      subpages/house/pages/housePortrait/component/graph/graph.wxml
  35. 20
      subpages/house/pages/housePortrait/component/graph/graph.wxss
  36. 204
      subpages/house/pages/housePortrait/housePortrait.js
  37. 8
      subpages/house/pages/housePortrait/housePortrait.json
  38. 43
      subpages/house/pages/housePortrait/housePortrait.wxml
  39. 82
      subpages/house/pages/housePortrait/housePortrait.wxss
  40. 275
      subpages/nohouse/pages/nohouse/nohouse.js
  41. 18
      subpages/nohouse/pages/nohouse/nohouse.wxml
  42. 17
      subpages/nohouse/pages/nohouse/nohouse.wxss
  43. 471
      subpages/resnoinformation/pages/resnoinformation/resnoinformation.js
  44. 56
      subpages/resnoinformation/pages/resnoinformation/resnoinformation.wxml
  45. 25
      subpages/resnoinformation/pages/resnoinformation/resnoinformation.wxss
  46. 317
      subpages/searchResult/pages/resiInfo/component/graph/graph.js
  47. 2
      subpages/searchResult/pages/resiInfo/component/graph/graph.wxml
  48. 13
      subpages/searchResult/pages/resiInfo/component/graph/graph.wxss
  49. 33
      subpages/searchResult/pages/resiInfo/resiInfo.js
  50. 7
      subpages/searchResult/pages/resiInfo/resiInfo.wxml
  51. 26
      utils/api.js
  52. 4
      utils/businessRecords.js
  53. 7
      utils/config.js

17
components/custom-tab-bar/index.js

@ -24,15 +24,6 @@ Component({
show: true
},
,
{
"pagePath": "/pages/work2/work2",
"text": "工作",
"iconPath": "/images/home/work.png",
"selectedIconPath": "/images/home/workSelected.png",
show: true
},
{
"pagePath": "/pages/statistics/statistics",
"text": "数据",
@ -40,6 +31,14 @@ Component({
"selectedIconPath": "/images/home/informationSelected.png",
show: false
},
{
"pagePath": "/pages/work2/work2",
"text": "工作",
"iconPath": "/images/home/work.png",
"selectedIconPath": "/images/home/workSelected.png",
show: true
},
{
"pagePath": "/pages/mine/mine",

2
ec-canvas/echarts.js

File diff suppressed because one or more lines are too long

BIN
images/cardIcon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
images/mine/avater.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

BIN
images/work/card.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

BIN
images/work/center.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

BIN
images/work/sqmp.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

51
libs/jsencrypt/lib/lib/asn1js/asn1.d.ts

@ -0,0 +1,51 @@
import { Int10 } from "./int10";
export declare class Stream {
constructor(enc: Stream | number[], pos?: number);
private enc;
pos: number;
get(pos?: number): number;
hexDigits: string;
hexByte(b: number): string;
hexDump(start: number, end: number, raw: boolean): string;
isASCII(start: number, end: number): boolean;
parseStringISO(start: number, end: number): string;
parseStringUTF(start: number, end: number): string;
parseStringBMP(start: number, end: number): string;
parseTime(start: number, end: number, shortYear: boolean): string;
parseInteger(start: number, end: number): string | 0 | -1;
parseBitString(start: number, end: number, maxLength: number): string;
parseOctetString(start: number, end: number, maxLength: number): string;
parseOID(start: number, end: number, maxLength: number): string;
}
export declare class ASN1 {
constructor(stream: Stream, header: number, length: number, tag: ASN1Tag, sub: ASN1[]);
private stream;
private header;
private length;
private tag;
sub: ASN1[];
typeName(): string;
content(maxLength: number): string | 0 | -1;
toString(): string;
toPrettyString(indent: string): string;
posStart(): number;
posContent(): number;
posEnd(): number;
toHexString(): string;
static decodeLength(stream: Stream): number;
/**
* Retrieve the hexadecimal value (as a string) of the current ASN.1 element
* @returns {string}
* @public
*/
getHexStringValue(): string;
static decode(str: Stream | number[]): ASN1;
}
export declare class ASN1Tag {
constructor(stream: Stream);
tagClass: number;
tagConstructed: boolean;
tagNumber: number | Int10;
isUniversal(): boolean;
isEOC(): boolean;
}

565
libs/jsencrypt/lib/lib/asn1js/asn1.js

@ -0,0 +1,565 @@
// ASN.1 JavaScript decoder
// Copyright (c) 2008-2014 Lapo Luchini <lapo@lapo.it>
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
/*global oids */
import { Int10 } from "./int10";
var ellipsis = "\u2026";
var reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
var reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;
function stringCut(str, len) {
if (str.length > len) {
str = str.substring(0, len) + ellipsis;
}
return str;
}
var Stream = /** @class */ (function () {
function Stream(enc, pos) {
this.hexDigits = "0123456789ABCDEF";
if (enc instanceof Stream) {
this.enc = enc.enc;
this.pos = enc.pos;
}
else {
// enc should be an array or a binary string
this.enc = enc;
this.pos = pos;
}
}
Stream.prototype.get = function (pos) {
if (pos === undefined) {
pos = this.pos++;
}
if (pos >= this.enc.length) {
throw new Error("Requesting byte offset ".concat(pos, " on a stream of length ").concat(this.enc.length));
}
return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];
};
Stream.prototype.hexByte = function (b) {
return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);
};
Stream.prototype.hexDump = function (start, end, raw) {
var s = "";
for (var i = start; i < end; ++i) {
s += this.hexByte(this.get(i));
if (raw !== true) {
switch (i & 0xF) {
case 0x7:
s += " ";
break;
case 0xF:
s += "\n";
break;
default:
s += " ";
}
}
}
return s;
};
Stream.prototype.isASCII = function (start, end) {
for (var i = start; i < end; ++i) {
var c = this.get(i);
if (c < 32 || c > 176) {
return false;
}
}
return true;
};
Stream.prototype.parseStringISO = function (start, end) {
var s = "";
for (var i = start; i < end; ++i) {
s += String.fromCharCode(this.get(i));
}
return s;
};
Stream.prototype.parseStringUTF = function (start, end) {
var s = "";
for (var i = start; i < end;) {
var c = this.get(i++);
if (c < 128) {
s += String.fromCharCode(c);
}
else if ((c > 191) && (c < 224)) {
s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));
}
else {
s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));
}
}
return s;
};
Stream.prototype.parseStringBMP = function (start, end) {
var str = "";
var hi;
var lo;
for (var i = start; i < end;) {
hi = this.get(i++);
lo = this.get(i++);
str += String.fromCharCode((hi << 8) | lo);
}
return str;
};
Stream.prototype.parseTime = function (start, end, shortYear) {
var s = this.parseStringISO(start, end);
var m = (shortYear ? reTimeS : reTimeL).exec(s);
if (!m) {
return "Unrecognized time: " + s;
}
if (shortYear) {
// to avoid querying the timer, use the fixed range [1970, 2069]
// it will conform with ITU X.400 [-10, +40] sliding window until 2030
m[1] = +m[1];
m[1] += (+m[1] < 70) ? 2000 : 1900;
}
s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4];
if (m[5]) {
s += ":" + m[5];
if (m[6]) {
s += ":" + m[6];
if (m[7]) {
s += "." + m[7];
}
}
}
if (m[8]) {
s += " UTC";
if (m[8] != "Z") {
s += m[8];
if (m[9]) {
s += ":" + m[9];
}
}
}
return s;
};
Stream.prototype.parseInteger = function (start, end) {
var v = this.get(start);
var neg = (v > 127);
var pad = neg ? 255 : 0;
var len;
var s = "";
// skip unuseful bits (not allowed in DER)
while (v == pad && ++start < end) {
v = this.get(start);
}
len = end - start;
if (len === 0) {
return neg ? -1 : 0;
}
// show bit length of huge integers
if (len > 4) {
s = v;
len <<= 3;
while (((+s ^ pad) & 0x80) == 0) {
s = +s << 1;
--len;
}
s = "(" + len + " bit)\n";
}
// decode the integer
if (neg) {
v = v - 256;
}
var n = new Int10(v);
for (var i = start + 1; i < end; ++i) {
n.mulAdd(256, this.get(i));
}
return s + n.toString();
};
Stream.prototype.parseBitString = function (start, end, maxLength) {
var unusedBit = this.get(start);
var lenBit = ((end - start - 1) << 3) - unusedBit;
var intro = "(" + lenBit + " bit)\n";
var s = "";
for (var i = start + 1; i < end; ++i) {
var b = this.get(i);
var skip = (i == end - 1) ? unusedBit : 0;
for (var j = 7; j >= skip; --j) {
s += (b >> j) & 1 ? "1" : "0";
}
if (s.length > maxLength) {
return intro + stringCut(s, maxLength);
}
}
return intro + s;
};
Stream.prototype.parseOctetString = function (start, end, maxLength) {
if (this.isASCII(start, end)) {
return stringCut(this.parseStringISO(start, end), maxLength);
}
var len = end - start;
var s = "(" + len + " byte)\n";
maxLength /= 2; // we work in bytes
if (len > maxLength) {
end = start + maxLength;
}
for (var i = start; i < end; ++i) {
s += this.hexByte(this.get(i));
}
if (len > maxLength) {
s += ellipsis;
}
return s;
};
Stream.prototype.parseOID = function (start, end, maxLength) {
var s = "";
var n = new Int10();
var bits = 0;
for (var i = start; i < end; ++i) {
var v = this.get(i);
n.mulAdd(128, v & 0x7F);
bits += 7;
if (!(v & 0x80)) { // finished
if (s === "") {
n = n.simplify();
if (n instanceof Int10) {
n.sub(80);
s = "2." + n.toString();
}
else {
var m = n < 80 ? n < 40 ? 0 : 1 : 2;
s = m + "." + (n - m * 40);
}
}
else {
s += "." + n.toString();
}
if (s.length > maxLength) {
return stringCut(s, maxLength);
}
n = new Int10();
bits = 0;
}
}
if (bits > 0) {
s += ".incomplete";
}
return s;
};
return Stream;
}());
export { Stream };
var ASN1 = /** @class */ (function () {
function ASN1(stream, header, length, tag, sub) {
if (!(tag instanceof ASN1Tag)) {
throw new Error("Invalid tag value.");
}
this.stream = stream;
this.header = header;
this.length = length;
this.tag = tag;
this.sub = sub;
}
ASN1.prototype.typeName = function () {
switch (this.tag.tagClass) {
case 0: // universal
switch (this.tag.tagNumber) {
case 0x00:
return "EOC";
case 0x01:
return "BOOLEAN";
case 0x02:
return "INTEGER";
case 0x03:
return "BIT_STRING";
case 0x04:
return "OCTET_STRING";
case 0x05:
return "NULL";
case 0x06:
return "OBJECT_IDENTIFIER";
case 0x07:
return "ObjectDescriptor";
case 0x08:
return "EXTERNAL";
case 0x09:
return "REAL";
case 0x0A:
return "ENUMERATED";
case 0x0B:
return "EMBEDDED_PDV";
case 0x0C:
return "UTF8String";
case 0x10:
return "SEQUENCE";
case 0x11:
return "SET";
case 0x12:
return "NumericString";
case 0x13:
return "PrintableString"; // ASCII subset
case 0x14:
return "TeletexString"; // aka T61String
case 0x15:
return "VideotexString";
case 0x16:
return "IA5String"; // ASCII
case 0x17:
return "UTCTime";
case 0x18:
return "GeneralizedTime";
case 0x19:
return "GraphicString";
case 0x1A:
return "VisibleString"; // ASCII subset
case 0x1B:
return "GeneralString";
case 0x1C:
return "UniversalString";
case 0x1E:
return "BMPString";
}
return "Universal_" + this.tag.tagNumber.toString();
case 1:
return "Application_" + this.tag.tagNumber.toString();
case 2:
return "[" + this.tag.tagNumber.toString() + "]"; // Context
case 3:
return "Private_" + this.tag.tagNumber.toString();
}
};
ASN1.prototype.content = function (maxLength) {
if (this.tag === undefined) {
return null;
}
if (maxLength === undefined) {
maxLength = Infinity;
}
var content = this.posContent();
var len = Math.abs(this.length);
if (!this.tag.isUniversal()) {
if (this.sub !== null) {
return "(" + this.sub.length + " elem)";
}
return this.stream.parseOctetString(content, content + len, maxLength);
}
switch (this.tag.tagNumber) {
case 0x01: // BOOLEAN
return (this.stream.get(content) === 0) ? "false" : "true";
case 0x02: // INTEGER
return this.stream.parseInteger(content, content + len);
case 0x03: // BIT_STRING
return this.sub ? "(" + this.sub.length + " elem)" :
this.stream.parseBitString(content, content + len, maxLength);
case 0x04: // OCTET_STRING
return this.sub ? "(" + this.sub.length + " elem)" :
this.stream.parseOctetString(content, content + len, maxLength);
// case 0x05: // NULL
case 0x06: // OBJECT_IDENTIFIER
return this.stream.parseOID(content, content + len, maxLength);
// case 0x07: // ObjectDescriptor
// case 0x08: // EXTERNAL
// case 0x09: // REAL
// case 0x0A: // ENUMERATED
// case 0x0B: // EMBEDDED_PDV
case 0x10: // SEQUENCE
case 0x11: // SET
if (this.sub !== null) {
return "(" + this.sub.length + " elem)";
}
else {
return "(no elem)";
}
case 0x0C: // UTF8String
return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);
case 0x12: // NumericString
case 0x13: // PrintableString
case 0x14: // TeletexString
case 0x15: // VideotexString
case 0x16: // IA5String
// case 0x19: // GraphicString
case 0x1A: // VisibleString
// case 0x1B: // GeneralString
// case 0x1C: // UniversalString
return stringCut(this.stream.parseStringISO(content, content + len), maxLength);
case 0x1E: // BMPString
return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);
case 0x17: // UTCTime
case 0x18: // GeneralizedTime
return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));
}
return null;
};
ASN1.prototype.toString = function () {
return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub.length) + "]";
};
ASN1.prototype.toPrettyString = function (indent) {
if (indent === undefined) {
indent = "";
}
var s = indent + this.typeName() + " @" + this.stream.pos;
if (this.length >= 0) {
s += "+";
}
s += this.length;
if (this.tag.tagConstructed) {
s += " (constructed)";
}
else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {
s += " (encapsulates)";
}
s += "\n";
if (this.sub !== null) {
indent += " ";
for (var i = 0, max = this.sub.length; i < max; ++i) {
s += this.sub[i].toPrettyString(indent);
}
}
return s;
};
ASN1.prototype.posStart = function () {
return this.stream.pos;
};
ASN1.prototype.posContent = function () {
return this.stream.pos + this.header;
};
ASN1.prototype.posEnd = function () {
return this.stream.pos + this.header + Math.abs(this.length);
};
ASN1.prototype.toHexString = function () {
return this.stream.hexDump(this.posStart(), this.posEnd(), true);
};
ASN1.decodeLength = function (stream) {
var buf = stream.get();
var len = buf & 0x7F;
if (len == buf) {
return len;
}
// no reason to use Int10, as it would be a huge buffer anyways
if (len > 6) {
throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1));
}
if (len === 0) {
return null;
} // undefined
buf = 0;
for (var i = 0; i < len; ++i) {
buf = (buf * 256) + stream.get();
}
return buf;
};
/**
* Retrieve the hexadecimal value (as a string) of the current ASN.1 element
* @returns {string}
* @public
*/
ASN1.prototype.getHexStringValue = function () {
var hexString = this.toHexString();
var offset = this.header * 2;
var length = this.length * 2;
return hexString.substr(offset, length);
};
ASN1.decode = function (str) {
var stream;
if (!(str instanceof Stream)) {
stream = new Stream(str, 0);
}
else {
stream = str;
}
var streamStart = new Stream(stream);
var tag = new ASN1Tag(stream);
var len = ASN1.decodeLength(stream);
var start = stream.pos;
var header = start - streamStart.pos;
var sub = null;
var getSub = function () {
var ret = [];
if (len !== null) {
// definite length
var end = start + len;
while (stream.pos < end) {
ret[ret.length] = ASN1.decode(stream);
}
if (stream.pos != end) {
throw new Error("Content size is not correct for container starting at offset " + start);
}
}
else {
// undefined length
try {
for (;;) {
var s = ASN1.decode(stream);
if (s.tag.isEOC()) {
break;
}
ret[ret.length] = s;
}
len = start - stream.pos; // undefined lengths are represented as negative values
}
catch (e) {
throw new Error("Exception while decoding undefined length content: " + e);
}
}
return ret;
};
if (tag.tagConstructed) {
// must have valid content
sub = getSub();
}
else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {
// sometimes BitString and OctetString are used to encapsulate ASN.1
try {
if (tag.tagNumber == 0x03) {
if (stream.get() != 0) {
throw new Error("BIT STRINGs with unused bits cannot encapsulate.");
}
}
sub = getSub();
for (var i = 0; i < sub.length; ++i) {
if (sub[i].tag.isEOC()) {
throw new Error("EOC is not supposed to be actual content.");
}
}
}
catch (e) {
// but silently ignore when they don't
sub = null;
}
}
if (sub === null) {
if (len === null) {
throw new Error("We can't skip over an invalid tag with undefined length at offset " + start);
}
stream.pos = start + Math.abs(len);
}
return new ASN1(streamStart, header, len, tag, sub);
};
return ASN1;
}());
export { ASN1 };
var ASN1Tag = /** @class */ (function () {
function ASN1Tag(stream) {
var buf = stream.get();
this.tagClass = buf >> 6;
this.tagConstructed = ((buf & 0x20) !== 0);
this.tagNumber = buf & 0x1F;
if (this.tagNumber == 0x1F) { // long tag
var n = new Int10();
do {
buf = stream.get();
n.mulAdd(128, buf & 0x7F);
} while (buf & 0x80);
this.tagNumber = n.simplify();
}
}
ASN1Tag.prototype.isUniversal = function () {
return this.tagClass === 0x00;
};
ASN1Tag.prototype.isEOC = function () {
return this.tagClass === 0x00 && this.tagNumber === 0x00;
};
return ASN1Tag;
}());
export { ASN1Tag };

5
libs/jsencrypt/lib/lib/asn1js/base64.d.ts

@ -0,0 +1,5 @@
export declare const Base64: {
decode(a: string): number[];
re: RegExp;
unarmor(a: string): number[];
};

88
libs/jsencrypt/lib/lib/asn1js/base64.js

@ -0,0 +1,88 @@
// Base64 JavaScript decoder
// Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
var decoder;
export var Base64 = {
decode: function (a) {
var i;
if (decoder === undefined) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var ignore = "= \f\n\r\t\u00A0\u2028\u2029";
decoder = Object.create(null);
for (i = 0; i < 64; ++i) {
decoder[b64.charAt(i)] = i;
}
decoder['-'] = 62; //+
decoder['_'] = 63; //-
for (i = 0; i < ignore.length; ++i) {
decoder[ignore.charAt(i)] = -1;
}
}
var out = [];
var bits = 0;
var char_count = 0;
for (i = 0; i < a.length; ++i) {
var c = a.charAt(i);
if (c == "=") {
break;
}
c = decoder[c];
if (c == -1) {
continue;
}
if (c === undefined) {
throw new Error("Illegal character at offset " + i);
}
bits |= c;
if (++char_count >= 4) {
out[out.length] = (bits >> 16);
out[out.length] = (bits >> 8) & 0xFF;
out[out.length] = bits & 0xFF;
bits = 0;
char_count = 0;
}
else {
bits <<= 6;
}
}
switch (char_count) {
case 1:
throw new Error("Base64 encoding incomplete: at least 2 bits missing");
case 2:
out[out.length] = (bits >> 10);
break;
case 3:
out[out.length] = (bits >> 16);
out[out.length] = (bits >> 8) & 0xFF;
break;
}
return out;
},
re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,
unarmor: function (a) {
var m = Base64.re.exec(a);
if (m) {
if (m[1]) {
a = m[1];
}
else if (m[2]) {
a = m[2];
}
else {
throw new Error("RegExp out of sync");
}
}
return Base64.decode(a);
}
};

3
libs/jsencrypt/lib/lib/asn1js/hex.d.ts

@ -0,0 +1,3 @@
export declare const Hex: {
decode(a: string): number[];
};

64
libs/jsencrypt/lib/lib/asn1js/hex.js

@ -0,0 +1,64 @@
// Hex JavaScript decoder
// Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
var decoder;
export var Hex = {
decode: function (a) {
var i;
if (decoder === undefined) {
var hex = "0123456789ABCDEF";
var ignore = " \f\n\r\t\u00A0\u2028\u2029";
decoder = {};
for (i = 0; i < 16; ++i) {
decoder[hex.charAt(i)] = i;
}
hex = hex.toLowerCase();
for (i = 10; i < 16; ++i) {
decoder[hex.charAt(i)] = i;
}
for (i = 0; i < ignore.length; ++i) {
decoder[ignore.charAt(i)] = -1;
}
}
var out = [];
var bits = 0;
var char_count = 0;
for (i = 0; i < a.length; ++i) {
var c = a.charAt(i);
if (c == "=") {
break;
}
c = decoder[c];
if (c == -1) {
continue;
}
if (c === undefined) {
throw new Error("Illegal character at offset " + i);
}
bits |= c;
if (++char_count >= 2) {
out[out.length] = bits;
bits = 0;
char_count = 0;
}
else {
bits <<= 4;
}
}
if (char_count) {
throw new Error("Hex encoding incomplete: 4 bits missing");
}
return out;
}
};

9
libs/jsencrypt/lib/lib/asn1js/int10.d.ts

@ -0,0 +1,9 @@
export declare class Int10 {
constructor(value?: string | number);
mulAdd(m: number, c: number): void;
sub(c: number): void;
toString(base?: number): string;
valueOf(): number;
simplify(): number | this;
private buf;
}

87
libs/jsencrypt/lib/lib/asn1js/int10.js

@ -0,0 +1,87 @@
// Big integer base-10 printing library
// Copyright (c) 2014 Lapo Luchini <lapo@lapo.it>
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
var max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256
var Int10 = /** @class */ (function () {
function Int10(value) {
this.buf = [+value || 0];
}
Int10.prototype.mulAdd = function (m, c) {
// assert(m <= 256)
var b = this.buf;
var l = b.length;
var i;
var t;
for (i = 0; i < l; ++i) {
t = b[i] * m + c;
if (t < max) {
c = 0;
}
else {
c = 0 | (t / max);
t -= c * max;
}
b[i] = t;
}
if (c > 0) {
b[i] = c;
}
};
Int10.prototype.sub = function (c) {
// assert(m <= 256)
var b = this.buf;
var l = b.length;
var i;
var t;
for (i = 0; i < l; ++i) {
t = b[i] - c;
if (t < 0) {
t += max;
c = 1;
}
else {
c = 0;
}
b[i] = t;
}
while (b[b.length - 1] === 0) {
b.pop();
}
};
Int10.prototype.toString = function (base) {
if ((base || 10) != 10) {
throw new Error("only base 10 is supported");
}
var b = this.buf;
var s = b[b.length - 1].toString();
for (var i = b.length - 2; i >= 0; --i) {
s += (max + b[i]).toString().substring(1);
}
return s;
};
Int10.prototype.valueOf = function () {
var b = this.buf;
var v = 0;
for (var i = b.length - 1; i >= 0; --i) {
v = v * max + b[i];
}
return v;
};
Int10.prototype.simplify = function () {
var b = this.buf;
return (b.length == 1) ? b[0] : this;
};
return Int10;
}());
export { Int10 };

9778
libs/jsencrypt/lib/lib/asn1js/oids.d.ts

File diff suppressed because it is too large

1962
libs/jsencrypt/lib/lib/asn1js/oids.js

File diff suppressed because it is too large

1
pages/index/index.js

@ -68,6 +68,7 @@ onScrollToLower(e){
return
}
getIntelligentMessage(parm).then(res=>{
// res.data.list = res.data.list.map(item => {
// if (item.createdByName && item.createdByName.length >= 3) {
// item.createdByName = item.createdByName.slice(1,3);

4
pages/index/index.wxml

@ -84,8 +84,8 @@
<text class="Information_test2">{{item.readFlag != '1'?'未读':'已读'}}</text>
</view>
<view class="Information_two">
<text class="Information_test3">啦啦啦啦</text>
<text class="Information_test4">{{}}</text>
<text class="Information_test3">房屋信息采集</text>
<text class="Information_test4">{{item.createdTime}}</text>
</view>
</view>
</view>

2
pages/index/index.wxss

@ -964,7 +964,7 @@ color: #999999;
line-height: 40rpx;
}
.Information_test4{
width: 228rpx;
width: auto;
height: auto;
font-family: PingFang SC;
font-weight: 500;

4
pages/mine/mine.wxml

@ -51,13 +51,13 @@
</view>
<view class="right"> <image src="../../images/right.png" mode=""/></view>
</view> -->
<!-- <view class="item no-pseudo" bind:tap="toSettings" >
<view class="item no-pseudo" bind:tap="toSettings" >
<view class="left">
<image src="../../images/mine/sz.png" mode=""/>
<view>设置</view>
</view>
<view class="right"> <image src="../../images/right.png" mode=""/></view>
</view> -->
</view>
<view class="item no-pseudo" bind:tap="toSettings" >
<view class="left" bind:tap="toChangePassword">
<image src="../../images/login/password.png" mode=""/>

64
pages/resiAndHouse/resiAndHouse.js

@ -34,13 +34,14 @@ Page({
pageNo: 1,
pageSize: 10,
lowerThreshold: '10',
loadMoreVisible: false,
loadMoreVisible: true,
loadFwMoreVisible: false,
loadMoreType: "none",
loadFwMoreType: "none",
nodata: false,
nodatafw: false,
selectVale: 'resi',
keyWord: '1',
keyWord: '',
angencyId: null,
category: null,
searchOrgIdPath: '',
@ -71,7 +72,7 @@ Page({
"searchKey": "",
"pageSize": 50,
"pageNo": 1,
"searchOrgIdPath": "7b6f9a9f9f38d5f9fa7ce94a93d6eb28",
"searchOrgIdPath": "",
},
activeFwType: 0,
fwTypes: [
@ -98,10 +99,9 @@ Page({
},
params1: {
...this.data.params1,
searchOrgIdPath:App.globalData.user.agencyId,
// searchOrgIdPath:App.globalData.user.agencyId,
}
})
this.getTableFwData()
this.getAgencygridtree()
this.getAllOrgCategoryCount()
this.getTableData()
@ -172,6 +172,7 @@ Page({
this.setData({
activeFwType: e.currentTarget.dataset.index,
// category: e.currentTarget.dataset.category,
loadFwMoreVisible: true,
tableFwData: [],
params1: {
...this.data.params1,
@ -218,12 +219,12 @@ Page({
},
onChangeFw(e) {
const { value, tabIndex, selectedOptions } = e.detail;
if (tabIndex > 0 && selectedOptions[selectedOptions.length - 1].level != 'building') {
if (tabIndex > 0 && selectedOptions[selectedOptions.length - 1].level != 'unit') {
const level = selectedOptions[selectedOptions.length - 1].level
getNextTree({ level, id: value }).then(res => {
if (res.data.length > 0) {
const data = res.data.map(item => {
if (item.level != 'building') {
if (item.level != 'unit') {
return {
...item,
children: []
@ -255,9 +256,6 @@ Page({
onFinishFw(e) {
const { selectedOptions, value } = e.detail;
// const fieldNameFw = selectedOptions
// .map((option) => option.text || option.name)
// .join('/');
const level = selectedOptions[selectedOptions.length - 1].level
this.setData({
cascaderNameFw: e.detail.selectedOptions.map(item => item.label).join(' '),
@ -266,14 +264,17 @@ Page({
params: {
...this.data.params,
orgId: value,
level,
level:level == 'grid'?'grid':'agency',
agencyId:App.globalData.user.agencyId
},
params1: {
pageNo: 1,
...this.data.params1,
searchOrgIdPath: value,
orgId: value,
// orgId: value,
level,
},
tableFwData:[]
});
this.getTableFwData()
},
@ -281,6 +282,20 @@ Page({
this.setData({
selectVale: e.currentTarget.dataset.type
})
if(e.currentTarget.dataset.type === 'resi'){
this.setData({
pageNo: 1,
tableData: []
})
this.getTableData()
this.getAllOrgCategoryCount()
}else if(e.currentTarget.dataset.type === 'house'){
this.setData({
pageNo: 1,
tableFwData: []
})
this.getTableFwData()
}
},
handelClickShowTree() {
this.setData({
@ -310,6 +325,7 @@ Page({
tableData: []
})
this.getTableData()
this.getAllOrgCategoryCount()
}else{
this.setData({
pageNo: 1,
@ -353,15 +369,11 @@ Page({
})
},
toResiDetail(e) {
// '1765976717767618562'
console.log(e);
wx.navigateTo({
url: `/subpages/searchResult/pages/punchCard/punchCard?resiId=${e.currentTarget.dataset.resiid}`,
url: `/subpages/searchResult/pages/resiInfo/resiInfo?resiId=${e.currentTarget.dataset.resiid}`,
})
},
onClickJump(e) {
console.log('e::', e)
// '1765976717767618562'?resiId=${e.currentTarget.dataset.resiid}
wx.navigateTo({
url: `/subpages/house/pages/housePortrait/housePortrait?resiId=${e.currentTarget.dataset.resiid}`,
})
@ -382,7 +394,6 @@ Page({
},
onScrollToLower(e) {
if (this.data.loadMoreType === 'more') {
this.setData({
loadMoreVisible: true,
@ -392,7 +403,6 @@ Page({
}
},
onScrollFwToLower(e) {
console.log('this.data.loadFwMoreType::','zoule', this.data.loadFwMoreType)
if (this.data.loadFwMoreType === 'more') {
this.setData({
loadFwMoreVisible: true,
@ -449,8 +459,8 @@ Page({
},
getTableFwData: async function () {
this.setData({
loadMoreVisible: true,
nodata: false,
loadFwMoreVisible: true,
nodatafw: false,
loadMoreType: "more",
})
await allOrgHouseInfo({ ...this.data.params }).then(res => {
@ -475,17 +485,19 @@ Page({
loadFwMoreType: data.list.length === this.data.params1.pageSize ? 'more' : 'none',
tableFwData: this.data.tableFwData.concat(data.list),
})
if (this.data.tableData.length == 0) {
if (this.data.tableFwData.length == 0) {
this.setData({
loadMoreVisible: false,
nodata: true
loadFwMoreVisible: false,
loadFwMoreType: 'none',
nodatafw: true
})
}
} else {
this.setData({
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none'
loadFwMoreVisible: false,
nodatafw: true,
loadFwMoreType: 'none'
})
}
})

7
pages/resiAndHouse/resiAndHouse.wxml

@ -14,12 +14,11 @@
<image src="../../images/work/select.png" mode="" wx:if="{{selectVale == 'house'}}" />
</view>
</view>
<view class="inout_box">
<image src="../../images/work/search.png" mode="" class="search_img" />
<image src="../../images/work/search.png" mode="" class="search_img"/>
<input type="text" placeholder="姓名/手机/身份证" bindinput="handelBlurKeyWord" bindblur="handelBlurKeyWord" value="{{keyWord}}" />
<view class="btn_box" bind:tap="handelClickSearch">
<image src="../../images/cardIcon.png" mode="" class="OCR_img" bind:tap="handelClickToOcr" />
<image src="../../images/cardIcon.png" mode="" wx:if="{{selectVale == 'resi'}}" class="OCR_img" bind:tap="handelClickToOcr" />
<text>搜索</text>
</view>
</view>
@ -141,7 +140,7 @@
</view>
</view>
<load-more loadVisible="{{loadFwMoreVisible}}" loadType="{{loadFwMoreType}}"></load-more>
<no-data isShow="{{nodata}}" wx:if="{{tableFwData.length==0}}"></no-data>
<no-data isShow="{{nodatafw}}" wx:if="{{nodatafw}}"></no-data>
</scroll-view>
</view>
</view>

7
pages/resiAndHouse/resiAndHouse.wxss

@ -162,6 +162,8 @@ page {
justify-content: center;
align-items: center;
margin-top: 20rpx;
padding-left: 20rpx;
box-sizing: border-box;
}
.box_161 {
@ -183,8 +185,10 @@ page {
white-space: nowrap;
line-height: 52rpx;
text-align: center;
flex: 1;
margin-right: 20rpx;
overflow-x: scroll;
}
.image-text_9 {
@ -192,6 +196,7 @@ page {
flex-direction: row;
display: flex;
justify-content: space-between;
width: 99rpx;
}
.image-text_91 {

6
pages/work/work.wxml

@ -15,7 +15,7 @@
<view class="btn_box" bind:tap="handelClickSearch"><text>搜索</text></view>
</view>
<view class="jump" wx:if="{{setlectVal == 'resi'}}" bind:tap="toOCRCard">
<image style="height: 50rpx;width: 50rpx; margin-right: 11rpx;" src="../../images/work/card.png" mode=""/>
<!-- <image style="height: 50rpx;width: 50rpx; margin-right: 11rpx;" src="../../images/work/card.png" mode=""/> -->
<view>识别身份证查询</view>
<image style="height: 32rpx;width: 32rpx;" src="../../images/work/right.png" mode=""/>
</view>
@ -56,10 +56,10 @@
<view><text class="green font_size_44">{{collectedPopulationCount?collectedPopulationCount:'--'}}</text><text class="font_size_26">采集人口数</text></view>
</view>
</view>
<image src="../../images/work/center.png" mode="" class="center_image"/>
<!-- <image src="../../images/work/center.png" mode="" class="center_image"/> -->
</view>
</view>
<image src="../../images/work/sqmp.png" bind:tap="toDemandCheck" class="center_img" mode=""/>
<!-- <image src="../../images/work/sqmp.png" bind:tap="toDemandCheck" class="center_img" mode=""/> -->
<view class="bto" wx:if="{{agencyLevel!=='street'}}">
<view class="title">
<view style="font-size: 34rpx; font-weight: 500;">满意度自查</view>

10
subpages/addResi/component/expandForm/index.wxml

@ -29,7 +29,7 @@
<view class="form_item" wx:if="{{itemP.itemType == 'input'}}">
<view class="form_item_label">{{itemP.label}}</view>
<view class="form_item_input">
<input confirm-type="next" bindblur="bindinput" bindinput="bindinput" value="{{fitemP.selectLabel}}" data-formNameP="{{itemP.formNameP}}" data-formName="{{itemP.formName}}" placeholder-class="gray" placeholder="请输入" />
<input confirm-type="next" bindblur="bindinput" bindinput="bindinput" value="{{itemP.selectLabel}}" data-formNameP="{{itemP.formNameP}}" data-formName="{{itemP.formName}}" placeholder-class="gray" placeholder="请输入" />
</view>
</view>
<!-- 复选框 -->
@ -37,11 +37,11 @@
<view class="form_item_label">{{itemP.label}}</view>
<view class="form_item_input">
<checkbox-group bindchange="bindCheckbox" data-formNameP="{{itemP.formNameP}}" data-formName="{{itemP.formName}}">
<label class="weui-cell weui-check__label" wx:for="{{itemP.opction}}" wx:key="{{item.value}}">
<label class="weui-cell weui-check__label" wx:for="{{itemP.opction}}" wx:for-item="itemC" wx:key="{{item.value}}">
<view class="weui-cell__hd">
<checkbox value="{{item.value}}" color="#3974f6" checked="{{item.checked}}" />
<checkbox value="{{itemC.value}}" color="#3974f6" checked="{{itemP.selectLabel.includes(itemC.value)}}" />
</view>
<view class="weui-cell__bd">{{item.label}}</view>
<view class="weui-cell__bd">{{itemC.label}}</view>
</label>
</checkbox-group>
</view>
@ -50,7 +50,7 @@
<view class="form_item" wx:if="{{itemP.itemType == 'datepicker'}}">
<view class="form_item_label">{{itemP.label}}</view>
<view class="form_item_input">
<picker mode="date" value="{{form[itemP.id][itemP.formName]}}" bindchange="bindDateChange" data-formNameP="{{itemP.formNameP}}" data-formName="{{itemP.formName}}">
<picker mode="date" value="{{itemP.value}}" bindchange="bindDateChange" data-formNameP="{{itemP.formNameP}}" data-formName="{{itemP.formName}}">
<view class="{{itemP.selectLabel?'':'gray'}}">
{{itemP.selectLabel?itemP.selectLabel:'请选择'}}
</view>

15
subpages/addResi/pages/addResi/addResi.js

@ -698,6 +698,8 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad: async function (options) {
await this.getDicts()
if(options.type === 'edit'){
this.setData({
resiId:options.resiId,
@ -719,7 +721,6 @@ Page({
// day: `${year}-${month}-${day}`
})
await this.getGridoptionDict()
this.getDicts()
},
/**
@ -1341,6 +1342,15 @@ Page({
console.error('Error fetching options:', error);
}
}
console.log(this.data.form);
if(this.data.formType ==='edit'){
if(item.itemType === 'select'){
let obj = item.opction.find(itemC=>itemC.value === this.data.form[item.formNameP][item.formName]) || null
item.selectLabel = obj.label
}else{
item.selectLabel = this.data.form[item.formNameP][item.formName]
}
}
return acc;
});
Promise.all(promises).then((results) => {
@ -1462,13 +1472,14 @@ Page({
})
}
if(res.data.familyInfoDto && res.data.familyInfoDto.marriage){
console.log(this.data.dicts.marriageList);
marriageName = this.data.dicts.marriageList.find(item=>item.value == res.data.familyInfoDto.marriage).label
}
if(res.data.workInfoDto && res.data.workInfoDto.careerStatus){
careerStatusName = this.data.dicts.careerStatusList.find(item=>item.value == res.data.workInfoDto.careerStatus).label
}
if(res.data.baseInfoDto && res.data.baseInfoDto.idType){
idTypeName = this.data.dicts.idTypeList.find(item=>item.value == res.data.workInfoDto.careerStatus).label
idTypeName = this.data.dicts.idTypeList.find(item=>item.value == res.data.baseInfoDto.idType).label
}
if(res.data.resideInfoDtos){
for(let i in res.data.resideInfoDtos){

218
subpages/businessRecord/businessRecord.js

@ -1,6 +1,12 @@
import {getComplainList,getShengList,getPunchRecord,getShequList,getshijianList,getxuqiuList,getfuwuList} from "../../utils/businessRecords";
Page({
Component({
properties: {
"ywData": {
"type": Object,
"value": {}
},
},
/**
* 页面的初始数据
*/
@ -29,211 +35,13 @@ Page({
}],
tabValue: '12345',
data: {},
residIds:["1704792537883688962","1705416782032064514"]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
this.setData({
tabValue: "12345"
})
this.show12345("12345");
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
},
tabChange({currentTarget: {dataset:{index}}}) {
this.setData({
tabValue: index
})
if(index === "12345"){
this.show12345(index);
}else if(index === "provinceSurvey"){
let params = {
"residList": this.data.residIds
}
getShengList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.scope,
eventcontent: item.problemDesc
};
renamedArray.push(renamedItem);
});
this.data.data[index]= renamedArray;
this.setData({
data: this.data.data
})
}
})
}else if(index === "selfSurvey"){
let params = {
"residList": this.data.residIds
}
getShequList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.scope,
eventcontent: item.problemDesc
};
renamedArray.push(renamedItem);
});
this.data.data[index]= renamedArray;
this.setData({
data: this.data.data
})
}
})
}else if(index === "event"){
let params = {
"residList": this.data.residIds
}
getshijianList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.categorycode,
eventcontent: item.eventcontent
};
renamedArray.push(renamedItem);
});
this.data.data[index]= renamedArray;
this.setData({
data: this.data.data
})
}
})
}else if(index === "need"){
let params = {
"residList": this.data.residIds
}
getxuqiuList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.parentName,
eventcontent: item.content
};
renamedArray.push(renamedItem);
});
this.data.data[index]= renamedArray;
this.setData({
data: this.data.data
})
}
})
}else if(index === "serve"){
let params = {
"residList": this.data.residIds
}
getfuwuList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.serviceCategoryKey,
eventcontent: item.serviceName
};
renamedArray.push(renamedItem);
});
this.data.data[index]= renamedArray;
this.setData({
data: this.data.data
})
}
})
}else if(index === "punchRecord"){
let params = {
"residList": this.data.residIds
}
getPunchRecord(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.scope,
eventcontent: item.problemDesc
};
renamedArray.push(renamedItem);
});
this.data.data[index]= renamedArray;
this.setData({
data: this.data.data
})
}
})
}else{
console.log("else");
}
residIds: [],
},
show12345(index){
console.log("init")
let params = {
"residList": this.data.residIds,
"eventType": "3"
}
getComplainList(params).then(res => {
this.data.data[index]= res.data.list;
methods: {
tabChange({ currentTarget: { dataset: { index } } }) {
this.setData({
data: this.data.data
tabValue: index,
})
console.log(this.data.data[index]);
})
},
}
})

5
subpages/businessRecord/businessRecord.json

@ -1,3 +1,6 @@
{
"usingComponents": {}
"component": true,
"usingComponents": {
"no-data": "../../../components/noData/nodata"
}
}

54
subpages/businessRecord/businessRecord.wxml

@ -1,23 +1,43 @@
<view class="tag-list">
<view wx:for="{{tabList}}"
class="tag {{item.value === tabValue?'cur':''}}"
wx:key="index"
bind:tap="tabChange"
data-index="{{item.value}}">
{{item.label}}
<view wx:for="{{tabList}}" class="tag {{item.value === tabValue?'cur':''}}" wx:key="index" bind:tap="tabChange" data-index="{{item.value}}">
{{item.label}}({{ywData[item.value].length}})
</view>
</view>
<view class="table">
<view class="row header">
<view class="cell">事件类型</view>
<view class="cell">事件描述</view>
</view>
<!-- <block wx:for="{{data[tabValue]}}" wx:for-item="item" wx:for-index="index"> -->
<block bind:tap="gotopage" data-obj="{{item}}" wx:for="{{data[tabValue]}}" wx:key="index">
<view class="row {{index % 2 == 0 ? 'even' : 'odd'}}">
<view class="cell">{{item.categorycode}}</view>
<view class="cell">{{item.eventcontent}}</view>
<view wx:if="{{tabValue === '12345'||tabValue === 'event'}}" class="row header">
<view class="cell">事件类型</view>
<view class="cell">事件描述</view>
</view>
</block>
</view>
<view wx:if="{{tabValue === 'provinceSurvey'||tabValue === 'selfSurvey'}}" class="row header">
<view class="cell">不满意事项类型</view>
<view class="cell">不满意事项描述</view>
</view>
<view wx:if="{{tabValue === 'need'}}" class="row header">
<view class="cell">需求类型</view>
<view class="cell">需求描述</view>
</view>
<view wx:if="{{tabValue === 'serve'}}" class="row header">
<view class="cell">需求类型</view>
<view class="cell">事件描述</view>
</view>
<view wx:if="{{tabValue === 'punchRecord'}}" class="row header">
<view class="cell1">打卡人</view>
<view class="cell1">打卡地址</view>
<view class="cell1">打卡时间</view>
</view>
<block bind:tap="gotopage" wx:if="{{tabValue !== 'punchRecord'}}" data-obj="{{item}}" wx:for="{{ywData[tabValue]}}" wx:key="index">
<view class="row {{index % 2 == 0 ? 'even' : 'odd'}}">
<view class="cell">{{item.categorycode}}</view>
<view class="cell">{{item.eventcontent}}</view>
</view>
</block>
<block bind:tap="gotopage" wx:if="{{tabValue == 'punchRecord'}}" data-obj="{{item}}" wx:for="{{ywData[tabValue]}}" wx:key="index">
<view class="row {{index % 2 == 0 ? 'even' : 'odd'}}">
<view class="cell1">{{item.name}}</view>
<view class="cell1">{{item.clockInAddress}}</view>
<view class="cell1">{{item.clockInTime}}</view>
</view>
</block>
<no-data isShow="{{ywData[tabValue].length===0}}" wx:if="{{ywData[tabValue].length===0}}"></no-data>
</view>

34
subpages/businessRecord/businessRecord.wxss

@ -2,10 +2,10 @@
display: flex;
flex-wrap: wrap; /* 使得元素可以换行显示 */
margin: 0 -8rpx;
margin-bottom: 15px;
/* margin-bottom: 15px; */
}
.tag-list .tag {
padding: 10rpx 20rpx;
padding: 0rpx 20rpx;
font-size: 23rpx;
margin: 10rpx 8rpx;
text-align: center; /* 使标签文本居中 */
@ -101,18 +101,19 @@
.header {
font-weight: bold;
padding: 10px 0;
/* padding: 10px 0 0; */
}
.cell {
flex: 1;
padding: 10px 0;
padding: 20rpx 0;
font-size: 23rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.cell:nth-child(1) {
padding-left: 20rpx;
flex-basis: 30%;
font-size: 23rpx;
}
@ -122,6 +123,31 @@
font-size: 23rpx;
}
.cell1 {
/* flex: 1; */
/* display: flex; */
padding: 20rpx 0;
font-size: 23rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.cell1:nth-child(1) {
padding-left: 20rpx;
flex-basis: 18%;
font-size: 23rpx;
}
.cell1:nth-child(2) {
flex-basis: 40%;
font-size: 23rpx;
}
.cell1:nth-child(3) {
padding-left: 20rpx;
flex-basis: 33%;
font-size: 23rpx;
}
.even {
background-color: #f0f4fd;
}

189
subpages/house/pages/housePortrait/component/graph/graph.js

@ -0,0 +1,189 @@
import * as echarts from '../../../../../../ec-canvas/echarts';
import {
getFamilyRelationshipList
} from "../../../../../../utils/api";
var chart;
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
Component({
properties: {
houseId: {
type: String,
value: '',
},
houseName:{
type: String,
value: '',
}
},
data: {
ec: {
lazyLoad: true
// onInit: initChart
},
tabList: [{
label: "问题突出类别",
value: 1
}, {
label: '行业领域分析',
value: 2
}],
tabValue: 1
},
lifetimes: {
ready() {
console.log(this.data.houseName,'houseName');
this.getData()
}
},
methods: {
getData() {
this.selectComponent('#hotlineComplaints').init((canvas, width, height, dpr) => {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // 像素比
});
canvas.setChart(chart);
let params = {
type: "1",
id: this.data.houseId
}
getFamilyRelationshipList(params).then(({
data
}) => {
// let index = data.findIndex(item => item.id == this.data.houseId);
// if (index !== -1) {
// const [item] = data.splice(index, 1);
// data.unshift(item);
// }
const rootNode = {};
rootNode["id"] = this.data.houseId;
rootNode["name"] = this.data.houseName;
rootNode["type"] = 1;
data.unshift(rootNode);
let nodeList = data.map((item, index) => {
let symbolUrl = '';
if (item.type === 1) {
symbolUrl = 'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/a6cdfe6f699040f58fd8b2c10486b41d.png';
} else {
// 如果 type 不等于 1,则根据 gender 进行判断
if (item.gender === '1') {
// 如果 gender 等于 1,则根据 age 进行进一步的判断
symbolUrl = item.age > 18 && item.age < 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/1e21790833b04e9abe61e2a8f40446cb.png' :
item.age < 18 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/62c2b6a1ce834f8dae081b562b2579b9.png' :
item.age > 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/bd586a4e7d0f4b3aa68c79067dfe1428.png' :
'';
} else if (item.gender === '2') {
// 如果 gender 等于 2,则根据 age 进行进一步的判断
symbolUrl = item.age > 18 && item.age < 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/3b44e3495dcd4d96a3c07baad1bd7c5e.png' :
item.age < 18 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/0c38251bba644a6b8e4a925aea74c9a7.png' :
item.age > 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/2465ff7633a94413bf4ed2aa778c2765.png' :
'';
}
}
return {
'name': item.name,
'id': index + 1,
'category': 0,
'symbolSize': item.id == this.data.houseId ? 50 : 30,
'symbol': symbolUrl,
label: {
"position": "bottom"
}
};
});
let links = data.map((item, index) => ({
"source": 0,
"target": index+1,
"name": item.houseHolderRel||'暂不清楚',
"label": {
"align": "center",
"fontSize": 12,
"color":"#9cbbf9"
},
"lineStyle": {
"color": "#9cbbf9"
}
}))
links.splice(links.length-1,1)
let categories = data.map((item, index) => ({
"name":item.houseHolderRel||'暂不清楚',
"id":index+1,
"itemStyle": {
"color": '#9cbbf9'
},
}))
console.log(nodeList,links,categories);
var option = {
legend: [{
// selectedMode: 'single',
// icon: 'circle'
show: false
}],
series: [{
type: 'graph',
layout: 'force',
// symbolSize: 10,
force: {
repulsion: 80,
gravity: 0,
edgeLength: 100,//线条长度
layoutAnimation: true,
},
draggable: true,
roam: false,
nodeScaleRatio: 0,
focusNodeAdjacency: false,
lineStyle: {
normal: {
opacity: 0.5,
width: 1.5,
curveness: 0
}
},
categories: categories,
edgeSymbol: ['', 'arrow'],
// edgeSymbolSize: [80, 10],
edgeLabel: {
normal: {
show: true,
textStyle: {
fontSize: 20
},
formatter(x) {
return x.data.name;
}
}
},
label: {
show: true
},
data: nodeList,
links: links
}]
};
chart.setOption(option);
})
return chart;
});
}
}
});

6
subpages/house/pages/housePortrait/component/graph/graph.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"ec-canvas": "../../../../../../ec-canvas/ec-canvas"
}
}

4
subpages/house/pages/housePortrait/component/graph/graph.wxml

@ -0,0 +1,4 @@
<!--subpages/searchResult/pages/resiInfo/modules/graph/graph.wxml-->
<view class="hotlineComplaints">
<ec-canvas id="hotlineComplaints" canvas-id="hotlineComplaints" ec="{{ ec }}"></ec-canvas>
</view>

20
subpages/house/pages/housePortrait/component/graph/graph.wxss

@ -0,0 +1,20 @@
/* subpages/searchResult/pages/resiInfo/modules/graph/graph.wxss */
ec-canvas {
width: 100%;
height: 100%;
}
.hotlineComplaints {
width: 100%;
height: 618rpx;
position: relative;
}
.hotlineComplaints image{
position: absolute;
width: 100%;
height: 100%;
z-index: 2;
top: 0;
left: 50%;
transform: translate(-50%);
}

204
subpages/house/pages/housePortrait/housePortrait.js

@ -1,12 +1,19 @@
// subpages/house/pages/housePortrait/housePortrait.js
import api from "../../../../utils/api"
import { getComplainList, getShengList, getPunchRecord, getShequList, getshijianList, getxuqiuList, getfuwuList, getMultiLogList } from "../../../../utils/businessRecords.js";
Page({
/**
* 页面的初始数据
*/
data: {
houseId: '',
detail: {},
logs: [],
residIds: [],
ywData: {},
ywVisible: false,
houseName:null
},
/**
@ -14,18 +21,34 @@ Page({
*/
onLoad(options) {
this.setData({
houseId:options.houseId
houseId: options.resiId,
})
this.getData()
},
getData() {
api.getClearHouseDeatilById(this.data.houseId).then((res) => {
this.setData({
detail: res.data
})
}).catch((error) => {
detail: res.data,
houseName: res.data.houseName
})
}).catch((error) => {
});
api.houseResidentChangeRecord({ houseId: this.data.houseId }).then((res) => {
this.setData({
logs: res.data
})
}).catch((error) => {
console.error("发生错误:", error);
});
});
api.getResiList({ homeId: this.data.houseId, pageNo: 1, pageSize: 1000 }).then(res => {
const arr = res.data.list.map(item => {
return item.resiId
})
this.setData({
residIds: arr,
})
this.getTabData()
})
},
/**
* 生命周期函数--监听页面初次渲染完成
@ -76,11 +99,176 @@ Page({
},
gotopage({currentTarget: {dataset}}) {
const {url} = dataset
console.log(url)
gotopage({ currentTarget: { dataset } }) {
const { url } = dataset
wx.navigateTo({
url
})
},
async getTabData() {
if (this.data.residIds.length === 0) {
this.setData({
ywVisible: true,
ywData: { "12345": [], "provinceSurvey": [], "selfSurvey": [], "event": [], "need": [], "serve": [], "punchRecord": [] }
})
return
}
let params1 = {
"residList": this.data.residIds,
"eventType": "3"
}
await getComplainList(params1).then(res => {
this.data.ywData['12345'] = res.data.list.map(item => {
return {
...item,
categorycode: item.categorycode || '--',
eventcontent: item.eventcontent || '--'
}
});
this.setData({
data: this.data.ywData
})
})
let params = {
"residList": this.data.residIds
}
await getShengList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.scope || '--',
eventcontent: item.problemDesc || '--'
};
renamedArray.push(renamedItem);
});
this.data.ywData['provinceSurvey'] = renamedArray;
this.setData({
ywData: this.data.ywData
})
} else {
this.data.ywData['provinceSurvey'] = [];
this.setData({
ywData: this.data.ywData
})
}
})
await getShequList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.scope || '--',
eventcontent: item.problemDesc || '--'
};
renamedArray.push(renamedItem);
});
this.data.ywData['selfSurvey'] = renamedArray;
this.setData({
ywData: this.data.ywData
})
} else {
this.data.ywData['selfSurvey'] = [];
this.setData({
ywData: this.data.ywData
})
}
})
await getshijianList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.categorycode || '--',
eventcontent: item.eventcontent || '--'
};
renamedArray.push(renamedItem);
});
this.data.ywData['event'] = renamedArray;
this.setData({
ywData: this.data.ywData
})
} else {
this.data.ywData['event'] = [];
this.setData({
ywData: this.data.ywData
})
}
})
await getxuqiuList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.parentName || '--',
eventcontent: item.content || '--'
};
renamedArray.push(renamedItem);
});
this.data.ywData['need'] = renamedArray;
this.setData({
ywData: this.data.ywData
})
} else {
this.data.ywData['need'] = [];
this.setData({
ywData: this.data.ywData
})
}
})
await getfuwuList(params).then(res => {
if (res.data && res.data.length > 0) {
let renamedArray = [];
res.data.forEach(item => {
let renamedItem = {
categorycode: item.serviceCategoryKey || '--',
eventcontent: item.serviceName || '--'
};
renamedArray.push(renamedItem);
});
this.data.ywData['serve'] = renamedArray;
this.setData({
ywData: this.data.ywData
})
} else {
this.data.ywData['serve'] = [];
this.setData({
ywData: this.data.ywData
})
}
})
const residIds = this.data.residIds.map(function(item) {
return encodeURIComponent(item);
}).join(',');
const params2 = {
"resiIdList": residIds,
pageNo: 1,
pageSize: 1000,
}
await getMultiLogList(params2).then(res => {
if (res.data && res.data.length > 0) {
let arr = [];
res.data.forEach(item => {
item.list.forEach(item1=>{
arr.push(item1)
})
})
this.data.ywData['punchRecord'] = arr;
this.setData({
ywData: this.data.ywData,
})
} else {
this.data.ywData['punchRecord'] = [];
this.setData({
ywData: this.data.ywData
})
}
})
this.setData({
ywVisible: true
})
},
})

8
subpages/house/pages/housePortrait/housePortrait.json

@ -1,5 +1,9 @@
{
{
"navigationBarTitleText": "房屋详情",
"usingComponents": {
"BusinessRecord": "../../../businessRecord/businessRecord"
"BusinessRecord": "../../../businessRecord/businessRecord",
"no-data": "../../../../components/noData/nodata",
"house-graph":"./component/graph/graph"
}
}

43
subpages/house/pages/housePortrait/housePortrait.wxml

@ -25,25 +25,60 @@
<view class="card">
<view class="title">
<text>关系图谱</text>
<view class="view" bind:tap="gotopage" data-url="/subpages/statistics/pages/problemList/problemList?type={{tabValue}}">
<view class="view" bind:tap="gotopage" data-url="/subpages/addResi/pages/addResi/addResi?type=add">
新增居民
<image mode="widthFix" src="../../../../images/right.png"></image>
</view>
</view>
<house-graph houseId="{{houseId}}" houseName="{{houseName}}"></house-graph>
</view>
<view class="card">
<view class="title">
<text>业务记录</text>
</view>
<BusinessRecord/>
<BusinessRecord wx:if="{{ywVisible}}" ywData="{{ywData}}" />
</view>
<view class="card">
<view class="title">
<text>更新记录</text>
</view>
<ProblemList bind:change="tabChange"/>
<view style="margin-top: 32rpx; padidng:0 12rpx;">
<view class="logsBox" wx:for="{{logs}}" wx:key="{{item.changeTime}}">
<view class="item-dian {{index!=0?'item-dian1':''}}">
<view class="neidian"></view>
</view>
<view class="logs-top">
<view class="logs-top-title">{{item.typeName}}-{{item.operatorName}}</view>
<view class="logs-top-time">{{item.changeTime}}</view>
</view>
<view class="logs-content">
<view class="logs-content-left">
<view>
<text class="logs-content-title">变更前:</text>
<text class="logs-content-txt">{{item.beforeChange}}</text>
</view>
<view>
<text class="logs-content-title">变更后:</text>
<text class="logs-content-txt">{{item.afterChange}}</text>
</view>
</view>
<view class="logs-content-right">
<view>
<text class="logs-content-title">操作人:</text>
<text class="logs-content-txt">{{item.operatorName}}</text>
</view>
<view>
<text class="logs-content-title">备注:</text>
<text class="logs-content-txt">{{item.resiName}}</text>
</view>
</view>
</view>
</view>
</view>
<no-data isShow="{{logs.length===0}}" wx:if="{{logs.length===0}}"></no-data>
</view>
</view>
</view>

82
subpages/house/pages/housePortrait/housePortrait.wxss

@ -17,9 +17,10 @@
display: flex;
align-items: center;
margin-left: -30rpx;
margin-bottom: 39rpx;
margin-bottom: 12rpx;
position: relative;
}
.card .title:before {
content: '';
display: block;
@ -29,6 +30,7 @@
border-radius: 4rpx;
margin-right: 20rpx;
}
.card .title .view {
font-size: 28rpx;
font-weight: 400;
@ -52,7 +54,7 @@
}
.card .line {
display: flex;
display: flex;
flex-wrap: nowrap;
}
@ -62,4 +64,80 @@
color: #999999;
margin-top: 20rpx;
flex: 0 0 30%;
}
.logsBox {
border-left: 3rpx solid #DADEE5;
margin-left: -18rpx;
padding-left: 12rpx;
}
.logs-top {
display: flex;
justify-content: space-between;
position: relative;
top: -32rpx;
padding-left: 12rpx;
}
.logs-top-title {
height: 31rpx;
font-family: PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #333333;
line-height: 41rpx;
}
.logs-top-time {
height: 20rpx;
font-family: PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #BDBDBD;
line-height: 40rpx;
}
.logs-content {
position: relative;
top: -24rpx;
padding-top: 12rpx;
padding-bottom: 24rpx;
display: flex;
justify-content: space-between;
font-family: PingFang SC;
font-weight: 500;
font-size: 30rpx;
color: #999999;
line-height: 52rpx;
}
.logs-content-left {
width: 48%;
}
.logs-content-right {
width: 48%;
}
.logs-content-txt {
color: #333333;
}
.item-dian {
position: relative;
left: -28rpx;
width: 20rpx;
height: 20rpx;
background: #FFFFFF;
border-radius: 50%;
border: 1px solid #3A80E7;
padding: 2rpx;
}
.neidian {
width: 18rpx;
height: 18rpx;
background: #3A80E7;
border-radius: 50%;
}

275
subpages/nohouse/pages/nohouse/nohouse.js

@ -1,72 +1,45 @@
// subpages/nohouse/pages/nohouse/nohouse.js
import api, {
getAllOrgCategoryCount,
getResidentBaseInfo,
getTopTree,
getNextTree,
houseSearch,
allOrgHouseInfo,
getCommunityHouse,
getAgencygridtree
waitCollectHouseList
} from "../../../../utils/api"
Page({
/**
* 页面的初始数据
*/
data: {
ShowTree: false,
searchOrgIdPath:'',
// 联级选择器的列表
angencyList:[],
// 联级字段的名称
fieldName: {
text: 'agencyName',
value: 'agencyId',
children: 'subAgencyList'
text: 'label',
value: 'id',
children: 'children'
},
cascaderFwValue: '',
// 联级选择器的默认值
cascaderValue:'',
dictType:[],
maxLength:5,
showResident:false,
// 显示长度
maxLength:10,
// vue返回的值
cascaderName:null,
//显示菜单
showStreet:false,
searchOrgIdPath:'',
angencyList:[],
fieldName: {
text: 'label',
value: 'id',
children: 'children'
},
maxLength:10,
fieldNames1:{
text: 'lable1',
value: 'value',
children: 'children'
},
params: {
agencyId: '',
orgId: '',
level: 'district',
orgInfo:''
},
params1: {
"searchKey": "",
"pageSize": 50,
"pageNo": 1,
"searchOrgIdPath": "7b6f9a9f9f38d5f9fa7ce94a93d6eb28",
},
level:'',
//查询参数
lowerThreshold:8,//
pageNo: 1,//当前页码
loadMoreType: "more",//more的出发加载更多数据
waitList:[],//数据列表
category:null,
pageSize: 11,//每页的条数
loadMoreVisible:false,//显示更多
nodata:false,
orgId:''
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getAgencygridtree();
// this.getAgencygridtree();
this.getTopTreeData();
this.waitCollectHouseList()
},
/**
@ -117,39 +90,16 @@ params1: {
onShareAppMessage() {
},
handelClickShowTree() {
// 显示菜单
onShowPoint(){
this.setData({
ShowTree: true
});
console.log("1111",this.data.ShowTree)
showStreet:true
})
},
//获取地理位置
getAgencygridtree() {
api.getAgencygridtree().then(res => {
console.log([res.data]),
this.setData({
angencyList: [res.data]
});
if (this.data.angencyList && this.data.angencyList.length > 0) {
console.log('angencyList 已经被赋值:', this.data.angencyList);
// 执行 angencyList 被赋值后的操作
} else {
console.log('angencyList 尚未被赋值');
// 执行 angencyList 未被赋值时的操作
}
}).catch(err => {
console.log,(err);
})
},
onShowPoint(){
this.setData({
showStreet:true
})
},
// 进行树状懒加载
getTopTreeData() {
getTopTree().then(res => {
console.log("222220",res)
// 用map获取子节点的值,并返回给arr,并让children: []为空
const arr = res.data.children.map(item => {
return {
...item,
@ -157,12 +107,16 @@ getTopTreeData() {
}
})
this.setData({
// 将值赋给angencyList
angencyList: [{ ...res.data, children: arr }],
})
})
},
getTreeFun(id, arr, data) {
return arr.map(item => {
// 如果id等于子节点的id直接返回
if (id == item.id) {
return {
...item,
@ -173,21 +127,24 @@ return arr.map(item => {
return {
...item,
children: this.getTreeFun(id, item.children, data),
}
}
return item
})
},
onChange(e) {
// value等于 e.detail.value
const { value, tabIndex, selectedOptions } = e.detail;
console.log("12344",e.detail)
// 判断是否是第二层,并且最后自己的level部位building
if (tabIndex > 0 && selectedOptions[selectedOptions.length - 1].level != 'building') {
const level = selectedOptions[selectedOptions.length - 1].level
// level和id等于value进行作为参数
api.getNextTree({ level, id: value }).then(res => {
console.log("123",res)
if (res.data.length > 0) {
const data = res.data.map(item => {
console.log('111126210',item)
if (item.level != 'building') {
return {
...item,
@ -199,6 +156,7 @@ onChange(e) {
children: null
}
});
const arr = this.getTreeFun(value, this.data.angencyList, data);
this.setData({
angencyList: arr,
@ -218,35 +176,152 @@ this.setData({
});
},
onFinish(e) {
// 从e中获取selectedOptions的值
console.log(e.detail)
const { selectedOptions, value } = e.detail;
// const fieldNameFw = selectedOptions
// .map((option) => option.text || option.name)
// .join('/');
const level = selectedOptions[selectedOptions.length - 1].level
this.setData({
// 将获取的值遍历成jason字符串
cascaderName: e.detail.selectedOptions.map(item => item.label).join(' '),
showStreet: false,
cascaderValue: value,
params: {
...this.data.params,
orgId: value,
level,
},
params1: {
...this.data.params1,
searchOrgIdPath: value,
orgId: value,
level,
},
level:level
});
selectedOptions.forEach(option => {
// 如果该对象有children属性且不为null
if (option.children !== null) {
// 遍历children数组中的每个对象
option.children.forEach(child => {
// 输出每个child对象的id属性
this.setData({
orgId:child.id
})
});
}
});
console.log(this.data.orgId)
console.log(level)
console.log(this.data.params)
if(this.data.cascaderName.length>=this.data.maxLength){
this.setData({
cascaderName :this.data.cascaderName.substring(0, this.data.maxLength) + '...'
})
}
console.log('qwe',this.data.cascaderName)
this.getTableData()
},
onScreen(){
this.setData({
waitList:[],
pageNo:1,
loadMoreType:'more'
})
this.waitCollectHouseList()
},
//未采集信息获得api
waitCollectHouseList(){
console.log(this.data.loadMoreType)
if (this.data.loadMoreType === 'none') {
// 如果已经没有更多数据可以加载,则直接返回
return;
}
let parm={
orgId:this.data.orgId,
pageSize: this.data.pageSize,
pageNo: this.data.pageNo,
orgType:this.data.level
}
api.waitCollectHouseList(parm).then(res => {
console.log(res)
const { data, code } = res;
if(code===0){
const newList =data.list;
if(newList.length===0){
this.setData({
orgId:this.data.cascaderValue,
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none',
});
}else{
this.setData({
waitList: this.data.waitList.concat(newList),
pageNo: this.data.pageNo + 1,
});
}
}
else {
// 请求失败时处理错误信息
console.error('请求失败:', res.data.msg);
}
})
},
// 当到达底部时,触发事件
onScrollToLower(e) {
if (this.data.loadMoreType === 'more') {
this.setData({
// 显示更多加载
loadMoreVisible: true,
})
this.data.pageNo += 1
this.getTableData()
}
},
// 向下分页下来
getTableData: async function () {
try {
this.setData({
// 显示更多加载
loadMoreVisible: true,
// 不显示没有横夺数据了
nodata: false,
//加载更多类型
loadMoreType: "more",
})
let parm = {
pageSize: this.data.pageSize,
pageNo: this.data.pageNo,
orgId:this.data.params.orgId,
orgType:this.data.params.label
}
// 从waitCollectHouseList取返回的值
let {
data,
code,
msg
} = await waitCollectHouseList(parm)
if (code == 0) {
this.setData({
// 获取数据的长度等于页面的显示的长度
loadMoreType: data.list.length === this.data.pageSize ? 'more' : 'none',
// 将返回的值,合并到waitList中
waitList: this.data.waitList.concat(data.list),
})
if (this.data.waitList.length == 0) {
this.setData({
loadMoreVisible: false,
nodata: true
})
}
} else {
this.setData({
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none'
})
}
} catch (err) {
console.log(err);
this.setData({
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none'
})
}
},
})

18
subpages/nohouse/pages/nohouse/nohouse.wxml

@ -5,14 +5,22 @@
<image class="left_image" src="/images/Dropdownbutton.png"></image>
</view>
<view class="button">
<test class="button_text">筛选</test></view>
<test class="button_text" bind:tap="onScreen">筛选</test></view>
</view>
<view class="content">
<view class="form" wx:for="{{houseData}}" wx:key="index" data-item="{{item}}" data-index="{{index}}" bind:tap="toDetail" >
<test class="from_test1">123</test>
<test class="from_test2">></test>
<view class="content" >
<scroll-view scroll-y="{{true}}" class="scroll form_item" lower-threshold="{{ lowerThreshold }}" bindscrolltolower="onScrollToLower">
<view wx:for="{{waitList}}" wx:key="index" data-item="{{item}}" data-index="{{index}}" bind:tap="toDetail" >
<view class="form">
<test class="from_test1">{{item.fullName}}</test>
<test class="from_test2">></test>
</view>
</view>
<load-more loadVisible="{{loadMoreVisible}}" loadType="{{loadMoreType}}"></load-more>
<no-data isShow="{{nodata}}" wx:if="{{nodata}}"></no-data>
</scroll-view>
</view>
<van-popup show="{{ showStreet }}" round position="bottom">
<van-cascader field-names="{{fieldName}}" wx:if="{{showStreet}}" value="{{ cascaderValue }}" title="请选择" options="{{ angencyList}}" bind:close="onClose"
bind:change="onChange" bind:finish="onFinish" />

17
subpages/nohouse/pages/nohouse/nohouse.wxss

@ -98,6 +98,21 @@ line-height: 46rpx;
flex-direction: column;
border-radius: 30rpx;
}
.scroll {
height: calc(100vh - 750rpx);
}
.form_item {
width: 100%;
height: 1000rpx;
display: flex;
flex-wrap: wrap;
flex-direction: row;
/* 可选:添加以下任一属性以调整子元素在主轴上的对齐方式 */
justify-content: space-between;
/* justify-content: space-between; // 子元素间均匀间隔,首尾元素贴边 */
/* justify-content: space-around; */
}
.form{
display: flex;
flex-direction: row;
@ -109,7 +124,7 @@ line-height: 46rpx;
display: flex;
overflow-wrap: break-word;
color: rgba(51,51,51,1);
font-size: 32rpx;
font-size: 33rpx;
font-family: PingFang-SC-Medium;
font-weight: 500;
text-align: left;

471
subpages/resnoinformation/pages/resnoinformation/resnoinformation.js

@ -1,212 +1,192 @@
// subpages/resnoinformation/pages/resnoinformation/resnoinformation.js
import api, {
getAllOrgCategoryCount,
getResidentBaseInfo,
getTopTree,
getNextTree,
houseSearch,
allOrgHouseInfo,
getCommunityHouse,
getAgencygridtree,
waitCollectHouseList,
nonIntResiList,
recorHistory
} from "../../../../utils/api"
var http = require('../../../../utils/request.js')
var fly = require('../../../../utils/request')
// var fly = require('../../../../utils/request')
Page({
/**
* 页面的初始数据
*/
data: {
maxLength:5,
level: 'district',
dicts: {
attentioncrowdList: [], // 注意群体列表
},
selectedAttentionCrowd: '', // 用户选择的注意群体
specialValue:'',//特殊信息的value
cascaderValue:'',
dictType:[],
showResident:false,
cascaderName:null,
showStreet:false,
searchOrgIdPath:'',
angencyList:[],
fieldName: {
text: 'label',
value: 'id',
children: 'children'
},
maxLength:10,
fieldNames1:{
text: 'lable1',
value: 'value',
children: 'children'
},
params: {
agencyId: '',
orgId: '',
level: 'district',
orgInfo:''
},
params1: {
"searchKey": "",
"pageSize": 50,
"pageNo": 1,
"searchOrgIdPath": "7b6f9a9f9f38d5f9fa7ce94a93d6eb28",
},
// 联级选择器的列表
angencyList:[],
// 联级字段的名称
fieldName: {
text: 'label',
value: 'id',
children: 'children'
},
// 联级选择器的默认值
cascaderValue:'',
// 显示长度
maxLength:10,
// vue返回的值
cascaderName:null,
//显示菜单
showStreet:false,
level:'',
//查询参数
lowerThreshold:8,//
pageNo: 1,//当前页码
loadMoreType: "more",//more的出发加载更多数据
waitList:[],//数据列表
pageSize: 10,//每页的条数
loadMoreVisible:false,//显示更多
nodata:false,
orgId:'',
resiCategory:'',
resiCategories: [],
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getAgencygridtree();
this.getDicts()
this.getTopTreeData()
this.WaitResidentsList()
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
},
onShowPoint(){
this.setData({
showStreet:true
// 进行树状懒加载
getTopTreeData() {
getTopTree().then(res => {
console.log(res)
// 用map获取子节点的值,并返回给arr,并让children: []为空
const arr = res.data.children.map(item => {
return {
...item,
children: []
}
})
},
getTopTreeData() {
getTopTree().then(res => {
console.log("222220",res)
const arr = res.data.children.map(item => {
return {
...item,
children: []
}
})
this.setData({
angencyList: [{ ...res.data, children: arr }],
})
this.setData({
// 将值赋给angencyList
angencyList: [{ ...res.data, children: arr }],
})
},
getTreeFun(id, arr, data) {
return arr.map(item => {
if (id == item.id) {
return {
...item,
children: data,
}
}
if (item.children && item.children.length > 0) {
return {
...item,
children: this.getTreeFun(id, item.children, data),
}
}
return item
})
})
},
onChange(e) {
const { value, tabIndex, selectedOptions } = e.detail;
console.log("12344",e.detail)
if (tabIndex > 0 && selectedOptions[selectedOptions.length - 1].level != 'building') {
const level = selectedOptions[selectedOptions.length - 1].level
api.getNextTree({ level, id: value }).then(res => {
console.log("123",res)
if (res.data.length > 0) {
const data = res.data.map(item => {
console.log('111126210',item)
if (item.level != 'building') {
return {
...item,
children: []
}
}
onChange(e) {
// value等于 e.detail.value
const { value, tabIndex, selectedOptions } = e.detail;
// 判断是否是第二层,并且最后自己的level部位building
if (tabIndex > 0 && selectedOptions[selectedOptions.length - 1].level != 'building') {
const level = selectedOptions[selectedOptions.length - 1].level
// level和id等于value进行作为参数
api.getNextTree({ level, id: value }).then(res => {
if (res.data.length > 0) {
const data = res.data.map(item => {
if (item.level != 'building') {
return {
...item,
children: null
children: []
}
});
const arr = this.getTreeFun(value, this.data.angencyList, data);
this.setData({
angencyList: arr,
})
} else {
const arr = this.getTreeFun(value, this.data.angencyList, null);
this.setData({
angencyList: arr,
})
}
})
}
return {
...item,
children: null
}
});
const arr = this.getTreeFun(value, this.data.angencyList, data);
this.setData({
angencyList: arr,
})
} else {
const arr = this.getTreeFun(value, this.data.angencyList, null);
this.setData({
angencyList: arr,
})
}
})
}
},
getTreeFun(id, arr, data) {
return arr.map(item => {
// 如果id等于子节点的id直接返回
if (id == item.id) {
return {
...item,
children: data,
}
}
if (item.children && item.children.length > 0) {
return {
...item,
children: this.getTreeFun(id, item.children, data),
}
}
return item
})
},
onClose() {
onFinish(e) {
// 从e中获取selectedOptions的值
console.log(e.detail)
const { selectedOptions, value } = e.detail;
const level = selectedOptions[selectedOptions.length - 1].level
this.setData({
showStreet: false,
// 将获取的值遍历成jason字符串
cascaderName: e.detail.selectedOptions.map(item => item.label).join(' '),
showStreet: false,
level:level
});
},
getAgencygridtree() {
api.getAgencygridtree().then(res => {
selectedOptions.forEach(option => {
// 如果该对象有children属性且不为null
if (option.children !== null) {
// 遍历children数组中的每个对象
option.children.forEach(child => {
// 输出每个child对象的id属性
this.setData({
orgId:child.id
})
});
}
});
console.log(this.data.orgId)
console.log(level)
console.log(this.data.params)
this.setData({
angencyList: [res.data]
});
}).catch(err => {
console.log,(err);
})
if(this.data.cascaderName.length>=this.data.maxLength){
this.setData({
cascaderName :this.data.cascaderName.substring(0, this.data.maxLength) + '...'
})
}
},
onClose() {
this.setData({
showStreet: false,
});
},
onShowPoint(){
this.setData({
showStreet:true
})
},
onclickResident(){
onclickResident(){
this.setData({
showResident:true,
})
},
async getDicts() {
// 查询字典
async getDicts() {
try {
const requests = [
http.post("sys/dict/data/dictlist", {
@ -214,7 +194,7 @@ Page({
}),
];
const result = await http.post("sys/dict/data/dictlist", { dictType: "attention_crowd" });
console.log(result)
if (result.code === 0) {
this.setData({
"dicts.attentioncrowdList": result.data
@ -225,45 +205,134 @@ Page({
} catch (error) {
console.log("获取字典失败: ", error);
}
console.log()
},
onAttentionCrowdChange(event) {
// 获取字典的索引显示到页面上
onAttentionCrowdChange(event) {
const index = event.detail.value; // 用户选择的注意群体在字典数据数组中的索引
const selectedAttentionCrowd = this.data.dicts.attentioncrowdList[index]; // 根据索引获取选择的注意群体
this.setData({
selectedAttentionCrowd: selectedAttentionCrowd.label // 更新选择的注意群体
selectedAttentionCrowd: selectedAttentionCrowd.label, // 更新选择的注意群体
specialValue:selectedAttentionCrowd.value
});
},
onFinish(e) {
const { selectedOptions, value } = e.detail;
// const fieldNameFw = selectedOptions
// .map((option) => option.text || option.name)
// .join('/');
const level = selectedOptions[selectedOptions.length - 1].level
this.setData({
cascaderName: e.detail.selectedOptions.map(item => item.label).join(' '),
showStreet: false,
cascaderValue: value,
params: {
...this.data.params,
orgId: value,
level,
},
params1: {
...this.data.params1,
searchOrgIdPath: value,
orgId: value,
level,
},
});
if(this.data.cascaderName.length>=this.data.maxLength){
//查询居民信息不完整列表
WaitResidentsList(){
console.log(this.data.loadMoreType)
if (this.data.loadMoreType === 'none') {
// 如果已经没有更多数据可以加载,则直接返回
return;
}
let parm={
orgId:this.data.orgId,
pageSize: this.data.pageSize,
pageNo: this.data.pageNo,
orgType:this.data.level,
resiCategory:this.data.specialValue,
updateId:''
}
api.nonIntResiList(parm).then(res => {
console.log(res.data)
const { data, code } = res;
if(code===0){
const newList =data.list;
if(newList.length===0){
this.setData({
cascaderName :this.data.cascaderName.substring(0, this.data.maxLength) + '...'
})
orgId:this.data.cascaderValue,
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none',
});
}
this.getTopTreeData()
},
else{
this.setData({
waitList: this.data.waitList.concat(newList),
pageNo: this.data.pageNo + 1,
resiCategories: this.data.waitList.map(item => item.resiCategories).flat()
});
}
}
else {
// 请求失败时处理错误信息
console.error('请求失败:', res.data.msg);
}
})
this.setData({
resiCategories: this.data.waitList.map(item => item.resiCategories).flat()
})
},
// 当到达底部时,触发事件
onScrollToLower(e) {
console.log(this.data.loadMoreType)
if (this.data.loadMoreType === 'more') {
this.setData({
// 显示更多加载
loadMoreVisible: true,
})
this.data.pageNo += 1
this.getTableData()
}
console.log(this.data.pageNo, this.data.loadMoreType)
},
// 向下分页下来
getTableData: async function () {
console.log('方法执行了')
try {
this.setData({
loadMoreVisible: true,
nodata: false,
loadMoreType: "more",
})
let parm = {
pageSize: this.data.pageSize,
pageNo: this.data.pageNo,
}
// 从waitCollectHouseList取返回的值
let {
data,
code,
msg
} = await nonIntResiList(parm)
if (code == 0) {
this.setData({
// 获取数据的长度等于页面的显示的长度
loadMoreType: data.list.length === this.data.pageSize ? 'more' : 'none',
// 将返回的值,合并到waitList中
waitList: this.data.waitList.concat(data.list),
})
if (this.data.waitList.length == 0) {
this.setData({
loadMoreVisible: false,
nodata: true
})
}
} else {
this.setData({
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none'
})
}
} catch (err) {
console.log(err);
this.setData({
loadMoreVisible: false,
nodata: true,
loadMoreType: 'none'
})
}
},
//筛选按钮
onScreen(){
this.setData({
waitList:[],
pageNo:1,
loadMoreType:'more'
})
this.WaitResidentsList()
}
})

56
subpages/resnoinformation/pages/resnoinformation/resnoinformation.wxml

@ -11,43 +11,43 @@
</view>
</picker>
<view class="card_three">
<text class="test3">筛选</text>
<text class="test3" bind:tap="onScreen">筛选</text>
</view>
</view>
<view class="context">
<scroll-view class="scroll" scroll-y="{{true}}" lower-threshold="{{ lowerThreshold }}" bindscrolltolower="onScrollToLower">
<view class="card_top">
<view class="line">
<view class="information">
<scroll-view class="scroll" scroll-y="{{true}}" lower-threshold="{{lowerThreshold}}" bindscrolltolower="onScrollToLower">
<view class="card_top" wx:for="{{waitList}}" :wx:key="{{index}}" bind:tap="toResiDetail" data-resiId="{{item.resiId}}">
<!-- 根据您的需求添加其他内容 -->
<view class="line">
<view class="information">
<view class="name">
<text lines="1" class="text_1">杨*冬</text>
</view>
<view class="lable">
<text class="text_2">失眠</text>
</view>
<text lines="1" class="text_1">{{item.resiName}}</text>
</view>
<view class="lable" wx:for="{{item.resiCategories}}" wx:for-item="itemNR" wx:for-index="index" wx:key="index">
<text class="text_2" >{{itemNR.categoryName}}</text>
</view>
</view>
<view class="information_1">
<text lines="1" class="text_3">信息完整度:</text>
<text lines="1" class="text_4">50%</text>
</view>
</view>
<view class="phone">
<text lines="1" class="test_5">电话:</text>
<text lines="1" class="text_6">123456</text>
</view>
<view class="idCard">
<text lines="1" class="text_7">证件号:</text>
<text lines="1" class="text_8">1717</text>
</view>
<view class="address">
<text lines="1" class="text_9">地址:</text>
<text lines="1" class="text_10">{{item.agencyName || ''}} {{item.homeName || ''}}</text>
</view>
<text lines="1" class="text_3">信息完整度:</text>
<text lines="1" class="text_4">{{item.synthesizeScore}}</text>
</view>
</view>
<view class="phone">
<text lines="1" class="test_5">电话:</text>
<text lines="1" class="text_6">{{item.mobile}}</text>
</view>
<view class="idCard">
<text lines="1" class="text_7">证件号:</text>
<text lines="1" class="text_8">{{item.idNum}}</text>
</view>
<view class="address">
<text lines="1" class="text_9">地址:</text>
<text lines="1" class="text_10">{{item.homeFullName}}</text>
</view>
</scroll-view>
</view>
</scroll-view>
</view>
<van-popup show="{{ showStreet }}" round position="bottom">
<van-cascader field-names="{{fieldName}}" wx:if="{{showStreet}}" value="{{ cascaderValue }}" title="请选择" options="{{ angencyList}}" bind:close="onClose"

25
subpages/resnoinformation/pages/resnoinformation/resnoinformation.wxss

@ -98,19 +98,20 @@ page{
}
.context{
width: auto;
height: auto;
height:1000rpx ;
display: flex;
flex-direction: column;
background: white;
margin: 20rpx;
background: rgb(255, 255, 255);
margin: 25rpx;
}
.scroll {
height: 1000rpx;
}
.card_top{
display: flex;
flex-direction: column;
margin: 20rpx;
}
.line {
width: 533rpx;
height: 29rpx;
@ -131,7 +132,7 @@ page{
font-size: 0rpx;
font-family: PingFang-SC-Medium;
font-weight: 500;
text-align: left;
text-align: center;
white-space: nowrap;
line-height: 40rpx;
margin-right: 20rpx;
@ -139,11 +140,12 @@ page{
}
.lable{
display: flex;
width: 100rpx;
height: 36rpx;
width: 120rpx;
height: 40rpx;
flex-direction: row;
justify-content: center;
align-items: center;
margin-right: 20rpx;
background: #f6f6f6;
}
.text_2{
@ -157,6 +159,11 @@ page{
text-align: left;
white-space: nowrap;
line-height: 42rpx;
margin-bottom: 10rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
}
.text_1 {
width: 83rpx;

317
subpages/searchResult/pages/resiInfo/component/graph/graph.js

@ -1,41 +1,36 @@
import * as echarts from '../../../../../../ec-canvas/ec-canvas';
import api from "../../../../../../utils/api";
import * as echarts from '../../../../../../ec-canvas/echarts';
import {
getFamilyRelationshipList
} from "../../../../../../utils/api";
var chart;
var listdata = [];
var links = [];
var legendes = ["手机IMSI", "人脸ID", "车牌号码", "人脸ID"];
var texts = [];
// function initChart(canvas, width, height, dpr) {
// chart = echarts.init(canvas, null, {
// width: width,
// height: height,
// devicePixelRatio: dpr // 像素比
// });
// canvas.setChart(chart);
// return chart;
// }
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
Component({
properties: {
resid: {
resiId: {
type: String,
value: '',
observer(val) {
this.getData()
}
}
},
data: {
ec: {
lazyLoad: true
// onInit: initChart
},
tabList: [{
label: "问题突出类别",
value: 1
}, {
label: '行业领域分析',
value: 2
}],
tabValue: 1
},
lifetimes: {
ready() {
console.log(this.data.resid);
this.getData()
}
},
@ -43,99 +38,109 @@ Component({
getData() {
this.selectComponent('#hotlineComplaints').init((canvas, width, height, dpr) => {
// chart = echarts.init(canvas, null, {
// width: width,
// height: height,
// devicePixelRatio: dpr // 像素比
// });
// canvas.setChart(chart);
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // 像素比
});
canvas.setChart(chart);
let params = {
type: 0,
resid: this.data.resiId
type: "0",
id: this.data.resiId
}
api.getFamilyRelationshipList(params).then(({
getFamilyRelationshipList(params).then(({
data
}) => {
console.log(data);
var phoneNum = {
"手机号:13856978256": "13856978256",
"手机号:13998745632": "13998745632",
"手机号:18812345678": "18812345678",
"手机号:16812345678": "16812345678",
"手机号:13856971111": "13856978256",
"手机号:13998742222": "13998745632",
"手机号:18812344444": "18812345678",
"手机号:16812343333": "16812345678",
"手机号:13878978256": "13856978256",
"手机号:137895632": "13998745632",
};
var phoneIMSI = ["次数:1,匹配度:6%", "次数:3,匹配度:30%", "次数:2,匹配度:26%",
"次数:2,匹配度:26%", "次数:2,匹配度:26%", "次数:2,匹配度:26%",
"匹配手机号码", "匹配手机号码", "匹配手机号码", "匹配手机号码"
]
var carNum = {
"车牌号码:豫AJ9685": "豫AJ9685",
"车牌号码:豫AG5123": "豫AG5123",
"车牌号码:豫AG6822": "豫AG6822",
"车牌号码:豫CJ9685": "豫AJ9685",
"车牌号码:豫AD5123": "豫AG5123",
"车牌号码:豫AT6822": "豫AG6822",
"车牌号码:豫AG6622": "豫AG6822",
"车牌号码:豫CJ9885": "豫AJ9685",
let index = data.findIndex(item => item.id == this.data.resiId);
if (index !== -1) {
const [item] = data.splice(index, 1);
data.unshift(item);
}
const relationShipCar = ["匹配车牌号码", "匹配车牌号码", "匹配车牌号码", "匹配车牌号码", "匹配车牌号码", "匹配车牌号码", "匹配车牌号码", "匹配车牌号码", "匹配车牌号码"]
this.setDataPhone(phoneNum, 0);
this.setDataCar(carNum, 2);
this.setDataPerson(mainRelationShip, 3);
this.setLinkData(phoneNum, phoneIMSI, legendes[3]);
this.setLinkData(carNum, relationShipCar, legendes[3]);
let option = {
title: {
text: "关系图绑定点击事件",
top: "top",
left: "left",
textStyle: {
color: '#000000'
let nodeList = data.map((item, index) => {
let symbolUrl = '';
if (item.type === 1) {
symbolUrl = 'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/a6cdfe6f699040f58fd8b2c10486b41d.png';
} else {
// 如果 type 不等于 1,则根据 gender 进行判断
if (item.gender === '1') {
// 如果 gender 等于 1,则根据 age 进行进一步的判断
symbolUrl = item.age > 18 && item.age < 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/1e21790833b04e9abe61e2a8f40446cb.png' :
item.age < 18 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/62c2b6a1ce834f8dae081b562b2579b9.png' :
item.age > 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/bd586a4e7d0f4b3aa68c79067dfe1428.png' :
'';
} else if (item.gender === '2') {
// 如果 gender 等于 2,则根据 age 进行进一步的判断
symbolUrl = item.age > 18 && item.age < 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/3b44e3495dcd4d96a3c07baad1bd7c5e.png' :
item.age < 18 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/0c38251bba644a6b8e4a925aea74c9a7.png' :
item.age > 60 ?
'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/2465ff7633a94413bf4ed2aa778c2765.png' :
'';
}else{
symbolUrl = 'image://https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/epmet/test/internal/20240402/1e21790833b04e9abe61e2a8f40446cb.png'
}
}
return {
'name': item.name,
'id': index + 1,
'category': 0,
'symbolSize': item.id == this.data.resiId ? 50 : 30,
'symbol': symbolUrl,
label: {
"position": "bottom"
}
};
});
let links = data.map((item, index) => ({
"source": 0,
"target": index+1,
"name": item.houseHolderRel||'暂不清楚',
"label": {
"align": "center",
"fontSize": 12,
"color":"#9cbbf9"
},
tooltip: {
formatter: '{b}'
"lineStyle": {
"color": "#9cbbf9"
}
}))
links.splice(links.length-1,1)
let categories = data.map((item, index) => ({
"name":item.houseHolderRel||'暂不清楚',
"id":index+1,
"itemStyle": {
"color": '#9cbbf9'
},
}))
console.log(nodeList,links,categories);
backgroundColor: '#f7f7f7',
legend: {
data: legendes,
textStyle: {
color: '#000000'
},
icon: 'circle',
type: 'scroll',
orient: 'vertical',
left: 10,
top: 20,
bottom: 20,
itemWidth: 10,
itemHeight: 10
},
animationDuration: 1000,
animationEasingUpdate: 'quinticInOut',
var option = {
legend: [{
// selectedMode: 'single',
// icon: 'circle'
show: false
}],
series: [{
type: 'graph',
layout: 'force',
// symbolSize: 10,
force: {
repulsion: 80,
gravity: 0,
edgeLength: 150,
edgeLength: 100,//线条长度
layoutAnimation: true,
},
data: listdata,
links: links,
categories: texts,
draggable: true,
roam: false,
nodeScaleRatio: 0,
nodeScaleRatio: 0,
focusNodeAdjacency: false,
lineStyle: {
normal: {
@ -144,116 +149,32 @@ Component({
curveness: 0
}
},
label: {
normal: {
show: true,
position: 'inside',
textStyle: {
color: '#000000',
fontWeight: 'normal',
fontSize: "12" //字体大小
},
formatter: function (params) {
return params.data.showName
},
fontSize: 18,
fontStyle: '600',
}
},
categories: categories,
edgeSymbol: ['', 'arrow'],
// edgeSymbolSize: [80, 10],
edgeLabel: {
normal: {
show: true,
textStyle: {
fontSize: 12
fontSize: 20
},
formatter: "{c}"
formatter(x) {
return x.data.name;
}
}
}
}],
color: ['#e8b842', '#41b1ef', '#667aed', '#347fbb', '#772cdc',
'#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0'
]
}
},
label: {
show: true
},
data: nodeList,
links: links
}]
};
chart.setOption(option);
})
return chart;
});
},
setDataPhone(json, n) {
var i = 0;
for (var p in json) {
listdata.push({
x: i * 50,
y: size + i * 10,
"name": p,
"showName": json[p],
"symbol": 'image://' + "/asset/get/s/data-1561621386236-0IGCc48l6.png",
"symbolSize": size,
"category": n,
"draggable": "false",
formatter: function (params) {
return params.data.showName
},
label: {
position: 'bottom'
}
});
i++;
}
},
setDataCar(json, n) {
var i = 0;
for (var p in json) {
listdata.push({
x: i * 50,
y: size + i * 10,
"name": p,
"showName": json[p],
"symbol": 'image://' + "/asset/get/s/data-1561621379686-rZHoryrBV.png",
"symbolSize": size,
"category": n,
"draggable": "false",
formatter: function (params) {
return params.data.showName
},
label: {
position: 'bottom'
}
});
i++;
}
},
setLinkData(json, relarr, title) {
if (relarr !== "") {
var i = 0;
for (var p in json) {
links.push({
"source": p,
"target": title,
"value": relarr[i],
lineStyle: {
normal: {
// text: relarr[i],
color: 'source'
}
}
});
i++;
}
} else {
for (var p2 in json) {
links.push({
"source": p2,
"target": title,
"value": "",
lineStyle: {
normal: {
color: 'source'
}
}
});
}
}
}
}
});

2
subpages/searchResult/pages/resiInfo/component/graph/graph.wxml

@ -1,4 +1,4 @@
<!--subpages/searchResult/pages/resiInfo/modules/graph/graph.wxml-->
<view class="hotlineComplaints">
<ec-canvas id="hotlineComplaints" canvas-id="hotlineComplaints" ec="{{ ec }}"></ec-canvas>
</view>
</view>

13
subpages/searchResult/pages/resiInfo/component/graph/graph.wxss

@ -5,5 +5,16 @@ ec-canvas {
}
.hotlineComplaints {
width: 100%;
height: 318rpx;
height: 618rpx;
position: relative;
}
.hotlineComplaints image{
position: absolute;
width: 100%;
height: 100%;
z-index: 2;
top: 0;
left: 50%;
transform: translate(-50%);
}

33
subpages/searchResult/pages/resiInfo/resiInfo.js

@ -1,21 +1,16 @@
// subpages/searchResult/pages/resiInfo/resiInfo.js
<<<<<<< HEAD
=======
import api from "../../../../utils/api"
var http = require('../../../../utils/request.js')
const QQMapWX = require('../../../../utils/qqmap-wx-jssdk')
const app = getApp()
var timerId = null;
>>>>>>> dfe56009a6df6ddb9f15a1825578dabd99db092e
Page({
/**
* 页面的初始数据
*/
data: {
<<<<<<< HEAD
=======
checkPassword:false,
form: {},
resiId: "",
@ -559,6 +554,7 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad(options) {
<<<<<<< HEAD
<<<<<<< HEAD
},
@ -566,6 +562,10 @@ Page({
=======
this.updateTime();
timerId = setInterval(this.updateTime, 1000);
=======
// this.updateTime();
// timerId = setInterval(this.updateTime, 1000);
>>>>>>> c9cc8f228e3cb654f743b0c7fbabb7d1f813f1c2
if (options.resiId) {
this.setData({
resiId: options.resiId,
@ -585,15 +585,15 @@ Page({
})
// this.getLastLogs()
},
updateTime() {
let date = new Date();
let hours = date.getHours().toString().padStart(2, '0');
let minutes = date.getMinutes().toString().padStart(2, '0');
let seconds = date.getSeconds().toString().padStart(2, '0');
this.setData({
currentTime: `${hours}:${minutes}:${seconds}`
});
},
// updateTime() {
// let date = new Date();
// let hours = date.getHours().toString().padStart(2, '0');
// let minutes = date.getMinutes().toString().padStart(2, '0');
// let seconds = date.getSeconds().toString().padStart(2, '0');
// this.setData({
// currentTime: `${hours}:${minutes}:${seconds}`
// });
// },
getResiInfo: async function () {
try {
let res = await api.getResiInfo(this.data.resiId);
@ -915,8 +915,7 @@ Page({
url: '/subpages/statistics/pages/residentPortrait2/residentPortrait?id=' + this.data.resiId,
})
},
handelClickTab: function(e) {
handelClickTab(e) {
wx.pageScrollTo({
selector: `#${e.currentTarget.dataset.item.id}`,
duration:300

7
subpages/searchResult/pages/resiInfo/resiInfo.wxml

@ -3,7 +3,6 @@
<text>subpages/searchResult/pages/resiInfo/resiInfo.wxml</text>
=======
<!-- 基本信息 -->
<resi-graph resiId="{{resiId}}"></resi-graph>
<view class="card">
<view class="top">
<view class="left">
@ -87,6 +86,7 @@
</view>
</view>
</view>
<view class="card" wx:for="{{expandList}}" wx:key="index" id="{{item.scrollId}}">
<view class="title">{{item.title}}</view>
<view class="info" wx:for="{{item.children}}" wx:for-index="indexC" wx:key="indexC" wx:for-item="itemC">
@ -96,8 +96,9 @@
</view>
</view>
</view>
<view class="card">
<view class="title">居民图谱</view>
<view class="card" id="graph">
<view class="title">关系图谱</view>
<resi-graph resiId="{{resiId}}"></resi-graph>
</view>
<!-- 走访打卡 -->

26
utils/api.js

@ -71,7 +71,11 @@ module.exports = {
houseSearch,
allOrgHouseInfo,
getLogList,
updatetResi
updatetResi,
getResiList,
houseResidentChangeRecord,
waitCollectHouseList,
nonIntResiList
}
// 获取公钥
@ -355,7 +359,6 @@ function updatetResi(parm) {
// 社区查询-房屋查询
function houseSearch(parm) {
console.log('parmparm:', parm)
return fly.post(`actual/base/communityHouse/houseSearch`,parm)
}
// 社区查询-房屋概览查询
@ -370,9 +373,28 @@ function getTopTree(parm) {
function getNextTree(parm) {
return fly.get(`actual/base/communityBuilding/tree/nextTreeNode`,parm)
}
// 获取打卡记录
function getLogList(parm) {
return fly.get(`actual/base/clockRecords/logList`,parm)
}
// 获取房屋居民id
function getResiList(parm) {
return fly.post(`actual/base/residentBaseInfo/page`,parm)
}
// 获取更新记录
function houseResidentChangeRecord(parm) {
return fly.get(`actual/base/peopleRoomOverview/houseResidentChangeRecord`,parm)
}
//获取待采集房屋列表
function waitCollectHouseList(parm){
return fly.get(`actual/base/communityHouse/resiAndHouseCollect/waitCollectHouseList`,parm)
}
//信息不完整居民列表
function nonIntResiList(parm){
return fly.get(`actual/base/residentIntegrity/resiCategoryStats/nonIntResiList`,parm)
}

4
utils/businessRecords.js

@ -42,4 +42,8 @@ export function getfuwuList(params) {
// 打卡记录
export function getPunchRecord(params) {
return request.post(`actual/base/peopleRoomOverview/provincialSatisfactionPageList`, params)
}
// 打卡记录
export function getMultiLogList(params) {
return request.get(`actual/base/clockRecords/multiLogList`, params)
}

7
utils/config.js

@ -8,8 +8,13 @@ module.exports = {
// return 'https://epmet-preview.elinkservice.cn/api/' // 演示环境
// return 'http://192.168.1.144/api/' //测试环境
return 'http://219.146.91.110:30801/api/'
}
// return 'https://epmet-preview.elinkservice.cn/api/' // 演示环境
// return 'http://192.168.1.144/api/' //测试环境
// return 'http://219.146.91.110:30801/api/'
//return http://219.146.91.110:30801/api //外网
}
function getToken() {
return wx.getStorageSync("token");

Loading…
Cancel
Save