This commit is contained in:
2025-08-21 11:23:54 +08:00
commit abf7f3c799
530 changed files with 60239 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
static/aidex/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
static/aidex/login-bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -0,0 +1,363 @@
(function(window, document, exportName, undefined) {
"use strict";
var isMultiTouch = false;
var multiTouchStartPos;
var eventTarget;
var touchElements = {};
// polyfills
if(!document.createTouch) {
document.createTouch = function(view, target, identifier, pageX, pageY, screenX, screenY, clientX, clientY) {
// auto set
if(clientX == undefined || clientY == undefined) {
clientX = pageX - window.pageXOffset;
clientY = pageY - window.pageYOffset;
}
return new Touch(target, identifier, {
pageX: pageX,
pageY: pageY,
screenX: screenX,
screenY: screenY,
clientX: clientX,
clientY: clientY
});
};
}
if(!document.createTouchList) {
document.createTouchList = function() {
var touchList = new TouchList();
for (var i = 0; i < arguments.length; i++) {
touchList[i] = arguments[i];
}
touchList.length = arguments.length;
return touchList;
};
}
/**
* create an touch point
* @constructor
* @param target
* @param identifier
* @param pos
* @param deltaX
* @param deltaY
* @returns {Object} touchPoint
*/
function Touch(target, identifier, pos, deltaX, deltaY) {
deltaX = deltaX || 0;
deltaY = deltaY || 0;
this.identifier = identifier;
this.target = target;
this.clientX = pos.clientX + deltaX;
this.clientY = pos.clientY + deltaY;
this.screenX = pos.screenX + deltaX;
this.screenY = pos.screenY + deltaY;
this.pageX = pos.pageX + deltaX;
this.pageY = pos.pageY + deltaY;
}
/**
* create empty touchlist with the methods
* @constructor
* @returns touchList
*/
function TouchList() {
var touchList = [];
touchList.item = function(index) {
return this[index] || null;
};
// specified by Mozilla
touchList.identifiedTouch = function(id) {
return this[id + 1] || null;
};
return touchList;
}
/**
* Simple trick to fake touch event support
* this is enough for most libraries like Modernizr and Hammer
*/
function fakeTouchSupport() {
var objs = [window, document.documentElement];
var props = ['ontouchstart', 'ontouchmove', 'ontouchcancel', 'ontouchend'];
for(var o=0; o<objs.length; o++) {
for(var p=0; p<props.length; p++) {
if(objs[o] && objs[o][props[p]] == undefined) {
objs[o][props[p]] = null;
}
}
}
}
/**
* we don't have to emulate on a touch device
* @returns {boolean}
*/
function hasTouchSupport() {
return ("ontouchstart" in window) || // touch events
(window.Modernizr && window.Modernizr.touch) || // modernizr
(navigator.msMaxTouchPoints || navigator.maxTouchPoints) > 2; // pointer events
}
/**
* disable mouseevents on the page
* @param ev
*/
function preventMouseEvents(ev) {
// 注释启用默认事件
// ev.preventDefault();
// ev.stopPropagation();
}
/**
* only trigger touches when the left mousebutton has been pressed
* @param touchType
* @returns {Function}
*/
function onMouse(touchType) {
return function(ev) {
// prevent mouse events
preventMouseEvents(ev);
if (ev.which !== 1) {
return;
}
// The EventTarget on which the touch point started when it was first placed on the surface,
// even if the touch point has since moved outside the interactive area of that element.
// also, when the target doesnt exist anymore, we update it
if (ev.type == 'mousedown' || !eventTarget || (eventTarget && !eventTarget.dispatchEvent)) {
eventTarget = ev.target;
}
// shiftKey has been lost, so trigger a touchend
if (isMultiTouch && !ev.shiftKey) {
triggerTouch('touchend', ev);
isMultiTouch = false;
}
triggerTouch(touchType, ev);
// we're entering the multi-touch mode!
if (!isMultiTouch && ev.shiftKey) {
isMultiTouch = true;
multiTouchStartPos = {
pageX: ev.pageX,
pageY: ev.pageY,
clientX: ev.clientX,
clientY: ev.clientY,
screenX: ev.screenX,
screenY: ev.screenY
};
triggerTouch('touchstart', ev);
}
// reset
if (ev.type == 'mouseup') {
multiTouchStartPos = null;
isMultiTouch = false;
eventTarget = null;
}
}
}
/**
* trigger a touch event
* @param eventName
* @param mouseEv
*/
function triggerTouch(eventName, mouseEv) {
var touchEvent = document.createEvent('Event');
touchEvent.initEvent(eventName, true, true);
touchEvent.altKey = mouseEv.altKey;
touchEvent.ctrlKey = mouseEv.ctrlKey;
touchEvent.metaKey = mouseEv.metaKey;
touchEvent.shiftKey = mouseEv.shiftKey;
touchEvent.touches = getActiveTouches(mouseEv, eventName);
touchEvent.targetTouches = getActiveTouches(mouseEv, eventName);
touchEvent.changedTouches = getChangedTouches(mouseEv, eventName);
eventTarget.dispatchEvent(touchEvent);
}
/**
* create a touchList based on the mouse event
* @param mouseEv
* @returns {TouchList}
*/
function createTouchList(mouseEv) {
var touchList = new TouchList();
if (isMultiTouch) {
var f = TouchEmulator.multiTouchOffset;
var deltaX = multiTouchStartPos.pageX - mouseEv.pageX;
var deltaY = multiTouchStartPos.pageY - mouseEv.pageY;
touchList.push(new Touch(eventTarget, 1, multiTouchStartPos, (deltaX*-1) - f, (deltaY*-1) + f));
touchList.push(new Touch(eventTarget, 2, multiTouchStartPos, deltaX+f, deltaY-f));
} else {
touchList.push(new Touch(eventTarget, 1, mouseEv, 0, 0));
}
return touchList;
}
/**
* receive all active touches
* @param mouseEv
* @returns {TouchList}
*/
function getActiveTouches(mouseEv, eventName) {
// empty list
if (mouseEv.type == 'mouseup') {
return new TouchList();
}
var touchList = createTouchList(mouseEv);
if(isMultiTouch && mouseEv.type != 'mouseup' && eventName == 'touchend') {
touchList.splice(1, 1);
}
return touchList;
}
/**
* receive a filtered set of touches with only the changed pointers
* @param mouseEv
* @param eventName
* @returns {TouchList}
*/
function getChangedTouches(mouseEv, eventName) {
var touchList = createTouchList(mouseEv);
// we only want to return the added/removed item on multitouch
// which is the second pointer, so remove the first pointer from the touchList
//
// but when the mouseEv.type is mouseup, we want to send all touches because then
// no new input will be possible
if(isMultiTouch && mouseEv.type != 'mouseup' &&
(eventName == 'touchstart' || eventName == 'touchend')) {
touchList.splice(0, 1);
}
return touchList;
}
/**
* show the touchpoints on the screen
*/
function showTouches(ev) {
var touch, i, el, styles;
// first all visible touches
for(i = 0; i < ev.touches.length; i++) {
touch = ev.touches[i];
el = touchElements[touch.identifier];
if(!el) {
el = touchElements[touch.identifier] = document.createElement("div");
document.body.appendChild(el);
}
styles = TouchEmulator.template(touch);
for(var prop in styles) {
el.style[prop] = styles[prop];
}
}
// remove all ended touches
if(ev.type == 'touchend' || ev.type == 'touchcancel') {
for(i = 0; i < ev.changedTouches.length; i++) {
touch = ev.changedTouches[i];
el = touchElements[touch.identifier];
if(el) {
el.parentNode.removeChild(el);
delete touchElements[touch.identifier];
}
}
}
}
/**
* TouchEmulator initializer
*/
function TouchEmulator() {
if (hasTouchSupport()) {
return;
}
fakeTouchSupport();
window.addEventListener("mousedown", onMouse('touchstart'), true);
window.addEventListener("mousemove", onMouse('touchmove'), true);
window.addEventListener("mouseup", onMouse('touchend'), true);
window.addEventListener("mouseenter", preventMouseEvents, true);
window.addEventListener("mouseleave", preventMouseEvents, true);
window.addEventListener("mouseout", preventMouseEvents, true);
window.addEventListener("mouseover", preventMouseEvents, true);
// it uses itself!
window.addEventListener("touchstart", showTouches, true);
window.addEventListener("touchmove", showTouches, true);
window.addEventListener("touchend", showTouches, true);
window.addEventListener("touchcancel", showTouches, true);
}
// start distance when entering the multitouch mode
TouchEmulator.multiTouchOffset = 75;
/**
* css template for the touch rendering
* @param touch
* @returns object
*/
TouchEmulator.template = function(touch) {
var size = 0;
var transform = 'translate('+ (touch.clientX-(size/2)) +'px, '+ (touch.clientY-(size/2)) +'px)';
return {
position: 'fixed',
left: 0,
top: 0,
background: '#fff',
border: 'solid 1px #999',
opacity: .6,
borderRadius: '100%',
height: size + 'px',
width: size + 'px',
padding: 0,
margin: 0,
display: 'block',
overflow: 'hidden',
pointerEvents: 'none',
webkitUserSelect: 'none',
mozUserSelect: 'none',
userSelect: 'none',
webkitTransform: transform,
mozTransform: transform,
transform: transform,
zIndex: 100
}
};
// export
if (typeof define == "function" && define.amd) {
define(function() {
return TouchEmulator;
});
} else if (typeof module != "undefined" && module.exports) {
module.exports = TouchEmulator;
} else {
window[exportName] = TouchEmulator;
}
})(window, document, "TouchEmulator");

