snow пре 2 месеци
родитељ
комит
414d733be6
100 измењених фајлова са 734 додато и 421 уклоњено
  1. 3 2
      manifest.json
  2. 11 2
      node_modules/.vue-global-types/vue_3.3_false.d.ts
  3. 1 0
      pages/home/.gitignore
  4. 0 0
      pages/home/index.js
  5. 267 199
      pages/home/index.vue
  6. 218 0
      pages/home/mockData.js
  7. 59 218
      platforms/app-plus/feedback/feedback.vue
  8. 0 0
      unpackage/dist/build/web/assets/index-2XFcnY1w.css
  9. 12 0
      unpackage/dist/build/web/assets/index-BJkbEE1Y.js
  10. 0 0
      unpackage/dist/build/web/assets/index-CLRN8auI.css
  11. 0 0
      unpackage/dist/build/web/assets/pages-home-index.stNW97-k.js
  12. 0 0
      unpackage/dist/build/web/assets/uni.a977fc64.css
  13. BIN
      unpackage/dist/build/web/assets/uniicons-DN59BOw4.ttf
  14. 88 0
      unpackage/dist/build/web/hybrid/html/local.html
  15. 23 0
      unpackage/dist/build/web/index.html
  16. BIN
      unpackage/dist/build/web/static/60x60.png
  17. BIN
      unpackage/dist/build/web/static/api.png
  18. BIN
      unpackage/dist/build/web/static/apiHL.png
  19. BIN
      unpackage/dist/build/web/static/apiIndex.png
  20. BIN
      unpackage/dist/build/web/static/c1.png
  21. BIN
      unpackage/dist/build/web/static/c2.png
  22. BIN
      unpackage/dist/build/web/static/c3.png
  23. BIN
      unpackage/dist/build/web/static/c4.png
  24. BIN
      unpackage/dist/build/web/static/c5.png
  25. BIN
      unpackage/dist/build/web/static/c6.png
  26. BIN
      unpackage/dist/build/web/static/c7.png
  27. BIN
      unpackage/dist/build/web/static/c8.png
  28. BIN
      unpackage/dist/build/web/static/c9.png
  29. BIN
      unpackage/dist/build/web/static/compass.png
  30. BIN
      unpackage/dist/build/web/static/component.png
  31. BIN
      unpackage/dist/build/web/static/componentHL.png
  32. BIN
      unpackage/dist/build/web/static/componentIndex.png
  33. 20 0
      unpackage/dist/build/web/static/customicons.css
  34. BIN
      unpackage/dist/build/web/static/customicons.ttf
  35. BIN
      unpackage/dist/build/web/static/extui.png
  36. BIN
      unpackage/dist/build/web/static/extuiHL.png
  37. BIN
      unpackage/dist/build/web/static/extuiIndex.png
  38. BIN
      unpackage/dist/build/web/static/home-active.png
  39. BIN
      unpackage/dist/build/web/static/home.png
  40. 32 0
      unpackage/dist/build/web/static/iconfont.css
  41. BIN
      unpackage/dist/build/web/static/iconfont.ttf
  42. BIN
      unpackage/dist/build/web/static/icons/badge.png
  43. BIN
      unpackage/dist/build/web/static/icons/button.png
  44. BIN
      unpackage/dist/build/web/static/icons/calendar.png
  45. BIN
      unpackage/dist/build/web/static/icons/card.png
  46. BIN
      unpackage/dist/build/web/static/icons/collapse.png
  47. BIN
      unpackage/dist/build/web/static/icons/color.png
  48. BIN
      unpackage/dist/build/web/static/icons/combox.png
  49. BIN
      unpackage/dist/build/web/static/icons/countdown.png
  50. BIN
      unpackage/dist/build/web/static/icons/data-checkbox.png
  51. BIN
      unpackage/dist/build/web/static/icons/data-picker.png
  52. BIN
      unpackage/dist/build/web/static/icons/dateformat.png
  53. BIN
      unpackage/dist/build/web/static/icons/datetime-picker.png
  54. BIN
      unpackage/dist/build/web/static/icons/drawer.png
  55. BIN
      unpackage/dist/build/web/static/icons/easyinput.png
  56. BIN
      unpackage/dist/build/web/static/icons/fab.png
  57. BIN
      unpackage/dist/build/web/static/icons/fav.png
  58. BIN
      unpackage/dist/build/web/static/icons/file-picker.png
  59. BIN
      unpackage/dist/build/web/static/icons/font.png
  60. BIN
      unpackage/dist/build/web/static/icons/forms.png
  61. BIN
      unpackage/dist/build/web/static/icons/goods-nav.png
  62. BIN
      unpackage/dist/build/web/static/icons/grid.png
  63. BIN
      unpackage/dist/build/web/static/icons/group.png
  64. BIN
      unpackage/dist/build/web/static/icons/icons.png
  65. BIN
      unpackage/dist/build/web/static/icons/indexed-list.png
  66. BIN
      unpackage/dist/build/web/static/icons/link.png
  67. BIN
      unpackage/dist/build/web/static/icons/list.png
  68. BIN
      unpackage/dist/build/web/static/icons/load-more.png
  69. BIN
      unpackage/dist/build/web/static/icons/nav-bar.png
  70. BIN
      unpackage/dist/build/web/static/icons/notice-bar.png
  71. BIN
      unpackage/dist/build/web/static/icons/number-box.png
  72. BIN
      unpackage/dist/build/web/static/icons/pagination.png
  73. BIN
      unpackage/dist/build/web/static/icons/popup.png
  74. BIN
      unpackage/dist/build/web/static/icons/radius.png
  75. BIN
      unpackage/dist/build/web/static/icons/rate.png
  76. BIN
      unpackage/dist/build/web/static/icons/row.png
  77. BIN
      unpackage/dist/build/web/static/icons/search-bar.png
  78. BIN
      unpackage/dist/build/web/static/icons/section.png
  79. BIN
      unpackage/dist/build/web/static/icons/segmented-control.png
  80. BIN
      unpackage/dist/build/web/static/icons/space.png
  81. BIN
      unpackage/dist/build/web/static/icons/steps.png
  82. BIN
      unpackage/dist/build/web/static/icons/swipe-action.png
  83. BIN
      unpackage/dist/build/web/static/icons/swiper-dot.png
  84. BIN
      unpackage/dist/build/web/static/icons/tag.png
  85. BIN
      unpackage/dist/build/web/static/icons/title.png
  86. BIN
      unpackage/dist/build/web/static/icons/transition.png
  87. BIN
      unpackage/dist/build/web/static/image-active.png
  88. BIN
      unpackage/dist/build/web/static/image.png
  89. BIN
      unpackage/dist/build/web/static/image/uniui-header-bg.png
  90. BIN
      unpackage/dist/build/web/static/image/uniui-logo.png
  91. BIN
      unpackage/dist/build/web/static/location.png
  92. BIN
      unpackage/dist/build/web/static/logo.png
  93. BIN
      unpackage/dist/build/web/static/menu.png
  94. BIN
      unpackage/dist/build/web/static/nav.png
  95. BIN
      unpackage/dist/build/web/static/pause.png
  96. BIN
      unpackage/dist/build/web/static/play.png
  97. BIN
      unpackage/dist/build/web/static/plus.png
  98. BIN
      unpackage/dist/build/web/static/record.png
  99. BIN
      unpackage/dist/build/web/static/shuijiao.jpg
  100. BIN
      unpackage/dist/build/web/static/star-active.png

+ 3 - 2
manifest.json

@@ -1,6 +1,6 @@
 {
     "name" : "cat-power",
-    "appid" : "",
+    "appid" : "__UNI__8D4C45D",
     "description" : "uni-app 框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机扫码快速体验 uni-app 的强大功能",
     "versionName" : "1.0.0",
     "versionCode" : "100",
@@ -131,7 +131,8 @@
         "usingComponents" : true,
         "uniStatistics" : {
             "enable" : true
-        }
+        },
+        "appid" : "testAppId"
     },
     "mp-jd" : {
         "usingComponents" : true,

+ 11 - 2
node_modules/.vue-global-types/vue_3.3_false.d.ts

@@ -9,6 +9,7 @@ export {};
 	const __VLS_intrinsicElements: __VLS_IntrinsicElements;
 	const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any };
 	const __VLS_unref: typeof import('vue').unref;
+	const __VLS_placeholder: any;
 
 	const __VLS_nativeElements = {
 		...{} as SVGElementTagNameMap,
@@ -29,7 +30,7 @@ export {};
 		N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N1] } :
 		N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N2] } :
 		N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N3] } :
-		{ [K in N0]: unknown }
+		{ [K in N0]: unknown };
 	type __VLS_FunctionalComponentProps<T, K> =
 		'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
 		: T extends (props: infer P, ...args: any) => any ? P :
@@ -41,6 +42,15 @@ export {};
 		: true
 		: false
 		: false;
+	type __VLS_NormalizeComponentEvent<Props, Events, onEvent extends keyof Props, Event extends keyof Events, CamelizedEvent extends keyof Events> = (
+		__VLS_IsFunction<Props, onEvent> extends true
+			? Props
+			: __VLS_IsFunction<Events, Event> extends true
+				? { [K in onEvent]?: Events[Event] }
+				: __VLS_IsFunction<Events, CamelizedEvent> extends true
+					? { [K in onEvent]?: Events[CamelizedEvent] }
+					: Props
+	) & Record<string, unknown>;
 	// fix https://github.com/vuejs/language-tools/issues/926
 	type __VLS_UnionToIntersection<U> = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never;
 	type __VLS_OverloadUnionInner<T, U = unknown> = U & T extends (...args: infer A) => infer R
@@ -105,7 +115,6 @@ export {};
 			: __VLS_unknownDirective;
 	function __VLS_withScope<T, K>(ctx: T, scope: K): ctx is T & K;
 	function __VLS_makeOptional<T>(t: T): { [K in keyof T]?: T[K] };
-	function __VLS_nonNullable<T>(t: T): T extends null | undefined ? never : T;
 	function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
 		T extends new (...args: any) => any
 		? (props: (K extends { $props: infer Props } ? Props : any) & Record<string, unknown>, ctx?: any) => __VLS_Element & { __ctx?: {

+ 1 - 0
pages/home/.gitignore

@@ -0,0 +1 @@
+unpackage/*

+ 0 - 0
pages/home/index.js


+ 267 - 199
pages/home/index.vue

@@ -48,8 +48,9 @@
 			<el-button type="primary" style="width:100%;margin-bottom: 10px;margin-top:10px" @click="switchRoles">
 				交换角色
 			</el-button>
-			
-			<el-button type="primary" style="width:100%;margin-bottom: 10px;margin-top:10px" @click="calculateBestMatch">
+
+			<el-button type="primary" style="width:100%;margin-bottom: 10px;margin-top:10px"
+				@click="calculateBestMatch">
 				计算最佳配对
 			</el-button>
 		</div>
@@ -58,9 +59,7 @@
 		<view class="section" v-if="outputData.length > 0">
 
 			<div style="display: flex;justify-content: space-between;">
-				<text class="section-title">输出 </text>
-			 计算时间 {{timer}} ms
-			
+				<text class="section-title">输出, 计算时间 {{}} ms </text>
 				<span>差额: {{ powerDifference }}</span>
 			</div>
 
@@ -69,6 +68,7 @@
 					<template #="{ $index }">{{ $index + 1 === outputData.length ? '合计' : $index + 1}}</template>
 				</el-table-column>
 
+
 				<el-table-column label="目标角色">
 					<el-table-column label="性别" min-width="60px" prop="targetGender" />
 					<el-table-column label="势力" min-width="60px" prop="targetPower" />
@@ -93,15 +93,11 @@
 
 
 				<span class="dialog-title">猫咪势力(公)</span>
-				<textarea 
-					v-model="malePowers" 
-					placeholder="用逗号隔开,如:200,10,100"
+				<textarea v-model="malePowers" placeholder="用逗号隔开,如:200,10,100"
 					style="height: 70px;border: 1px solid #dfe2e5" />
 
 				<span class="dialog-title">猫咪势力(母)</span>
-				<textarea 
-					v-model="feMalePowers" 
-					placeholder="用逗号隔开,如:200,10,100"
+				<textarea v-model="feMalePowers" placeholder="用逗号隔开,如:200,10,100"
 					style="height: 70px;border: 1px solid #dfe2e5" />
 
 
@@ -124,58 +120,134 @@ const feMalePowers = ref('')
 const role = ref("")
 
 const type = ref('')
-// 性别选项
-const genderOptions = ['公', '母'];
-const roleOptions = ['目标角色', '备选角色'];
-
-
-const timer = ref(0)
-
 
 const mockData = [
-    {
-        "backupFemale": "121",
-        "backupMale": "153",
-        "targetFemale": "86",
-        "targetMale": "138"
-    },
-    {
-        "backupFemale": "118",
-        "backupMale": "91",
-        "targetFemale": "84",
-        "targetMale": "90"
-    },
-    {
-        "backupFemale": "115",
-        "backupMale": "77",
-        "targetFemale": "84"
-    },
-    {
-        "backupFemale": null,
-        "backupMale": null,
-        "targetFemale": "59"
-    },
-    {
-        "backupFemale": null,
-        "backupMale": null,
-        "targetFemale": "53"
-    },
-    {
-        "backupFemale": null,
-        "backupMale": null,
-        "targetFemale": "51"
-    },
-    {
-        "backupFemale": null,
-        "backupMale": null
-    },
-    {
-        "backupFemale": null,
-        "backupMale": null
-    }
+	{
+		"backupFemale": "180",
+		"backupMale": "174",
+		"targetFemale": "121",
+		"targetMale": "153"
+	},
+	{
+		"backupFemale": "165",
+		"backupMale": "152",
+		"targetFemale": "118",
+		"targetMale": "91"
+	},
+	{
+		"backupFemale": "158",
+		"backupMale": "147",
+		"targetFemale": "115",
+		"targetMale": "77"
+	},
+	{
+		"backupFemale": "154",
+		"backupMale": "102",
+		"targetFemale": "86",
+		"targetMale": "138"
+	},
+	{
+		"backupFemale": "152",
+		"backupMale": "101",
+		"targetFemale": "84",
+		"targetMale": "90"
+	},
+	{
+		"backupFemale": "151",
+		"backupMale": "98",
+		"targetFemale": "84",
+		"targetMale": "80"
+	},
+	{
+		"backupFemale": "150",
+		"backupMale": "98",
+		"targetMale": "60",
+		"targetFemale": "59"
+	},
+	{
+		"backupFemale": "150",
+		"backupMale": "97",
+		"targetMale": "54",
+		"targetFemale": "53"
+	},
+	{
+		"targetMale": "52",
+		"targetFemale": "51",
+		"backupMale": "62",
+		"backupFemale": "102"
+	},
+	{
+		"targetMale": "52",
+		"backupMale": "60",
+		"backupFemale": "101"
+	},
+	{
+		"targetMale": "52",
+		"backupMale": "58",
+		"backupFemale": "101"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": "19",
+		"backupFemale": "93"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "61"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "30"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "30"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "29"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "29"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "29"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "27"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "10"
+	},
+	{
+		"targetMale": null,
+		"targetFemale": null,
+		"backupMale": null,
+		"backupFemale": "10"
+	}
 ]
 
-
 const inputData = ref(mockData);
 const outputData = ref([]);
 
@@ -194,7 +266,7 @@ function editRow(_gender, _role) {
 
 
 function switchRoles(){
-	const cloneInputData = inputData.value.map(item => ({ ...item }))
+	// const cloneInputData = inputData.value.map(item => ({ ...item }))
 	const backups = inputData.value.map(item => ({ male: item.backupMale, female: item.backupFemale }))
 	const targets = inputData.value.map(item => ({ male: item.targetMale, female: item.targetFemale }))
 	
@@ -207,18 +279,7 @@ function switchRoles(){
 
 }
 
-// 计算属性
-const totalTargetPower = computed(() => {
-	return outputData.value.reduce((sum, item) => (sum + item.targetGender ? (Number(item.targetPower) || 0) : 0), 0);
-});
-
-const totalBackupPower = computed(() => {
-	return outputData.value.reduce((sum, item) => sum + (item.backupGender ? (Number(item.backupPower) || 0) : 0), 0);
-});
-
-const powerDifference = computed(() => {
-    return totalTargetPower.value - totalBackupPower.value
-});
+const powerDifference = ref(0)
 
 // 目标角色操作
 const addTargetRow = () => {
@@ -236,22 +297,13 @@ function isPositiveInteger(str) {
 function generatePowers(_powers, gender){
 	const keys = ['targetMale', 'targetFemale', 'backupMale', 'backupFemale']
 	
-	_powers = _powers.replace(/,/g, ',')
-	const powerSet = _powers.split(',')
-	
+	_powers = _powers.replace(/,|、|,/g, ',')
+	const powerSet = _powers.split(',').map(item => item.trim()).filter(item => item !== '')
 	
 	const isOk = powerSet.every(num => isPositiveInteger(num))
 
+	if (!isOk && powerSet.length !== 0) return false
 
-
-	if(!isOk) return false
-
-	// if(!isOk){
-	// 	ElMessage.warning('势力必须为正整数')
-	// 	return
-	// }
-	
-	
 	
 	const roleProp = role.value === '目标角色' ? 'target' : 'backup'
 	const genderProp = gender === '公' ? 'Male' : 'Female'
@@ -310,7 +362,7 @@ function handleConfirm(){
 	const _malePowers = malePowers.value.trim()
 	const _feMalePowers = feMalePowers.value.trim()
 
-	const  isMaleOk = generatePowers(_malePowers, '公')
+	const isMaleOk = generatePowers(_malePowers, '公')
 	const isFemakeOk = generatePowers(_feMalePowers, '母')
 	
 	if(typeof isMaleOk === 'boolean' && !isMaleOk){
@@ -325,155 +377,171 @@ function handleConfirm(){
 	batchRef.value.close()
 }
 
-async function calculateBestMatch() {
-	let startTime = new Date().getTime()
-	
-	
-	let endTime = null
-	
+// 生成数组的所有组合(辅助函数,用于生成指定个数元素的组合情况)
+function getCombinations(arr, num) {
+    const result = [];
+	if (num === 0) { return [[]]; }
+
+
+    for (let i = 0; i < arr.length; i++) {
+        const element = arr[i];
+
+        const remainingCombos = getCombinations(arr.slice(i + 1), num - 1);
+
+		for (const combo of remainingCombos) {
+            result.push([element].concat(combo));
+        }
+    }
+
+    return result;
+}
+
+
+function calculateBestMatch() {
 	outputData.value = []
+
 	const targetData = []
 	const backupData = []
 
 	inputData.value.forEach(item => {
-		if(item.targetMale){ targetData.push({ gender: '公', power: item.targetMale }) }
-		if(item.targetFemale){ targetData.push({ gender: '母', power: item.targetFemale }) }
-		if(item.backupMale){ backupData.push({ gender: '公', power: item.backupMale }) }
-		if(item.backupFemale){ backupData.push({ gender: '母', power: item.backupFemale }) }
+		if (item.targetMale) { targetData.push({ gender: '公', power: item.targetMale }) }
+		if (item.targetFemale) { targetData.push({ gender: '母', power: item.targetFemale }) }
+		if (item.backupMale) { backupData.push({ gender: '公', power: item.backupMale }) }
+		if (item.backupFemale) { backupData.push({ gender: '母', power: item.backupFemale }) }
 	})
 
-	if (targetData.length === 0) { 
-		ElMessage.warning('至少添加一条目标角色数据')
+
+	const targetMale = targetData.filter(item => item.gender === '公').map(item => Number(item.power));
+	const targetFemale = targetData.filter(item => item.gender === '母').map(item => Number(item.power));
+	const backupMale = backupData.filter(item => item.gender === '公').map(item => Number(item.power));
+	const backupFemale = backupData.filter(item => item.gender === '母').map(item => Number(item.power));
+
+
+	// const targetMale = [153, 91, 77, 138, 90, 80, 60, 54, 52, 52, 52];
+	// const targetFemale = [121, 118, 115, 86, 84, 84, 59, 53, 51];
+	// const backupMale = [180, 165, 158, 154, 152, 151, 150, 150, 102, 101, 101, 93, 61, 30, 30, 29, 29, 29, 27, 10, 10];
+	// const backupFemale = [174, 152, 147, 102, 101, 98, 98, 97, 62, 60, 58, 19]; 
+
+	// const targetMale = [238, 90, 90];
+	// const targetFemale = [86, 84, 84];
+	// const backupMale = [153, 91, 77];
+	// const backupFemale = [121, 118, 115]; 
+
+
+	if (targetFemale.length > backupMale.length && backupMale.length !== 0){
+		ElMessage.warning('备选角色的公数据长度必须大于或等于目标角色的母数据')
 		return
 	}
 
-	if (backupData.length === 0) {
-		ElMessage.warning('至少添加一条备选角色数据')
+	if (targetMale.length > backupFemale.length && backupFemale.length !== 0) {
+		ElMessage.warning('备选角色的母数据长度必须或等于大于目标角色的公数据')
 		return
 	}
-	
-	
-	
-	let target = null
-	let backup = null
-	
-	let isTansfer = false
-	
-	if(targetData.length > backupData.length){
-		isTansfer = true
-		target = backupData
-		backup = targetData
-	} else {
-		target = targetData
-		backup = backupData
+
+	const targetMaleLen = targetMale.length;
+	const targetFemaleLen = targetFemale.length;
+
+
+	let targetWeight = 0
+	if (backupMale.length === 0){
+		targetWeight =  targetMale.reduce((acc, val) => acc + val, 0);
+	} else if(backupFemale.length === 0){
+		targetWeight = targetFemale.reduce((acc, val) => acc + val, 0)
+	} else if(backupMale.length !== 0 && backupFemale.length !== 0){
+		targetWeight = targetMale.reduce((acc, val) => acc + val, 0) + targetFemale.reduce((acc, val) => acc + val, 0);
 	}
-	
-	
 
-	const result = [];
-
-	// 按性别分类
-	const targetMale = target.filter(item => item.gender === '公');
-	const targetFemale = target.filter(item => item.gender === '母');
-	const backupMale = backup.filter(item => item.gender === '公');
-	const backupFemale = backup.filter(item => item.gender === '母');
-
-	// 计算匹配成本矩阵(power 差的绝对值)
-	const costMatrixMaleFemale = [];
-	targetMale.forEach(t => {
-		const row = [];
-		backupFemale.forEach(b => { row.push(Math.abs(t.power - b.power)); });
-		costMatrixMaleFemale.push(row);
-	});
-
-	const costMatrixFemaleMale = [];
-	targetFemale.forEach(t => {
-		const row = [];
-		backupMale.forEach(b => {
-			row.push(Math.abs(t.power - b.power));
-		});
-		costMatrixFemaleMale.push(row);
-	});
+	let minDifference = Infinity;  // 初始化最小差额为正无穷大
+    let bestfemaleCombination = null;
+    let bestMaleCombination = null;
 	
-
-	// 匹配函数:尽量匹配并返回匹配结果
-	function matchBestPairs(costMatrix, targetGroup, backupGroup) {
-		const result = [];
-		while (targetGroup.length > 0 && backupGroup.length > 0) {
-			// 找到最小的 cost
-			let minDiff = Infinity;
-			let minTargetIdx = -1;
-			let minBackupIdx = -1;
-			
-			
-			for (let i = 0; i < targetGroup.length; i++) {
-				for (let j = 0; j < backupGroup.length; j++) {
-					if (costMatrix[i][j] < minDiff) {
-						minDiff = costMatrix[i][j];
-						minTargetIdx = i;
-						minBackupIdx = j;
+	const femaleCombinations = getCombinations(backupFemale, targetMaleLen);
+	const maleCombinations = getCombinations(backupMale, targetFemaleLen);
+
+	if (femaleCombinations.length !== 0 && maleCombinations.length !== 0){
+		for (const femaleComb of femaleCombinations) {
+			for (const maleComb of maleCombinations) {
+				const totalWeight = femaleComb.reduce((acc, val) => acc + val, 0) + maleComb.reduce((acc, val) => acc + val, 0);
+				const difference = Math.abs(totalWeight - targetWeight);
+				if (difference < minDifference) {
+					minDifference = difference;
+					bestfemaleCombination = femaleComb;
+					bestMaleCombination = maleComb;
+					if (minDifference == 0) {
+						break;
 					}
 				}
-				
 			}
+		}
+	}
 
 
-			console.log(targetGroup[minTargetIdx], backupGroup[minBackupIdx])
-			// 记录最小差值的匹配并移除对应元素
-			result.push({ target: targetGroup[minTargetIdx], backup: backupGroup[minBackupIdx] });
-			
-			targetGroup.splice(minTargetIdx, 1);
-			backupGroup.splice(minBackupIdx, 1);
-			
+	// 备选数据的母为空
+	if (femaleCombinations.length === 0 && maleCombinations.length !== 0) {
+		for (const maleComb of maleCombinations) {
+			const totalWeight = maleComb.reduce((acc, val) => acc + val , 0);
+			const difference = Math.abs(totalWeight - targetWeight);
+			if (difference < minDifference) {
+				minDifference = difference;
+				bestMaleCombination = maleComb;
+				if (minDifference == 0) {
+					break;
+				}
+			}
 		}
-		return result;
 	}
 
-	// 匹配公对母,母对公
-	const maleFemaleMatches = matchBestPairs(costMatrixMaleFemale, targetMale, backupFemale);
-	const femaleMaleMatches = matchBestPairs(costMatrixFemaleMale, targetFemale, backupMale);
-	
-	// 合并匹配结果
-	result.push(...maleFemaleMatches, ...femaleMaleMatches);
-	
-	let totalTargetPower = 0
-	let totalBackupPower = 0
+	// 备选数据的公为空
+	if (femaleCombinations.length !== 0 && maleCombinations.length === 0) {
+		for (const femaleComb of femaleCombinations) {
+				const totalWeight = femaleComb.reduce((acc, val) => acc + val, 0)
+				const difference = Math.abs(totalWeight - targetWeight);
+				if (difference < minDifference) {
+					minDifference = difference;
+					bestfemaleCombination = femaleComb;
+					if (minDifference == 0) {
+						break;
+					}
+				}
+		}
+	}
+
+	bestMaleCombination && bestMaleCombination.sort((a, b) => a - b)
+	bestfemaleCombination && bestfemaleCombination.sort((a, b) => a - b)
+	targetMale.sort((a, b) => a - b)
+	targetFemale.sort((a, b) => a - b)
 
-	result.forEach(item => {
+	if (!bestMaleCombination && !bestfemaleCombination){ return }
+
+
+	bestfemaleCombination && targetMale.forEach((_, index) => {
 		outputData.value.push({
-			targetGender:  isTansfer ? item.backup.gender : item.target.gender,
-			targetPower: isTansfer ? item.backup.power : item.target.power,
-			backupGender:isTansfer ? item.target.gender : item.backup.gender,
-			backupPower:isTansfer ? item.target.power : item.backup.power,
+			targetGender: '公',
+			targetPower: targetMale[index],
+			backupGender: '母',
+			backupPower: bestfemaleCombination[index]
 		})
-	 })
-
-	outputData.value = outputData.value.filter(item => {
-		if (item.targetGender === '公' && item.backupGender === '公') return false
-		if (item.targetGender === '母' && item.backupGender === '母') return false
-		return true
 	})
 
-	outputData.value.forEach(item => {
-		totalTargetPower = totalTargetPower + Number(item.targetPower)
-		totalBackupPower = totalBackupPower + Number(item.backupPower)
+	bestMaleCombination && targetFemale.forEach((_, index) => {
+		outputData.value.push({
+			targetGender: '母',
+			targetPower: targetFemale[index],
+			backupGender: '公',
+			backupPower: bestMaleCombination[index]
+		})
 	})
 
+
+
 	outputData.value.push({
 		targetGender: '',
-		targetPower: totalTargetPower,
+		targetPower: outputData.value.reduce((prev, current) => prev + current.targetPower,0),
 		backupGender: '',
-		backupPower: totalBackupPower,
+		backupPower: outputData.value.reduce((prev, current) => prev + current.backupPower, 0),
 	})
-	
-	
-	endTime = new Date().getTime()
-
 
-	const calc = endTime - startTime
-
-	
-	timer.value = calc
+	powerDifference.value = minDifference
 }
 </script>
 

+ 218 - 0
pages/home/mockData.js

@@ -0,0 +1,218 @@
+export target [
+    {
+        "gender": "公",
+        "power": "153"
+    },
+    {
+        "gender": "母",
+        "power": "121"
+    },
+    {
+        "gender": "公",
+        "power": "91"
+    },
+    {
+        "gender": "母",
+        "power": "118"
+    },
+    {
+        "gender": "公",
+        "power": "77"
+    },
+    {
+        "gender": "母",
+        "power": "115"
+    },
+    {
+        "gender": "公",
+        "power": "138"
+    },
+    {
+        "gender": "母",
+        "power": "86"
+    },
+    {
+        "gender": "公",
+        "power": "90"
+    },
+    {
+        "gender": "母",
+        "power": "84"
+    },
+    {
+        "gender": "公",
+        "power": "80"
+    },
+    {
+        "gender": "母",
+        "power": "84"
+    },
+    {
+        "gender": "公",
+        "power": "60"
+    },
+    {
+        "gender": "母",
+        "power": "59"
+    },
+    {
+        "gender": "公",
+        "power": "54"
+    },
+    {
+        "gender": "母",
+        "power": "53"
+    },
+    {
+        "gender": "公",
+        "power": "52"
+    },
+    {
+        "gender": "母",
+        "power": "51"
+    },
+    {
+        "gender": "公",
+        "power": "52"
+    },
+    {
+        "gender": "公",
+        "power": "52"
+    }
+]
+
+
+export backup = [
+    {
+        "gender": "公",
+        "power": "174"
+    },
+    {
+        "gender": "母",
+        "power": "180"
+    },
+    {
+        "gender": "公",
+        "power": "152"
+    },
+    {
+        "gender": "母",
+        "power": "165"
+    },
+    {
+        "gender": "公",
+        "power": "147"
+    },
+    {
+        "gender": "母",
+        "power": "158"
+    },
+    {
+        "gender": "公",
+        "power": "102"
+    },
+    {
+        "gender": "母",
+        "power": "154"
+    },
+    {
+        "gender": "公",
+        "power": "101"
+    },
+    {
+        "gender": "母",
+        "power": "152"
+    },
+    {
+        "gender": "公",
+        "power": "98"
+    },
+    {
+        "gender": "母",
+        "power": "151"
+    },
+    {
+        "gender": "公",
+        "power": "98"
+    },
+    {
+        "gender": "母",
+        "power": "150"
+    },
+    {
+        "gender": "公",
+        "power": "97"
+    },
+    {
+        "gender": "母",
+        "power": "150"
+    },
+    {
+        "gender": "公",
+        "power": "62"
+    },
+    {
+        "gender": "母",
+        "power": "102"
+    },
+    {
+        "gender": "公",
+        "power": "60"
+    },
+    {
+        "gender": "母",
+        "power": "101"
+    },
+    {
+        "gender": "公",
+        "power": "58"
+    },
+    {
+        "gender": "母",
+        "power": "101"
+    },
+    {
+        "gender": "公",
+        "power": "19"
+    },
+    {
+        "gender": "母",
+        "power": "93"
+    },
+    {
+        "gender": "母",
+        "power": "61"
+    },
+    {
+        "gender": "母",
+        "power": "30"
+    },
+    {
+        "gender": "母",
+        "power": "30"
+    },
+    {
+        "gender": "母",
+        "power": "29"
+    },
+    {
+        "gender": "母",
+        "power": "29"
+    },
+    {
+        "gender": "母",
+        "power": "29"
+    },
+    {
+        "gender": "母",
+        "power": "27"
+    },
+    {
+        "gender": "母",
+        "power": "10"
+    },
+    {
+        "gender": "母",
+        "power": "10"
+    }
+]

+ 59 - 218
platforms/app-plus/feedback/feedback.vue

@@ -1,232 +1,73 @@
 <template>
-	<view class="page">
-		<view class="feedback-title">
-			<text>问题和意见</text>
-			<text class="feedback-quick" @tap="chooseMsg">快速键入</text>
-		</view>
-		<view class="feedback-body"><textarea placeholder="请详细描述你的问题和意见..." v-model="sendDate.content" class="feedback-textare"></textarea></view>
-		<view class="feedback-title"><text>图片(选填,提供问题截图,总大小10M以下)</text></view>
-		<view class="feedback-body feedback-uploader">
-			<view class="uni-uploader">
-				<view class="uni-uploader-head">
-					<view class="uni-uploader-title">点击预览图片</view>
-					<view class="uni-uploader-info">{{ imageList.length }}/5</view>
-				</view>
-				<view class="uni-uploader-body">
-					<view class="uni-uploader__files">
-						<block v-for="(image, index) in imageList" :key="index">
-							<view class="uni-uploader__file" style="position: relative;">
-								<image class="uni-uploader__img" :src="image" @tap="previewImage(index)"></image>
-								<view class="close-view" @click="close(index)">x</view>
-							</view>
-						</block>
-						<view class="uni-uploader__input-box" v-show="imageList.length < 5"><view class="uni-uploader__input" @tap="chooseImg"></view></view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="feedback-title"><text>QQ/邮箱</text></view>
-		<view class="feedback-body"><input class="feedback-input" v-model="sendDate.contact" placeholder="(选填,方便我们联系你 )" /></view>
-		<view class="feedback-title feedback-star-view">
-			<text>应用评分</text>
-			<view class="feedback-star-view"><uni-rate v-model="sendDate.score" color="#bbb"></uni-rate></view>
-		</view>
-		<button type="default" class="feedback-submit" @tap="send">提交</button>
-		<view class="feedback-title"><text>用户反馈的结果可在app打包后于DCloud开发者中心查看</text></view>
-	</view>
+  <div class="compass-container">
+    <div class="compass" :style="compassStyle">
+      <div class="arrow"></div>
+    </div>
+    <p>当前方向: {{ direction }}°</p>
+  </div>
 </template>
 
 <script>
 export default {
-	data() {
-		return {
-			msgContents: ['界面显示错乱', '启动缓慢,卡出翔了', 'UI无法直视,丑哭了', '偶发性崩溃'],
-			stars: [1, 2, 3, 4, 5],
-			imageList: [],
-			sendDate: {
-				score: 0,
-				content: '',
-				contact: ''
-			}
-		};
-	},
-	onLoad() {
-		this.deviceInfo = {
-			// appid: plus.runtime.appid,
-			appid: '__UNI__5D0B0CA',
-			imei: plus.device.imei, //设备标识
-			p: plus.os.name === 'Android' ? 'a' : 'i', //平台类型,i表示iOS平台,a表示Android平台。
-			md: plus.device.model, //设备型号
-			app_version: plus.runtime.version,
-			plus_version: plus.runtime.innerVersion, //基座版本号
-			os: plus.os.version,
-			net: '' + plus.networkinfo.getCurrentType()
-		};
-		this.sendDate = Object.assign(this.deviceInfo, this.sendDate);
-	},
-	methods: {
-		/**
-		 * 关闭图片
-		 * @param {Object} e
-		 */
-		close(e) {
-			this.imageList.splice(e, 1);
-		},
-
-		/**
-		 * 快速输入
-		 */
-		chooseMsg() {
-			uni.showActionSheet({
-				itemList: this.msgContents,
-				success: res => {
-					this.sendDate.content = this.msgContents[res.tapIndex];
-				}
-			});
-		},
-
-		/**
-		 * 选择图片
-		 */
-		chooseImg() {
-			//选择图片
-			uni.chooseImage({
-				sourceType: ['camera', 'album'],
-				sizeType: 'compressed',
-				count: 5 - this.imageList.length,
-				success: res => {
-					this.imageList = this.imageList.concat(res.tempFilePaths);
-				}
-			});
-		},
-
-		/**
-		 * 评分
-		 * @param {Object} e
-		 */
-		chooseStar(e) {
-			//点击评星
-			this.sendDate.score = e;
-		},
-		/**
-		 * 预览图片
-		 * @param {Object} index
-		 */
-		previewImage(index) {
-			uni.previewImage({
-				urls: this.imageList,
-				current: this.imageList[index]
-			});
-		},
-
-		/**
-		 * 提交
-		 */
-		send() {
-			//发送反馈
-			if (this.sendDate.content.length === 0) {
-				uni.showModal({
-					content: '请输入问题和意见',
-					showCancel: false
-				});
-				return;
-			}
-			uni.showLoading({
-				title: '上传中...'
-			});
-			let imgs = this.imageList.map((value, index) => {
-				return {
-					name: 'images' + index,
-					uri: value
-				};
-			});
-			// TODO 服务端限制上传文件一次最大不超过 2M, 图片一次最多不超过5张
-			this.request(this.sendDate, imgs)
-				.then(res => {
-					if (typeof res.data === 'string') {
-						res.data = JSON.parse(res.data);
-					}
-					if (res.statusCode === 200 && res.data && res.data.ret === 0) {
-						uni.showModal({
-							content: '反馈成功',
-							showCancel: false
-						});
-						this.imageList = [];
-						this.sendDate = Object.assign(this.deviceInfo, {
-							score: 0,
-							content: '',
-							contact: ''
-						});
-					} else if (res.statusCode !== 200) {
-						uni.showModal({
-							content: '反馈失败,错误码为:' + res.statusCode,
-							showCancel: false
-						});
-					} else {
-						uni.showModal({
-							content: '反馈失败',
-							showCancel: false
-						});
-					}
-				})
-				.catch(err => {
-					console.log(err);
-				});
-		},
-
-		/**
-		 * 发送请求到后台
-		 */
-		request(sendDate, imgs) {
-			return new Promise((resolve, reject) => {
-				let fromData = {
-					url: 'https://service.dcloud.net.cn/feedback',
-					success: res => {
-						resolve(res);
-					},
-					fail: res => {
-						reject(res);
-					},
-					complete() {
-						uni.hideLoading();
-					}
-				};
-
-				if (imgs.length > 0) {
-					fromData.files = imgs;
-					fromData.formData = sendDate;
-					uni.uploadFile(fromData);
-				} else {
-					fromData.data = sendDate;
-					fromData.method = 'POST';
-					uni.request(fromData);
-				}
-			});
-		}
-	}
+  data() {
+    return {
+      direction: 0, // 当前方向
+      compassStyle: {
+        transform: `rotate(${this.direction}deg)` // 初始化旋转角度
+      }
+    };
+  },
+  mounted() {
+    // 浏览器支持的设备方向API
+    if (window.DeviceOrientationEvent) {
+      window.addEventListener("deviceorientation", this.handleOrientation);
+    } else {
+      alert("您的设备不支持设备方向API");
+    }
+  },
+  beforeDestroy() {
+    // 清理事件监听器
+    if (window.DeviceOrientationEvent) {
+      window.removeEventListener("deviceorientation", this.handleOrientation);
+    }
+  },
+  methods: {
+    handleOrientation(event) {
+      // 获取 alpha (旋转角度)
+      let alpha = event.alpha; // 设备的旋转角度
+      if (alpha !== null) {
+        this.direction = alpha;
+        this.compassStyle.transform = `rotate(${this.direction}deg)`; // 更新旋转角度
+      }
+    }
+  }
 };
 </script>
 
-<style>
-page {
-	background-color: #efeff4;
+<style scoped>
+.compass-container {
+  text-align: center;
+  padding: 20px;
 }
 
-.input-view {
-	font-size: 28rpx;
+.compass {
+  width: 200px;
+  height: 200px;
+  border: 10px solid #444;
+  border-radius: 50%;
+  margin: 0 auto;
+  position: relative;
+  background-color: #f0f0f0;
+  display: flex;
+  justify-content: center;
+  align-items: center;
 }
 
-.close-view {
-	text-align: center;
-	line-height: 14px;
-	height: 16px;
-	width: 16px;
-	border-radius: 50%;
-	background: #ff5053;
-	color: #ffffff;
-	position: absolute;
-	top: -6px;
-	right: -4px;
-	font-size: 12px;
+.arrow {
+  width: 5px;
+  height: 50px;
+  background-color: red;
+  position: absolute;
+  top: 25%;
 }
 </style>

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
unpackage/dist/build/web/assets/index-2XFcnY1w.css


Разлика између датотеке није приказан због своје велике величине
+ 12 - 0
unpackage/dist/build/web/assets/index-BJkbEE1Y.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
unpackage/dist/build/web/assets/index-CLRN8auI.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
unpackage/dist/build/web/assets/pages-home-index.stNW97-k.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
unpackage/dist/build/web/assets/uni.a977fc64.css


BIN
unpackage/dist/build/web/assets/uniicons-DN59BOw4.ttf


+ 88 - 0
unpackage/dist/build/web/hybrid/html/local.html

@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<title>本地网页</title>
+		<style type="text/css">
+			.btn {
+				display: block;
+				margin: 20px auto;
+				padding: 5px;
+				background-color: #007aff;
+				border: 0;
+				color: #ffffff;
+				height: 40px;
+				width: 200px;
+			}
+
+			.btn-red {
+				background-color: #dd524d;
+			}
+
+			.btn-yellow {
+				background-color: #f0ad4e;
+			}
+
+			.desc {
+				padding: 10px;
+				color: #999999;
+			}
+		</style>
+	</head>
+	<body>
+		<p class="desc">web-view 组件加载本地 html 示例,仅在 App 环境下生效。点击下列按钮,跳转至其它页面。</p>
+		<div class="btn-list">
+			<button class="btn" type="button" data-action="navigateTo">navigateTo</button>
+			<button class="btn" type="button" data-action="redirectTo">redirectTo</button>
+			<button class="btn" type="button" data-action="navigateBack">navigateBack</button>
+			<button class="btn" type="button" data-action="reLaunch">reLaunch</button>
+			<button class="btn" type="button" data-action="switchTab">switchTab</button>
+		</div>
+		<p class="desc">网页向应用发送消息。注意:小程序端应用会在此页面后退时接收到消息。</p>
+		<div class="btn-list">
+			<button class="btn btn-red" type="button" id="postMessage">postMessage</button>
+		</div>
+		<!-- uni 的 SDK -->
+		<script type="text/javascript" src="https://unpkg.com/@dcloudio/uni-webview-js@0.0.1/index.js"></script>
+		<script type="text/javascript">
+			document.addEventListener('UniAppJSBridgeReady', function() {
+				document.querySelector('.btn-list').addEventListener('click', function(evt) {
+					var target = evt.target;
+					if (target.tagName === 'BUTTON') {
+						var action = target.getAttribute('data-action');
+						switch (action) {
+							case 'switchTab':
+								uni.switchTab({
+									url: '/pages/tabBar/API/API'
+								});
+								break;
+							case 'reLaunch':
+								uni.reLaunch({
+									url: '/pages/tabBar/API/API'
+								});
+								break;
+							case 'navigateBack':
+								uni.navigateBack({
+									delta: 1
+								});
+								break;
+							default:
+								uni[action]({
+									url: '/pages/component/button/button'
+								});
+								break;
+						}
+					}
+				});
+				document.querySelector("#postMessage").addEventListener('click', function() {
+					uni.postMessage({
+						data: {
+							action: 'message'
+						}
+					});
+				})
+			});
+		</script>
+	</body>
+</html>

+ 23 - 0
unpackage/dist/build/web/index.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <link rel="stylesheet" href="/assets/uni.a977fc64.css">
+
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title>cat-power</title>
+    <!--preload-links-->
+    <!--app-context-->
+    <script type="module" crossorigin src="/assets/index-BJkbEE1Y.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-2XFcnY1w.css">
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+  </body>
+</html>

BIN
unpackage/dist/build/web/static/60x60.png


BIN
unpackage/dist/build/web/static/api.png


BIN
unpackage/dist/build/web/static/apiHL.png


BIN
unpackage/dist/build/web/static/apiIndex.png


BIN
unpackage/dist/build/web/static/c1.png


BIN
unpackage/dist/build/web/static/c2.png


BIN
unpackage/dist/build/web/static/c3.png


BIN
unpackage/dist/build/web/static/c4.png


BIN
unpackage/dist/build/web/static/c5.png


BIN
unpackage/dist/build/web/static/c6.png


BIN
unpackage/dist/build/web/static/c7.png


BIN
unpackage/dist/build/web/static/c8.png


BIN
unpackage/dist/build/web/static/c9.png


BIN
unpackage/dist/build/web/static/compass.png


BIN
unpackage/dist/build/web/static/component.png


BIN
unpackage/dist/build/web/static/componentHL.png


BIN
unpackage/dist/build/web/static/componentIndex.png


+ 20 - 0
unpackage/dist/build/web/static/customicons.css

@@ -0,0 +1,20 @@
+@font-face {
+  font-family: "customicons"; /* Project id 2878519 */
+  src:url('/static/customicons.ttf') format('truetype');
+}
+
+.customicons {
+  font-family: "customicons" !important;
+}
+
+.youxi:before {
+  content: "\e60e";
+}
+
+.wenjian:before {
+  content: "\e60f";
+}
+
+.zhuanfa:before {
+  content: "\e610";
+}

BIN
unpackage/dist/build/web/static/customicons.ttf


BIN
unpackage/dist/build/web/static/extui.png


BIN
unpackage/dist/build/web/static/extuiHL.png


BIN
unpackage/dist/build/web/static/extuiIndex.png


BIN
unpackage/dist/build/web/static/home-active.png


BIN
unpackage/dist/build/web/static/home.png


+ 32 - 0
unpackage/dist/build/web/static/iconfont.css

@@ -0,0 +1,32 @@
+@font-face {
+  font-family: "iconfont"; /* Project id  */
+  src: url('@/static/iconfont.ttf') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-link:before {
+  content: "\e772";
+}
+
+.icon-poweroff:before {
+  content: "\e774";
+}
+
+.icon-safety-certificate:before {
+  content: "\e776";
+}
+
+.icon-chart-pie-alt:before {
+  content: "\e78c";
+}
+
+.icon-kongxincai:before {
+  content: "\e642";
+}

BIN
unpackage/dist/build/web/static/iconfont.ttf


BIN
unpackage/dist/build/web/static/icons/badge.png


BIN
unpackage/dist/build/web/static/icons/button.png


BIN
unpackage/dist/build/web/static/icons/calendar.png


BIN
unpackage/dist/build/web/static/icons/card.png


BIN
unpackage/dist/build/web/static/icons/collapse.png


BIN
unpackage/dist/build/web/static/icons/color.png


BIN
unpackage/dist/build/web/static/icons/combox.png


BIN
unpackage/dist/build/web/static/icons/countdown.png


BIN
unpackage/dist/build/web/static/icons/data-checkbox.png


BIN
unpackage/dist/build/web/static/icons/data-picker.png


BIN
unpackage/dist/build/web/static/icons/dateformat.png


BIN
unpackage/dist/build/web/static/icons/datetime-picker.png


BIN
unpackage/dist/build/web/static/icons/drawer.png


BIN
unpackage/dist/build/web/static/icons/easyinput.png


BIN
unpackage/dist/build/web/static/icons/fab.png


BIN
unpackage/dist/build/web/static/icons/fav.png


BIN
unpackage/dist/build/web/static/icons/file-picker.png


BIN
unpackage/dist/build/web/static/icons/font.png


BIN
unpackage/dist/build/web/static/icons/forms.png


BIN
unpackage/dist/build/web/static/icons/goods-nav.png


BIN
unpackage/dist/build/web/static/icons/grid.png


BIN
unpackage/dist/build/web/static/icons/group.png


BIN
unpackage/dist/build/web/static/icons/icons.png


BIN
unpackage/dist/build/web/static/icons/indexed-list.png


BIN
unpackage/dist/build/web/static/icons/link.png


BIN
unpackage/dist/build/web/static/icons/list.png


BIN
unpackage/dist/build/web/static/icons/load-more.png


BIN
unpackage/dist/build/web/static/icons/nav-bar.png


BIN
unpackage/dist/build/web/static/icons/notice-bar.png


BIN
unpackage/dist/build/web/static/icons/number-box.png


BIN
unpackage/dist/build/web/static/icons/pagination.png


BIN
unpackage/dist/build/web/static/icons/popup.png


BIN
unpackage/dist/build/web/static/icons/radius.png


BIN
unpackage/dist/build/web/static/icons/rate.png


BIN
unpackage/dist/build/web/static/icons/row.png


BIN
unpackage/dist/build/web/static/icons/search-bar.png


BIN
unpackage/dist/build/web/static/icons/section.png


BIN
unpackage/dist/build/web/static/icons/segmented-control.png


BIN
unpackage/dist/build/web/static/icons/space.png


BIN
unpackage/dist/build/web/static/icons/steps.png


BIN
unpackage/dist/build/web/static/icons/swipe-action.png


BIN
unpackage/dist/build/web/static/icons/swiper-dot.png


BIN
unpackage/dist/build/web/static/icons/tag.png


BIN
unpackage/dist/build/web/static/icons/title.png


BIN
unpackage/dist/build/web/static/icons/transition.png


BIN
unpackage/dist/build/web/static/image-active.png


BIN
unpackage/dist/build/web/static/image.png


BIN
unpackage/dist/build/web/static/image/uniui-header-bg.png


BIN
unpackage/dist/build/web/static/image/uniui-logo.png


BIN
unpackage/dist/build/web/static/location.png


BIN
unpackage/dist/build/web/static/logo.png


BIN
unpackage/dist/build/web/static/menu.png


BIN
unpackage/dist/build/web/static/nav.png


BIN
unpackage/dist/build/web/static/pause.png


BIN
unpackage/dist/build/web/static/play.png


BIN
unpackage/dist/build/web/static/plus.png


BIN
unpackage/dist/build/web/static/record.png


BIN
unpackage/dist/build/web/static/shuijiao.jpg


BIN
unpackage/dist/build/web/static/star-active.png


Неке датотеке нису приказане због велике количине промена