Browse Source

feat: 代码分包,压缩

develop
song 4 years ago
parent
commit
f3b0afc41b
  1. 3
      CHANGELOG.md
  2. 4289
      src/common/styles/tailwind.scss
  3. 10
      src/components/ConfigInfo/ConfigInfo.vue
  4. 332
      src/components/ConfigInfo/components/Info copy.vue
  5. BIN
      src/components/ConfigInfo/img/1.png
  6. BIN
      src/components/ConfigInfo/img/2.png
  7. BIN
      src/components/ConfigInfo/img/3.png
  8. BIN
      src/components/ConfigInfo/img/4.png
  9. BIN
      src/components/ConfigInfo/img/weixin.png
  10. 3
      src/components/Projects/ProjectItem.vue
  11. 127
      src/components/TimeLine copy/TimeLine.vue
  12. 42
      src/components/TimeLine copy/component/Barrier.vue
  13. 185
      src/components/TimeLine copy/component/TaskTools.vue
  14. 142
      src/components/TimeLine copy/component/TimeBox.vue
  15. 231
      src/components/TimeLine copy/component/TimeStatus.vue
  16. 7
      src/components/TimeLine copy/component/Title.vue
  17. 24
      src/components/Upload/Upload.vue
  18. BIN
      src/components/Upload/img/icon1.png
  19. BIN
      src/components/Upload/img/icon2.png
  20. BIN
      src/components/Upload/img/icon3.png
  21. BIN
      src/components/Upload/img/icon4.png
  22. 2
      src/manifest.json
  23. 109
      src/pages.json
  24. 87
      src/pages/ascription/ascription.vue
  25. BIN
      src/pages/ascription/img/blue.png
  26. BIN
      src/pages/ascription/img/gray.png
  27. BIN
      src/pages/ascription/img/red.png
  28. BIN
      src/pages/ascription/img/yellow.png
  29. BIN
      src/pages/project/img/default.png
  30. 9
      src/pages/scan-code/scan-code.vue
  31. 0
      src/pagesA/project-webview/project-webview.vue
  32. 0
      src/pagesA/project/project.vue
  33. 0
      src/pagesB/add-info/add-info.vue
  34. 198
      src/pagesB/ascription/ascription.vue
  35. 9
      src/pagesB/hold-all/hold-all.vue
  36. 123
      src/pagesB/scan-code/scan-code.vue
  37. 40
      src/pagesB/wifi-binding/wifi-binding.vue
  38. 2
      src/plugins/p-subproject/p-subproject.vue
  39. 2
      src/plugins/p-wbs-import/p-wbs-import.vue
  40. 2
      src/uni.scss

3
CHANGELOG.md

@ -1,4 +1,4 @@
# 0.1.0 (2021-11-05)
# 0.1.0 (2021-11-08)
### 🌟 新功能
范围|描述|commitId
@ -67,6 +67,7 @@
- | 缓存修改 | [63e1f0d](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/63e1f0d)
- | 获取用户收取那,提交用户信息 | [a3c54f1](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/a3c54f1)
- | 角色栏实现 | [94cd671](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/94cd671)
- | 训练归属界面 | [4c34cee](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/4c34cee)
- | 设置小红点 | [9316bcb](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/9316bcb)
- | 设置界面基本信息板块开发 | [bbaded0](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/bbaded0)
- | 距调整pc端 | [5069aa1](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/5069aa1)

4289
src/common/styles/tailwind.scss

File diff suppressed because it is too large

10
src/components/ConfigInfo/ConfigInfo.vue

@ -27,7 +27,7 @@
</view>
</view>
<view class="py-6 flex flex-col text-center">
<img class="mx-auto weixin-png" src="./img/weixin.png" />
<img class="mx-auto weixin-png" src="https://www.tall.wiki/staticrec/guide/weixin.png" />
<view class="mt-2" style="color: #999">扫码添加客服微信</view>
</view>
</view>
@ -46,10 +46,10 @@ export default {
data() {
return {
itemList: [
{ head: '基本信息', open: true, body: '123', img: require('./img/1.png') },
{ head: '药物使用记录', open: false, body: '123', img: require('./img/2.png') },
{ head: 'Zarit照顾者分担量表', open: false, body: '123', img: require('./img/3.png') },
{ head: '家属成员', open: false, body: '123', img: require('./img/4.png') },
{ head: '基本信息', open: true, body: '123', img: 'https://www.tall.wiki/staticrec/guide/menu1.png' },
{ head: '药物使用记录', open: false, body: '123', img: 'https://www.tall.wiki/staticrec/guide/menu2.png' },
{ head: 'Zarit照顾者分担量表', open: false, body: '123', img: 'https://www.tall.wiki/staticrec/guide/menu3.png' },
{ head: '家属成员', open: false, body: '123', img: 'https://www.tall.wiki/staticrec/guide/menu4.png' },
],
headStyle: {
borderBottom: '1px solid #f8f8f8',

332
src/components/ConfigInfo/components/Info copy.vue

@ -1,332 +0,0 @@
<template>
<view style="border: 1px solid #e5e5e5">
<view v-for="(item, index) in infoList" :key="index">
<template v-for="(colItem, itemIndex) in item">
<view v-if="colItem.showType === 1" :key="itemIndex" class="flex flex-col text-sm ml-4 border-b">
<view class="my-3 flex justify-between items-center" @click="changeShow(index, itemIndex)">
{{ colItem.name }}
<u-icon name="arrow-up" class="mx-2" color="#909399" v-if="colItem.show"></u-icon>
<u-icon name="arrow-down" class="mx-2" color="#909399" v-else></u-icon>
</view>
<view v-if="colItem.show">
<!-- 单选 -->
<view v-if="colItem.type === 1">
<radio-group @change="change($event, index, itemIndex, colItem.type)" class="flex flex-wrap">
<label
class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mr-4 mb-3"
v-for="(item, index) in colItem.radioList"
:key="index"
>
<radio class="radio-style" :value="item" />
<view>{{ item }}</view>
</label>
</radio-group>
</view>
<!-- 多选 -->
<view v-if="colItem.type === 5">
<u-checkbox-group>
<u-checkbox
class="mb-3"
@change="change($event, index, itemIndex, colItem.type)"
v-model="checkboxItem.checked"
v-for="(checkboxItem, checkboxIndex) in colItem.checkList"
:key="checkboxIndex"
:name="checkboxItem.name"
>{{ checkboxItem.name }}
</u-checkbox>
</u-checkbox-group>
</view>
<!-- 吸烟 -->
<view v-if="colItem.type === 10">
<radio-group @change="change($event, index, itemIndex, colItem.type)" class="flex flex-col">
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="0" />
<view></view>
</label>
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="1" />
<view class="flex flex-nowrap items-center">
曾经是但已经戒烟已戒
<input
class="mx-1 w-12 h-6 text-center border-b"
placeholder="0"
v-model="colItem.value1"
:clearable="false"
type="number"
@change="change($event, index, itemIndex, colItem.type)"
/>
</view>
</label>
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="2" />
<view class="flex flex-nowrap items-center">
烟龄
<input
class="mx-1 w-12 h-6 text-center border-b"
placeholder="0"
v-model="colItem.value2"
:clearable="false"
type="number"
@change="change($event, index, itemIndex, colItem.type)"
/>
每天
<input
class="mx-1 w-12 h-6 text-center border-b"
placeholder="0"
:border="true"
v-model="colItem.value3"
type="number"
@change="change($event, index, itemIndex, colItem.type)"
/>
</view>
</label>
</radio-group>
</view>
<!-- 饮酒 -->
<view v-if="colItem.type === 11">
<radio-group @change="change($event, index, itemIndex, colItem.type)" class="flex flex-col">
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="0" />
<view></view>
</label>
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="1" />
<view class="flex flex-nowrap items-center">
曾经是但已经戒酒已戒
<input
class="mx-1 w-12 h-6 text-center border-b"
placeholder="0"
v-model="colItem.value1"
:clearable="false"
type="number"
@change="change($event, index, itemIndex, colItem.type)"
/>
</view>
</label>
</radio-group>
</view>
<!-- 饮茶 -->
<view v-if="colItem.type === 12">
<radio-group @change="change($event, index, itemIndex, colItem.type)" class="flex flex-col">
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="0" />
<view></view>
</label>
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="1" />
<view class="flex flex-nowrap items-center">
曾经是但已经不喝已不喝
<input
class="mx-1 w-12 h-6 text-center border-b"
placeholder="0"
v-model="colItem.value1"
:clearable="false"
type="number"
@change="change($event, index, itemIndex, colItem.type)"
/>
</view>
</label>
<label class="uni-list-cell uni-list-cell-pd flex flex-wrap items-center mb-3">
<radio class="radio-style" :value="2" />
<view class="flex flex-nowrap items-center">
已持续
<input
class="mx-1 w-12 h-6 text-center border-b"
placeholder="0"
v-model="colItem.value2"
:clearable="false"
type="number"
@change="change($event, index, itemIndex, colItem.type)"
/>
</view>
</label>
</radio-group>
</view>
</view>
</view>
<view v-else :key="itemIndex" class="flex justify-between items-center text-sm border-b">
<view class="ml-4 my-3">{{ colItem.name }}</view>
<!-- 日期: 年月日 -->
<view v-if="colItem.type === 2">
<view @click="changeShow(index, itemIndex)">
<text :class="colItem.value ? '' : 'text-gray-350'">{{ colItem.value || '请选择' }} </text>
<u-icon name="arrow-right" class="mx-2" color="#909399"></u-icon>
</view>
<u-picker
@confirm="change($event, index, itemIndex, colItem.type)"
v-model="colItem.show"
mode="time"
:params="paramsDay"
></u-picker>
</view>
<!-- 数字输入框 -->
<view v-if="colItem.type === 3" class="pr-7">
<u-input placeholder="请输入" v-model="colItem.value" type="number" input-align="right" />
</view>
<!-- 单列下拉选框 -->
<view v-if="colItem.type === 4">
<view @click="changeShow(index, itemIndex)">
<text :class="colItem.value ? '' : 'text-gray-350'">{{ colItem.value || '请选择' }} </text>
<u-icon name="arrow-right" class="mx-2" color="#909399"></u-icon>
</view>
<u-select
v-model="colItem.show"
mode="single-column"
:list="colItem.radioList"
@confirm="change($event, index, itemIndex, colItem.type)"
:default-value="[14]"
></u-select>
</view>
<!-- 日期: 年月日时 -->
<view v-if="colItem.type === 6">
<view @click="changeShow(index, itemIndex)">
<text :class="colItem.value ? '' : 'text-gray-350'">{{ colItem.value || '请选择' }} </text>
<u-icon name="arrow-right" class="mx-2" color="#909399"></u-icon>
</view>
<u-picker
@confirm="change($event, index, itemIndex, colItem.type)"
v-model="colItem.show"
mode="time"
:params="paramsHour"
></u-picker>
</view>
<!-- 多列下拉选框 -->
<view v-if="colItem.type === 7">
<view @click="changeShow(index, itemIndex)">
<text :class="colItem.value ? '' : 'text-gray-350'">{{ colItem.value || '请选择' }} </text>
<u-icon name="arrow-right" class="mx-2" color="#909399"></u-icon>
</view>
<u-select
v-model="colItem.show"
mode="mutil-column"
:list="colItem.radioList"
@confirm="change($event, index, itemIndex, colItem.type)"
:default-value="[70, 100]"
title="低血压/高血压"
></u-select>
</view>
<!-- input 文本输入框 -->
<view v-if="colItem.type === 8" class="pr-7">
<u-input placeholder="请输入" v-model="colItem.value" input-align="right" />
</view>
<!-- 地区选择器 -->
<view v-if="colItem.type === 9">
<view @click="changeShow(index, itemIndex)">
<text :class="colItem.value ? '' : 'text-gray-350'">{{ colItem.value || '请选择' }} </text>
<u-icon name="arrow-right" class="mx-2" color="#909399"></u-icon>
</view>
<u-picker
@confirm="change($event, index, itemIndex, colItem.type)"
mode="region"
v-model="colItem.show"
:params="paramsArea"
></u-picker>
</view>
</view>
</template>
<view class="w-full h-2 bg-gray-100" v-if="index !== infoList.length - 1"></view>
</view>
</view>
</template>
<script>
import { infoList } from './config';
export default {
name: 'Info',
data() {
return {
headStyle: {
backgroundColor: '#fff',
height: '46px',
paddingLeft: '1rem',
fontSize: '0.875rem',
},
bodyStyle: { paddingLeft: '1rem' },
infoList,
paramsDay: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false,
},
paramsHour: {
year: true,
month: true,
day: true,
hour: true,
minute: false,
second: false,
},
paramsArea: {
province: true,
city: true,
area: false,
},
};
},
methods: {
changeShow(index, itemIndex) {
console.log('index, itemIndex: ', index, itemIndex);
this.infoList[index][itemIndex].show = !this.infoList[index][itemIndex].show;
},
change(e, index, itemIndex, type) {
console.log('e, index, itemIndex, type: ', e, index, itemIndex, type);
if (type === 1) {
//
this.infoList[index][itemIndex].value = e.target.value;
} else if (type === 2) {
// ()
const value = e.year + '-' + e.month + '-' + e.day;
this.infoList[index][itemIndex].value = value;
} else if (type === 4) {
//
this.infoList[index][itemIndex].value = e[0].value;
} else if (type === 5) {
//
let checkerList = this.infoList[index][itemIndex].value;
if (checkerList.length) {
const i = checkerList.findIndex(item => item === e.name);
if (i < 0) {
checkerList.push(e.name);
} else {
checkerList.splice(i, 1);
}
} else {
checkerList.push(e.name);
}
this.infoList[index][itemIndex].value = checkerList;
} else if (type === 6) {
// ()
const value = e.year + '-' + e.month + '-' + e.day + '-' + e.hour;
this.infoList[index][itemIndex].value = value;
} else if (type === 7) {
//
this.infoList[index][itemIndex].value = e[0].value + '/' + e[1].value;
} else if (type === 9) {
//
this.infoList[index][itemIndex].value = e.province.label + e.city.label;
} else {
this.infoList[index][itemIndex].value = e;
}
},
},
};
</script>
<style lang="scss" scoped></style>
<style>
.radio-style >>> .uni-radio-input {
width: 1rem !important;
height: 1rem !important;
}
</style>

BIN
src/components/ConfigInfo/img/1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/components/ConfigInfo/img/2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/components/ConfigInfo/img/3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1014 B

BIN
src/components/ConfigInfo/img/4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/components/ConfigInfo/img/weixin.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

3
src/components/Projects/ProjectItem.vue

@ -119,9 +119,10 @@ export default {
methods: {
//
openProject(project) {
console.log('project: ', project);
const { name, id, url } = project;
url && (uni.$t.domain = url);
this.$u.route('pages/project/project', {
this.$u.route('/pagesA/project/project', {
u: this.userId,
p: id,
pname: name,

127
src/components/TimeLine copy/TimeLine.vue

@ -1,127 +0,0 @@
<template>
<!-- 时间间隔栏 -->
<!-- <Barrier /> -->
<scroll-view
style="height: 100%"
:lower-threshold="100"
:scroll-y="true"
:upper-threshold="100"
:scroll-into-view="scrollToTaskId"
@scroll="scroll"
@scrolltolower="handleScrollBottom"
@scrolltoupper="handleScrollTop"
id="scroll"
>
<!-- 时间轴 -->
<!-- <u-divider bg-color="#f3f4f6" class="pt-5" fontSize="14px" v-if="topEnd">已到顶部</u-divider> -->
<TimeBox />
<!-- <u-divider bg-color="#f3f4f6" class="pb-5" fontSize="14px" v-if="bottomEnd">我也是有底线的</u-divider> -->
</scroll-view>
</template>
<script>
// import Barrier from './component/Barrier.vue';
import { mapState, mapMutations, mapGetters } from 'vuex';
import { setPlaceholderTasks } from '@/utils/task';
import TimeBox from './component/TimeBox.vue';
export default {
name: 'TimeLine',
components: { TimeBox },
data() {
return { top: 0 };
},
computed: {
...mapState('role', ['visibleRoles']),
...mapState('task', ['scrollTop', 'tasks', 'topEnd', 'bottomEnd', 'showSkeleton', 'timeNode', 'scrollToTaskId']),
...mapGetters('task', ['timeGranularity']),
},
methods: {
...mapMutations('task', ['setScrollTop', 'setShrink', 'setUpTasks', 'setDownTasks', 'setScrollToTaskId']),
//
scroll(e) {
console.log('e: ', e);
this.top = e.detail.scrollTop;
this.setShrink(this.top > this.scrollTop);
this.setScrollTop(this.top);
},
//
async handleScrollTop() {
if (!this.tasks || !this.tasks.length || this.showSkeleton) return;
const startTime = this.tasks[0].planStart - 0;
if (this.topEnd) {
//
console.warn('滚动到顶部没有数据时: ');
const addTasks = setPlaceholderTasks(startTime, true, this.timeGranularity);
this.setUpTasks(addTasks);
} else {
//
console.warn('滚动到顶部有数据时: ');
const detailId = this.tasks.findIndex(task => task.detailId);
const timeNode = this.tasks[detailId].planStart - 0;
const upQuery = {
timeNode,
queryType: 0,
queryNum: 6,
};
await this.$emit('getTasks', upQuery);
}
},
//
async handleScrollBottom() {
if (!this.tasks || !this.tasks.length || this.showSkeleton) return;
const { tasks, timeGranularity } = this;
const startTime = tasks[tasks.length - 1].planStart - 0;
if (this.bottomEnd) {
//
console.warn('滚动到底部没有数据时: ');
const addTasks = setPlaceholderTasks(startTime, false, this.timeGranularity);
this.setDownTasks(addTasks);
} else {
// =+
console.warn('滚动到底部有数据时: ');
const arr = [];
this.tasks.forEach(task => {
if (task.detailId) {
arr.push(task);
}
});
const nextQueryTime = +this.$t.time.add(+arr[arr.length - 1].planStart, 1, timeGranularity);
const downQuery = {
timeNode: nextQueryTime,
queryType: 1,
queryNum: 6,
};
await this.$emit('getTasks', downQuery);
}
},
//
setScrollPosition() {
// storagetaskId id
const taskId = this.$t.storage.getStorageSync('taskId');
if (taskId) {
this.setScrollToTaskId(`a${taskId}`);
this.$t.storage.setStorageSync('taskId', ''); //
} else {
const item = this.tasks.find(task => task.detailId);
if (item) {
this.setScrollToTaskId(`a${item.id}`);
} else {
// taskId
// 线id 线
const task = this.tasks.find(item => this.$moment(+item.planStart).isSame(this.timeNode, this.timeGranularity));
task && this.setScrollToTaskId(`a${task.id}`); // task id
}
}
},
},
};
</script>

42
src/components/TimeLine copy/component/Barrier.vue

@ -1,42 +0,0 @@
<!--
* @Author: aBin
* @email: binbin0314@126.com
* @Date: 2021-07-19 14:22:54
* @LastEditors: aBin
* @LastEditTime: 2021-07-20 11:46:04
-->
<template>
<view class>
<!-- :class="{ active: cycleTasks.time.start === filter.startTime }" -->
<view class="cycle-time active">
<!-- {{ $util.formatStartTimeToCycleTime(filter.time, cycleTasks.time.start) }} -->
2021年30周
</view>
</view>
</template>
<script>
export default {
name: 'Barrier',
data() {
return {};
},
};
</script>
<style scoped lang="scss">
.cycle-time {
padding: 8rpx 16rpx;
margin-bottom: 16rpx;
background: #fafafc;
color: $uni-text-color;
font-size: 28rpx;
position: sticky;
top: -1px;
left: 0;
z-index: 99;
&.active {
background: $uni-color-primary;
color: $uni-text-color-inverse;
}
}
</style>

185
src/components/TimeLine copy/component/TaskTools.vue

@ -1,185 +0,0 @@
<template>
<view>
<view class="flex justify-between" style="min-width: 90px; position: relative">
<u-icon custom-prefix="custom-icon" name="C-bxl-redux" size="17px"></u-icon>
<u-icon custom-prefix="custom-icon" name="attachment" size="21px"></u-icon>
<!-- <u-icon custom-prefix="custom-icon" name="moneycollect" size="20px"></u-icon> -->
<u-icon name="xuanxiang" custom-prefix="custom-icon" size="21px" @click="operation"></u-icon>
<!-- 右上角 ... 弹窗 -->
<view class="popup border shadow-md" v-if="show">
<view class="flex justify-center pb-3 border-b-1">
<span @click="createTask">新建任务</span>
</view>
<view class="flex pt-3 justify-center">
<span>克隆任务</span>
</view>
</view>
</view>
<!-- 遮罩 -->
<view class="mask" v-if="maskShow" @click="closeMask"></view>
<!-- 新建任务弹窗 -->
<CreateTask
:startTime="startTime"
:endTime="endTime"
:task="task"
@showTime="showTime"
@closeMask="closeMask"
class="thirdPopup flex transition-transform"
v-if="createTaskShow"
/>
<u-picker title="开始时间" mode="time" v-model="showStart" :params="params" @confirm="confirmStartTime"></u-picker>
<u-picker title="结束时间" mode="time" v-model="showEnd" :params="params" @confirm="confirmEndTime"></u-picker>
</view>
</template>
<script>
import CreateTask from '../../Title/components/CreateTask.vue';
export default {
components: { CreateTask },
props: {
task: {
type: Object,
default: () => {},
},
},
data() {
return {
show: false, // ...
createTaskShow: false, //
secondShow: false, //
maskShow: false, //
showStart: false,
showEnd: false,
startTime: '', //
endTime: '', //
params: {
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: true,
},
};
},
methods: {
//
operation() {
// this.$t.ui.showToast('');
this.show = !this.show;
},
//
createTask() {
// ...
this.show = false;
//
this.maskShow = true;
//
this.createTaskShow = true;
},
//
closeMask() {
//
this.maskShow = false;
//
this.secondShow = false;
//
this.createTaskShow = false;
},
showTime() {
this.showStart = !this.showStart;
},
//
confirmStartTime(e) {
this.startTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`;
this.showEnd = true;
},
//
confirmEndTime(e) {
this.endTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`;
},
},
};
</script>
<style lang="scss" scoped>
.mask {
width: 100%;
height: 100vh;
z-index: 21;
position: fixed;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.3);
}
.thirdPopup {
background: #ffffff;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 33;
border-radius: 5px;
width: 90%;
}
.popup {
width: 110px;
background: #fff;
position: absolute;
right: 0;
top: 35px;
z-index: 99;
padding: 15px 0;
color: black;
animation: opacity 1s ease-in;
}
@keyframes opacity {
0% {
opacity: 0;
}
50% {
opacity: 0.8;
}
100% {
opacity: 1;
}
}
::v-deep .u-slot-content {
min-width: 0;
}
::v-deep .u-dropdown__content {
min-height: 120px !important;
height: auto !important;
overflow-y: auto;
background: #fff !important;
transition: none !important;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}
::v-deep .u-dropdown__menu__item .u-flex {
justify-content: space-between;
width: 100%;
height: 100%;
flex-wrap: nowrap;
border: 1px solid #afbed1;
padding: 0 8px;
}
::v-deep .u-dropdown__content__mask {
display: none;
}
</style>

142
src/components/TimeLine copy/component/TimeBox.vue

@ -1,142 +0,0 @@
<template>
<view class="column">
<!-- v-if="tasks && tasks.length" -->
<view>
<view :key="task.id" v-for="task in tasks" :id="`a${task.id}`">
<view class="flex">
<TimeStatus :task="task" />
<view class="flex items-center justify-between flex-1 ml-2 task-column">
<view v-if="task.process !== 4">{{ $moment(+task.planStart).format(startTimeFormat) }}</view>
<view v-else>{{ $moment(+task.planStart).format('D日') }}</view>
<!-- 任务功能菜单 -->
<TaskTools v-if="task.process !== 4" :task="task" />
</view>
</view>
<view class="border-l-2 border-gray-300 plugin">
<view class="h-3" v-if="task.process === 4"></view>
<view class="ml-3 overflow-hidden shadow-lg task-box">
<u-card
:show-foot="false"
:show-head="false"
:style="{ height: setHeight(task.panel) }"
class="h-16"
margin="0"
v-if="showSkeleton"
>
<view slot="body">
<view>
<skeleton :banner="false" :loading="true" :row="4" animate class="mt-2 u-line-2 skeleton"></skeleton>
</view>
</view>
</u-card>
<u-card
@click="onClickTask(task.planStart - 0, task.id)"
:show-foot="false"
:show-head="false"
:style="{ height: setHeight(task.panel) }"
class="h-16"
margin="0"
v-if="tasks && tasks.length && task.process !== 4 && !showSkeleton"
>
任务面板插件
<view slot="body">
<view class="p-0 u-col-between">
<view :key="pIndex" v-for="(row, pIndex) in task.plugins">
<view class="grid gap-2" v-if="row.length">
<Plugin
:class="[`row-span-${plugin.row}`, `col-span-${plugin.col}`]"
:task="task"
:key="plugin.pluginTaskId"
:plugin-task-id="plugin.pluginTaskId"
:plugin-id="plugin.pluginId"
:param="plugin.param"
:style-type="styleType || 0"
v-for="plugin in row"
/>
</view>
</view>
</view>
</view>
</u-card>
</view>
</view>
</view>
</view>
<!-- 局部弹框操作栏 -->
<Tips />
</view>
</template>
<script>
import { mapState, mapMutations, mapGetters, mapActions } from 'vuex';
import Skeleton from '@/components/Skeleton/Skeleton';
import TimeStatus from './TimeStatus.vue';
import TaskTools from './TaskTools.vue';
export default {
name: 'TimeBox',
components: { TimeStatus, Skeleton, TaskTools },
data() {
return { currentComponent: '', styleType: 0 };
},
computed: {
...mapState('role', ['roleId']),
...mapState('task', ['timeUnit', 'tasks', 'taskLoading', 'showSkeleton']),
...mapGetters('task', ['startTimeFormat']),
},
methods: {
...mapActions('task', ['getGlobal']),
...mapMutations('task', ['setTipsContent', 'setTipsContent']),
//
setHeight(panel) {
if (panel && panel.height) {
return panel.height + 'px';
} else {
return 'auto';
}
},
/**
* 点击了定期任务的面板 更新可变的日常任务
* @param {number} planStart 任务计划开始时间
* @param {string} taskId 任务id
*/
onClickTask(planStart, taskId) {
const param = { roleId: this.roleId, timeNode: planStart, timeUnit: this.timeUnit };
this.getGlobal(param);
this.$t.storage.setStorageSync('taskId', taskId);
this.$t.storage.setStorageSync('roleId', this.roleId);
},
},
};
</script>
<style scoped lang="scss">
.task-box {
border-radius: 24rpx;
}
.column {
padding: 24px 14px;
}
.task-column {
height: 33px;
}
.plugin {
margin-top: 8px;
margin-bottom: 8px;
margin-left: 15px;
}
::v-deep .ml-2 {
margin-left: 16px;
}
::v-deep .ml-3 {
margin-left: 20px;
}
</style>

231
src/components/TimeLine copy/component/TimeStatus.vue

@ -1,231 +0,0 @@
<template>
<view class="u-font-14">
<view
class="flex items-center justify-center rounded-full icon-column"
:style="{ color: orderStyle.color }"
@click="changeStatus(task.process, $event)"
>
<!-- 1进行中 2暂停中 3已完成 -->
<u-circle-progress
:percent="orderStyle.persent - 0"
:active-color="orderStyle.color"
bg-color="rgba(255,255,255,0)"
border-width="4"
:width="task.process !== 4 ? 66 : 50"
v-if="task.process === 1 || task.process === 2 || task.process === 3"
>
<view class="u-progress-content">
<view class="u-progress-dot"></view>
<view class="u-progress-info">
<u-icon :name="orderStyle.icon" v-if="orderStyle.icon" size="15px"></u-icon>
<template v-else>{{ durationText }}</template>
</view>
</view>
</u-circle-progress>
<!-- 0未开始 4添加任务 -->
<view class="flex items-center justify-center rounded-full progress-box" v-else :class="task.process === 4 ? 'progress-box-4' : ''">
<view class="u-progress-content">
<view class="u-progress-dot"></view>
<view class="u-progress-info">
<span v-if="orderStyle.icon">
<u-icon :name="orderStyle.icon" v-if="task.process !== 4" size="15px"></u-icon>
<u-icon :name="orderStyle.icon" v-else size="15px"></u-icon>
</span>
<template v-else>{{ durationText }}</template>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
export default {
name: 'TimeStatus',
props: { task: { type: Object, default: () => {} } },
data() {
return {
time: '',
start: [{ text: '确认开始任务', color: 'blue' }],
pause: [{ text: '继续' }, { text: '重新开始任务', color: 'blue' }, { text: '结束' }],
proceed: [{ text: '暂停' }, { text: '重新开始任务', color: 'blue' }, { text: '结束' }],
again: [{ text: '重新开始任务', color: 'blue' }],
timer: null,
durationText: 0,
};
},
computed: {
...mapState('task', ['tip']),
status() {
return this.task ? this.task.process : 0;
},
taskName() {
return this.task ? this.task.name : '';
},
taskId() {
return this.task ? this.task.id : '';
},
//
// 0 1 2 3
orderStyle() {
let color = '#9CA3AF';
let icon = 'play-right-fill';
let persent = 100;
switch (this.status) {
case 1: //
color = '#60A5FA';
icon = '';
if (+this.computeCyclePersent() > 100) {
persent = 96;
} else {
persent = this.computeCyclePersent();
}
break;
case 2: //
color = '#F87171';
icon = 'pause';
persent = 50; // TODO:
break;
case 3: //
color = '#34D399';
icon = 'checkmark';
persent = 100;
break;
case 4: //
color = '#60A5FA';
icon = 'plus';
persent = 100;
break;
default:
//
color = '#9CA3AF';
icon = 'play-right';
persent = 100;
break;
}
return { color, icon, persent };
},
},
mounted() {
// TODO:
const time = this.computeDurationText();
this.updateDurationText(time);
},
destroyed() {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
},
methods: {
...mapMutations('task', ['setTip']),
/**
* 点击了图标 修改任务状态
* @param {object} event
*/
changeStatus(process, event) {
if (process === 4) {
this.addTask();
return;
}
// return false;
const { status, taskId, taskName, tip } = this;
tip.status = status;
tip.taskId = taskId;
tip.left = event.target.x;
tip.top = event.target.y;
tip.show = true;
tip.text = this.genetateTips(status, taskName);
this.setTip(tip);
},
//
addTask() {
this.$t.ui.showToast('新建任务');
},
//
computeCyclePersent() {
if (!this.task || !this.task.realStart || !this.task.planDuration) return 100;
const { realStart, planDuration } = this.task;
return (((Date.now() - +realStart) * 100) / +planDuration).toFixed(2);
},
/**
* 计算tip的标题内容
*/
genetateTips(status, content) {
switch (status) {
case 0:
return `确认开始任务"${content}"吗?`;
case 1:
return `请选择要执行的操作`;
case 2:
return `请选择要执行的操作`;
case 3:
return `是否要重新开始此任务`;
}
},
//
// = realStart() + planDuration()
// = -
// = realStart + planDuration - Date.now()
computeDurationText() {
const { realStart, planDuration } = this.task;
const leftTime = +realStart + +planDuration - Date.now(); //
const { num, time } = this.$t.time.computeDurationText(leftTime);
if (num <= 0) {
clearInterval(this.timer);
this.timer = null;
}
this.durationText = num;
return time;
},
updateDurationText(time) {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
if (!time) return;
setInterval(() => {
this.computeDurationText();
}, time);
},
},
};
</script>
<style scoped lang="scss">
.icon-column {
height: 33px;
width: 33px;
}
.one {
height: 33px;
width: 33px;
}
.progress-box {
background: rgba(255, 255, 255, 0);
width: 33px;
height: 33px;
border: 2px solid #9ca3af;
}
.progress-box-4 {
width: 25px;
height: 25px;
border: 2px solid #60a5fa;
}
</style>

7
src/components/TimeLine copy/component/Title.vue

@ -1,7 +0,0 @@
<!--
* @Author: aBin
* @email: binbin0314@126.com
* @Date: 2021-07-19 15:40:02
* @LastEditors: aBin
* @LastEditTime: 2021-07-19 15:40:03
-->

24
src/components/Upload/Upload.vue

@ -9,27 +9,29 @@
class="icons icon1"
size="76"
name="https://www.tall.wiki/staticrec/guide/icon1.png"
@click="openPage('/pages/scan-code/scan-code')"
@click="openPage('/pagesB/scan-code/scan-code')"
></u-icon>
<!-- @click="openPage('/pagesB/scan-code/scan-code')" -->
<!-- @click="scanCode" -->
<u-icon
class="icons icon2"
size="76"
name="https://www.tall.wiki/staticrec/guide/icon2.png"
v-if="showAddInfo"
@click="openPage('/pages/add-info/add-info')"
@click="openPage('/pagesB/add-info/add-info')"
></u-icon>
<u-icon
class="icons icon3"
size="76"
:class="showAddInfo ? '' : 'icon3-top'"
name="https://www.tall.wiki/staticrec/guide/icon3.png"
@click="openPage('/pages/ascription/ascription')"
@click="openPage('/pagesB/ascription/ascription')"
></u-icon>
<u-icon
class="icons icon4"
size="76"
name="https://www.tall.wiki/staticrec/guide/icon4.png"
@click="openPage('/pages/hold-all/hold-all')"
@click="openPage('/pagesB/hold-all/hold-all')"
></u-icon>
</view>
</view>
@ -53,7 +55,7 @@ export default {
this.$emit('success');
data.url && (uni.$t.domain = data.url);
setTimeout(() => {
this.$u.route('/pages/project/project', {
this.$u.route('/pagesA/project/project', {
u: this.userId,
p: data.id,
pname: data.pname,
@ -72,8 +74,18 @@ export default {
},
openPage(url) {
console.log('url: ', url);
uni.navigateTo({ url: `${url}` });
this.showMenu = false;
},
//
scanCode() {
uni.scanCode({
success: function (res) {
console.log('条码类型:' + res.scanType);
console.log('条码内容:' + res.result);
},
});
},
},
};

BIN
src/components/Upload/img/icon1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/components/Upload/img/icon2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/components/Upload/img/icon3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/components/Upload/img/icon4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

2
src/manifest.json

@ -57,7 +57,7 @@
/* */
},
"mp-weixin": {
"appid": "wxf72a76c2ea24a472",
"appid": "wx733e229f00dc5c6f",
"setting": {
"urlCheck": false
},

109
src/pages.json

@ -14,54 +14,73 @@
"navigationStyle": "default"
}
},
{
"path": "pages/git-phone-power/git-phone-power",
"style": {
"navigationBarTitleText": "授权信息",
"navigationStyle": "custom"
}
}
],
"subPackages":[
{
"path": "pages/project/project",
"style": {
"navigationBarTitleText": "项目详情页",
"navigationStyle": "custom"
}
},
{
"path": "pages/git-phone-power/git-phone-power",
"style": {
"navigationBarTitleText": "授权信息",
"navigationStyle": "custom"
}
},
{
"path": "pages/project-webview/project-webview",
"style": {
"navigationBarTitleText": "项目详情页",
"navigationStyle": "custom"
}
},
{
"path": "pages/scan-code/scan-code",
"style": {
"navigationBarTitleText": "扫码",
"navigationStyle": "default"
}
},
{
"path": "pages/add-info/add-info",
"style": {
"navigationBarTitleText": "基本信息",
"navigationStyle": "default"
}
},
{
"path": "pages/ascription/ascription",
"style": {
"navigationBarTitleText": "训练归属",
"navigationStyle": "default"
}
"root": "pagesA",
"pages": [
{
"path": "project/project",
"style": {
"navigationBarTitleText": "项目详情页",
"navigationStyle": "custom"
}
},
{
"path": "project-webview/project-webview",
"style": {
"navigationBarTitleText": "项目详情页",
"navigationStyle": "custom"
}
}
]
},
{
"path": "pages/hold-all/hold-all",
"style": {
"navigationBarTitleText": "工具箱",
"navigationStyle": "default"
}
"root": "pagesB",
"pages": [
{
"path": "scan-code/scan-code",
"style": {
"navigationBarTitleText": "扫码",
"navigationStyle": "default"
}
},
{
"path": "add-info/add-info",
"style": {
"navigationBarTitleText": "基本信息",
"navigationStyle": "default"
}
},
{
"path": "ascription/ascription",
"style": {
"navigationBarTitleText": "训练归属",
"navigationStyle": "default"
}
},
{
"path": "hold-all/hold-all",
"style": {
"navigationBarTitleText": "工具箱",
"navigationStyle": "default"
}
},
{
"path": "wifi-binding/wifi-binding",
"style": {
"navigationBarTitleText": "WIFI绑定",
"navigationStyle": "default"
}
}
]
}
],
"globalStyle": {

87
src/pages/ascription/ascription.vue

@ -1,87 +0,0 @@
<template>
<view class="bg-white px-2">
<view v-for="(list, index) in lists" :key="index">
<view class="flex flex-col">
<text>{{ list.title }}</text>
<img :src="list.img" class="w-full" />
<text>训练结果</text>
<view class="flex flex-nowrap mt-3 rounded-3xl overflow-hidden">
<view v-for="i in lines" :key="i.value" class="flex-1" :class="i.value === 6 ? '' : 'box'">
<view class="w-full h-2" :class="i.checked ? 'bg-blue-500' : 'bg-gray-100'" @click="chooseLevel(i.value)"></view>
</view>
</view>
</view>
</view>
<EndLine />
</view>
</template>
<script>
export default {
data() {
return {
lines: [
{
value: 1,
checked: true,
},
{
value: 2,
checked: false,
},
{
value: 3,
checked: false,
},
{
value: 4,
checked: false,
},
{
value: 5,
checked: false,
},
{
value: 6,
checked: false,
},
],
lists: [
{
title: '迷宫',
img: 'https://www.tall.wiki/staticrec/guide/2.png',
trainer: ['张斌', '思南', '雪梅', '方圆', '张野', '马壮', '慧娟'],
},
{
title: '迷宫',
img: 'https://www.tall.wiki/staticrec/guide/2.png',
trainer: ['张斌', '思南', '雪梅', '方圆', '张野', '马壮', '慧娟'],
},
],
};
},
methods: {
chooseLevel(index) {
this.lines.forEach((line, i) => {
console.log('i: ', i, index);
if (i < index) {
line.checked = true;
} else {
line.checked = false;
}
});
},
},
};
</script>
<style lang="scss" scoped>
page {
background-color: $uni-bg-color-grey;
}
.box {
margin-right: 2px;
}
</style>

BIN
src/pages/ascription/img/blue.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/pages/ascription/img/gray.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/pages/ascription/img/red.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/pages/ascription/img/yellow.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/pages/project/img/default.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

9
src/pages/scan-code/scan-code.vue

@ -1,9 +0,0 @@
<template>
<view>扫码</view>
</template>
<script>
export default {};
</script>
<style></style>

0
src/pages/project-webview/project-webview.vue → src/pagesA/project-webview/project-webview.vue

0
src/pages/project/project.vue → src/pagesA/project/project.vue

0
src/pages/add-info/add-info.vue → src/pagesB/add-info/add-info.vue

198
src/pagesB/ascription/ascription.vue

@ -0,0 +1,198 @@
<template>
<view>
<view v-for="(list, index) in lists" :key="index">
<view class="flex flex-col px-3 bg-white pb-4">
<text class="my-3">{{ list.title }}</text>
<img :src="list.img" class="w-full" />
<text class="py-3">训练结果</text>
<view class="flex flex-nowrap mt-10 rounded-3xl relative">
<view
class="bubble"
:style="{
left: list.position.left,
color: list.position.color,
backgroundImage: `url(${list.position.bgPic})`,
backgroundSize: '100% 100%',
backgroundRepeat: 'no-repeat',
}"
>
{{ list.position.value }}
</view>
<view v-for="i in list.levels" :key="i.value" class="flex-1" :class="i.value === 6 ? '' : 'box'">
<view
class="w-full h-2"
:class="i.checked ? list.position.boxBg : 'bg-gray-100'"
@click="chooseLevel($event, index, i.value)"
></view>
</view>
</view>
</view>
<view class="flex flex-col px-3 bg-white mt-2">
<view class="py-3 flex justify-between" @click="changeShow(index)">
训练者
<u-icon name="arrow-down" v-if="!list.showTrain"></u-icon>
<u-icon name="arrow-up" v-else></u-icon>
</view>
<view class="flex flex-wrap pb-3" v-if="list.showTrain">
<u-radio-group v-model="list.train" class="mr-1">
<u-radio class="mr-1" @change="radioChange" v-for="(item, trainIndex) in list.trainer" :key="trainIndex" :name="item">
{{ item }}
</u-radio>
</u-radio-group>
</view>
</view>
</view>
<EndLine />
</view>
</template>
<script>
export default {
data() {
return {
lists: [
{
title: '迷宫',
img: 'https://www.tall.wiki/staticrec/guide/1.png',
train: '',
showTrain: false,
trainer: ['张斌', '思南', '雪梅', '方圆', '张野', '马壮', '慧娟'],
levels: [
{
value: 1,
checked: false,
},
{
value: 2,
checked: false,
},
{
value: 3,
checked: false,
},
{
value: 4,
checked: false,
},
{
value: 5,
checked: false,
},
{
value: 6,
checked: false,
},
],
position: {
left: 0,
color: '#EDEDED',
value: '非常困难',
bgPic: 'https://www.tall.wiki/staticrec/guide/bubble-gray.png',
boxBg: '',
},
},
{
title: '迷宫',
img: 'https://www.tall.wiki/staticrec/guide/1.png',
train: '',
showTrain: false,
trainer: ['张斌', '思南', '雪梅', '方圆', '张野', '马壮', '慧娟'],
levels: [
{
value: 1,
checked: false,
},
{
value: 2,
checked: false,
},
{
value: 3,
checked: false,
},
{
value: 4,
checked: false,
},
{
value: 5,
checked: false,
},
{
value: 6,
checked: false,
},
],
position: {
left: 0,
color: '#EDEDED',
value: '非常困难',
bgPic: 'https://www.tall.wiki/staticrec/guide/bubble-gray.png',
boxBg: '',
},
},
],
};
},
methods: {
chooseLevel(e, index, value) {
const position = this.lists[index].position;
position.left = e.target.offsetLeft + 'px';
console.log('value: ', value, 0 < value < 3);
if (value < 3) {
position.color = '#EB5A0D';
position.value = '非常困难';
position.bgPic = 'https://www.tall.wiki/staticrec/guide/bubble-red.png';
position.boxBg = 'bg-red-500';
} else if (value < 5) {
position.color = '#1890FF';
position.value = '略有困难';
position.bgPic = 'https://www.tall.wiki/staticrec/guide/bubble-blue.png';
position.boxBg = 'bg-blue-500';
} else {
position.color = '#F4C130';
position.value = '轻松完成';
position.bgPic = 'https://www.tall.wiki/staticrec/guide/bubble-yellow.png';
position.boxBg = 'bg-yellow-500';
}
this.lists[index].levels.forEach((line, i) => {
if (i < value) {
line.checked = true;
} else {
line.checked = false;
}
});
},
radioChange(e) {
console.log(e);
},
changeShow(index) {
this.lists[index].showTrain = !this.lists[index].showTrain;
},
},
};
</script>
<style lang="scss" scoped>
page {
background-color: $uni-bg-color-grey;
}
.box {
margin-right: 2px;
}
.bubble {
position: absolute;
top: -40px;
width: 70px;
height: 30px;
line-height: 26px;
text-align: center;
font-size: 14px;
}
</style>

9
src/pages/hold-all/hold-all.vue → src/pagesB/hold-all/hold-all.vue

@ -4,7 +4,8 @@
<view class="flex justify-between items-center py-3 border-b">
<view>{{ item.title }}</view>
<view class="flex items-center text-gray-400">
<text class="mr-2">{{ item.name || '绑定' }}</text>
<text class="mr-2" v-if="item.name">{{ item.name }}</text>
<text class="mr-2" v-else @click="openPage('/pages/wifi-binding/wifi-binding')">绑定</text>
<u-icon name="wifi" :color="item.bound ? '#1890FF' : '#999999'" size="36"></u-icon>
</view>
</view>
@ -45,6 +46,12 @@ export default {
],
};
},
methods: {
openPage(url) {
uni.navigateTo({ url: `${url}` });
},
},
};
</script>

123
src/pagesB/scan-code/scan-code.vue

@ -0,0 +1,123 @@
<template>
<!-- <view>
<Info class="bg-white" />
<EndLine />
</view> -->
<!--scan.wxml-->
<view class="scan-view">
<camera class="scan-camera" mode="scanCode" binderror="cameraError" bindscancode="scancode" frame-size="large">
<!-- <cover-image class="cover-corner cover-left-top" src="/images/left-top.png"></cover-image>
<cover-image class="cover-corner cover-right-top" src="/images/right-top.png"></cover-image>
<cover-image class="cover-corner cover-left-bottom" src="/images/left-bottom.png"></cover-image>
<cover-image class="cover-corner cover-right-bottom" src="/images/right-bottom.png"></cover-image> -->
<cover-view class="scan-animation" :animation="animation"></cover-view>
</camera>
<view class="text-white">扫二维码/条形码</view>
<!-- 这里可以处理其他内容 -->
<u-button type="primary">主要按钮</u-button>
</view>
</template>
<script>
//
let animation = wx.createAnimation({});
export default {
data() {
return { animation };
},
onLoad() {},
onShow() {
this.donghua();
},
methods: {
donghua() {
var that = this;
console.log('that: ', that);
//
let m = true;
setInterval(
function () {
if (m) {
animation.translateY(250).step({ duration: 3000 });
m = !m;
} else {
animation.translateY(-10).step({ duration: 3000 });
m = !m;
}
// that.setData({ animation: animation.export() });
}.bind(this),
3000,
);
},
scancode(e) {
//
let res = e.detail.result;
console.log('res: ', res);
},
},
};
</script>
<style lang="scss" scoped>
page {
background-color: $uni-bg-color-grey;
}
.scan-view {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
background-color: #010101;
position: fixed;
align-items: center;
justify-content: space-around;
}
.scan-camera {
width: 500rpx;
height: 500rpx;
border-radius: 6rpx;
margin: 30rpx;
border: 1px solid #08fdfe;
}
.cover-corner {
width: 80rpx;
height: 80rpx;
position: absolute;
}
.cover-left-top {
left: 0;
top: 0;
}
.cover-right-top {
right: 0;
top: 0;
}
.cover-left-bottom {
left: 0;
bottom: 0;
}
.cover-right-bottom {
right: 0;
bottom: 0;
}
.scan-animation {
position: absolute;
top: -10rpx;
left: 10rpx;
width: 480rpx;
height: 8rpx;
background-color: #08fdfe;
border-radius: 50%;
}
</style>

40
src/pagesB/wifi-binding/wifi-binding.vue

@ -0,0 +1,40 @@
<template>
<view class="flex flex-col items-center">
<view class="wifi-bg my-5">
<u-icon name="wifi"></u-icon>
</view>
<view class="font-semibold mb-5 text-base">ccsens_5G</view>
<view class="bg-white w-full flex justify-between items-center py-2 px-3">
<text class="mr-3">WIFI密码</text>
<u-input v-model="value" placeholder="请输入" input-align="right" class="text-base" />
</view>
<view class="flex w-full px-3 pt-10">
<u-button type="primary" class="w-full">绑定</u-button>
</view>
</view>
</template>
<script>
export default {
data() {
return { value: '' };
},
};
</script>
<style lang="scss" scoped>
page {
background-color: $uni-bg-color-grey;
}
.wifi-bg {
width: 8rem;
height: 8rem;
line-height: 8rem;
font-size: 5rem;
color: $uni-text-color-inverse;
background: $uni-bg-color-blue;
border-radius: 50%;
text-align: center;
}
</style>

2
src/plugins/p-subproject/p-subproject.vue

@ -45,7 +45,7 @@ export default {
openProject(project) {
const { name, id, url } = project;
url && (uni.$t.domain = url);
this.$u.route('pages/project/project', {
this.$u.route('/pagesA/project/project', {
u: this.userId,
p: id,
pname: name,

2
src/plugins/p-wbs-import/p-wbs-import.vue

@ -38,7 +38,7 @@ export default {
//
this.onUploadSuccess();
setTimeout(() => {
this.$u.route('/pages/project/project', {
this.$u.route('/pagesA/project/project', {
u: this.userId,
p: data.id,
pname: data.pname,

2
src/uni.scss

@ -13,6 +13,7 @@
*/
@import 'uview-ui/theme.scss';
@import './common/styles/tailwind.scss';
/* 颜色变量 */ /* 行为相关颜色 */
$uni-color-primary: #0284c7;
$uni-color-success: #4cd964;
@ -29,6 +30,7 @@ $roleChoiceColor: #f59e0b;
/* 背景颜色 */
$uni-bg-color: #ffffff;
$uni-bg-color-blue: #1890ff;
$uni-bg-color-grey: #f8f8f8;
$uni-bg-color-hover: #f1f1f1; //点击状态颜色
$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色

Loading…
Cancel
Save