View File

@@ -0,0 +1,463 @@
@font-face {
font-family: "iconfont"; /* Project id 2874232 */
src: url('~@/static/iconfont/iconfont.woff2?t=1636514770782') format('woff2'),
url('~@/static/iconfont/iconfont.woff?t=1636514770782') format('woff'),
url('~@/static/iconfont/iconfont.ttf?t=1636514770782') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-minus-circle-fill:before {
content: "\e844";
}
.icon-close-circle-fill:before {
content: "\e845";
}
.icon-plus-circle-fill:before {
content: "\e846";
}
.icon-tupian:before {
content: "\e8ba";
}
.icon-xiangji:before {
content: "\e8bc";
}
.icon-zengjia:before {
content: "\e8c0";
}
.icon-youhuiquan:before {
content: "\e8c1";
}
.icon-quanbudingdan:before {
content: "\e600";
}
.icon-moban:before {
content: "\e6bb";
}
.icon-hetongqianzi:before {
content: "\e615";
}
.icon-gongwujiedai:before {
content: "\e609";
}
.icon-kaoqinchuqin:before {
content: "\e8d0";
}
.icon-haocaifei:before {
content: "\e6bc";
}
.icon-huiyishi1:before {
content: "\e662";
}
.icon-baoming1:before {
content: "\e632";
}
.icon-jiabanshenqing:before {
content: "\e651";
}
.icon-hetongxieyi:before {
content: "\e64b";
}
.icon-jiabanshenpi:before {
content: "\e774";
}
.icon-yongche:before {
content: "\e601";
}
.icon-baoming:before {
content: "\e664";
}
.icon-qingjia:before {
content: "\e624";
}
.icon-tianshenpi:before {
content: "\eb67";
}
.icon-icon_yingyongguanli:before {
content: "\eb8f";
}
.icon-xingzhuang-xingxing:before {
content: "\eb9a";
}
.icon-gongnengdingyi:before {
content: "\ebb7";
}
.icon-kongxinduigou:before {
content: "\ebe5";
}
.icon-tianjia:before {
content: "\e620";
}
.icon-chucha:before {
content: "\e60f";
}
.icon-gongdan:before {
content: "\ec37";
}
.icon-daibanshixiang2:before {
content: "\ec4e";
}
.icon-bianjisekuai:before {
content: "\ec7c";
}
.icon-hetongguanli:before {
content: "\e625";
}
.icon-huiyishi:before {
content: "\e608";
}
.icon-ribao:before {
content: "\e835";
}
.icon-banjieshiwu:before {
content: "\e602";
}
.icon-daibanshiwu:before {
content: "\e603";
}
.icon-kaoheguanli:before {
content: "\e606";
}
.icon-shiyanshikaohe:before {
content: "\e607";
}
.icon-baoxiao:before {
content: "\e605";
}
.icon-shenpi:before {
content: "\e626";
}
.icon-baoxiaodan:before {
content: "\e61b";
}
.icon-xinwen:before {
content: "\e639";
}
.icon-tongzhi:before {
content: "\e648";
}
.icon-fujian:before {
content: "\e655";
}
.icon-msg-system:before {
content: "\e6b9";
}
.icon-daibanshixiang:before {
content: "\e65d";
}
.icon-tongzhi1:before {
content: "\e64a";
}
.icon-daibanshixiang1:before {
content: "\e6ba";
}
.icon-search:before {
content: "\e6b4";
}
.icon-view-list:before {
content: "\e6b5";
}
.icon-headset-one:before {
content: "\e6b6";
}
.icon-list-checkbox:before {
content: "\e6b7";
}
.icon-jiyika:before {
content: "\e6b8";
}
.icon-chart-histogram-two:before {
content: "\e679";
}
.icon-audit:before {
content: "\e67a";
}
.icon-check-one:before {
content: "\e67b";
}
.icon-bookmark-one:before {
content: "\e67c";
}
.icon-a-comment1:before {
content: "\e67d";
}
.icon-avatar:before {
content: "\e67e";
}
.icon-collection-files:before {
content: "\e67f";
}
.icon-copy-one:before {
content: "\e680";
}
.icon-add:before {
content: "\e681";
}
.icon-currency:before {
content: "\e682";
}
.icon-edit-two:before {
content: "\e683";
}
.icon-finance:before {
content: "\e684";
}
.icon-find:before {
content: "\e685";
}
.icon-folder-plus:before {
content: "\e686";
}
.icon-link-break:before {
content: "\e687";
}
.icon-financing-one:before {
content: "\e688";
}
.icon-help:before {
content: "\e689";
}
.icon-chart-pie:before {
content: "\e68a";
}
.icon-id-card:before {
content: "\e68b";
}
.icon-a-lock1:before {
content: "\e68c";
}
.icon-list:before {
content: "\e68d";
}
.icon-lock:before {
content: "\e68e";
}
.icon-key:before {
content: "\e68f";
}
.icon-a-key1:before {
content: "\e690";
}
.icon-me:before {
content: "\e691";
}
.icon-equalizer:before {
content: "\e692";
}
.icon-comment:before {
content: "\e693";
}
.icon-log:before {
content: "\e694";
}
.icon-mall-bag:before {
content: "\e695";
}
.icon-list-view:before {
content: "\e696";
}
.icon-send:before {
content: "\e697";
}
.icon-people:before {
content: "\e698";
}
.icon-peoples:before {
content: "\e699";
}
.icon-a-message-one1:before {
content: "\e69a";
}
.icon-phone-telephone:before {
content: "\e69b";
}
.icon-internal-transmission:before {
content: "\e69c";
}
.icon-schedule:before {
content: "\e69d";
}
.icon-more-one:before {
content: "\e69e";
}
.icon-sim:before {
content: "\e69f";
}
.icon-a-peoples1:before {
content: "\e6a0";
}
.icon-wallet:before {
content: "\e6a1";
}
.icon-permissions:before {
content: "\e6a2";
}
.icon-faan:before {
content: "\e6a3";
}
.icon-transporter:before {
content: "\e6a4";
}
.icon-transaction-order:before {
content: "\e6a5";
}
.icon-message-one:before {
content: "\e6a6";
}
.icon-shouji:before {
content: "\e6a7";
}
.icon-liebiaochakanmoshi_view-grid-list:before {
content: "\e6a8";
}
.icon-time:before {
content: "\e6a9";
}
.icon-transaction:before {
content: "\e6aa";
}
.icon-setting-two:before {
content: "\e6ab";
}
.icon-plan:before {
content: "\e6ac";
}
.icon-a-time1:before {
content: "\e6ad";
}
.icon-shezhi_setting:before {
content: "\e6ae";
}
.icon-zanting:before {
content: "\e6af";
}
.icon-sousuo_search:before {
content: "\e6b0";
}
.icon-xiangqingliebiao:before {
content: "\e6b1";
}
.icon-workbench:before {
content: "\e6b2";
}
.icon-shujubiao_data-sheet:before {
content: "\e6b3";
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

51
static/index.html Normal file
View File

@@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="PoweredByAidex"/>
<link rel="shortcut icon" type="image/x-icon" href="static/aidex/favicon.png">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>aidex Mobile APP</title>
<script>
window.onresize = function () {
if (document.documentElement.clientWidth < 768) {
window.location.href = '../#/';
}
};
window.onresize();
</script>
<style>
.mobile-model {
margin: 10px auto;
background-color: #fff;
width: 330px;
margin-top: calc(50vh - 350px);
box-sizing: border-box;
background-image: url(common/img/iPhoneX.png);
background-repeat: no-repeat;
background-size: 100%;
border-radius: 30px;
padding: 48px 23px 38px 16px;
}
.mobile-content {
box-sizing: border-box;
width: 298px;
height: 582px;
border-bottom-left-radius: 20px;
}
.mobile-iframe {
height: 100%;
width: 100%;
border-radius: 20px;
}
</style>
</head>
<body>
<div class="mobile-model">
<div class="mobile-content">
<iframe src="../#/" class="mobile-iframe" scrolling="auto" frameborder="0"></iframe>
</div>
</div>
</body>
</html>

BIN
static/uni.ttf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
static/uview/example/js.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB