Browse Source

Merge remote-tracking branch 'origin/wrr' into project

project
wally 4 years ago
parent
commit
ce1855aedd
  1. 10
      CHANGELOG.md
  2. 3
      package.json
  3. 14
      src/App.vue
  4. 6
      src/apis/project.js
  5. 3
      src/common/styles/app.scss
  6. 231
      src/components/ShareProject/ShareProject.vue
  7. 136
      src/components/Title/Title.vue
  8. 320
      src/components/Title/components/NewProjects.vue
  9. 3
      src/main.js
  10. 42
      src/pages/project/project.vue

10
CHANGELOG.md

@ -1,4 +1,4 @@
# 0.1.0 (2021-09-02)
# 0.1.0 (2021-09-03)
### 🌟 新功能
范围|描述|commitId
@ -23,6 +23,7 @@
- | 任务状态时间显示 | [56f5183](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/56f5183)
- | 任务进行中状态数字 | [27b7326](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/27b7326)
- | 全局插件及默认插件位置修改 | [6c80d08](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6c80d08)
- | 分享项目和点击分享的项目链接 | [032d83c](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/032d83c)
- | 向右箭头图标变化 | [8e9ca55](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8e9ca55)
- | 字体大小更改 | [82cfdd4](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/82cfdd4)
- | 存token | [b8a178d](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/b8a178d)
@ -35,6 +36,7 @@
- | 提交到本地 | [9cbe411](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9cbe411)
- | 插件参数处理调整 | [a3e68d3](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a3e68d3)
- | 插件数据获取 | [5b91bdc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5b91bdc)
- | 新建形目 | [f7d7108](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f7d7108)
- | 日历定位;合并 | [ea3f937](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ea3f937)
- | 日常任务插件调整 | [c1881f9](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c1881f9)
- | 时间基准线,默认插件 | [a33ba1e](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a33ba1e)
@ -46,6 +48,7 @@
- | 检查交付物 | [9d92be5](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/9d92be5)
- | 模拟接口测试 | [69e7931](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/69e7931)
- | 添加内置插件-交付物 | [6e0bc46](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6e0bc46)
- | 模拟接口测试 | [69e7931](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/69e7931)
- | 添加子任务插件 子项目插件 | [7bda7e2](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7bda7e2)
- | 添加时间轴上下滚动 | [2b81bbc](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/2b81bbc)
- | 添加项目排序 | [a0b491b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/a0b491b)
@ -61,6 +64,7 @@
- | 面变化首页变化 | [5e860f1](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/5e860f1)
- | 项目api url设置 | [6cd5245](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/6cd5245)
- | 项目列表, 项目url | [32e005b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/32e005b)
- | 项目创建分享链接 | [eb2c4ba](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/eb2c4ba)
- | 首页项目样式改变 | [8514c85](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8514c85)
@ -157,6 +161,7 @@
范围|描述|commitId
--|--|--
- | README.md | [ab0eb05](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/ab0eb05)
- | 新建项目,分享项目样式修改 | [4524d4a](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4524d4a)
### 🔧 测试
@ -197,11 +202,13 @@
- | 1.时间轴筛选相同的时间替换数据 2.整理代码 | [e082ccb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e082ccb)
- | 修改代码格式 | [14123d7](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/14123d7)
- | 修改定期任务骨架屏高度 | [909a734](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/909a734)
- | 修改样式 | [322b0fb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/322b0fb)
- | 小红点api缓存修改 | [e992343](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/e992343)
- | 插件查询及展示 | [4dba770](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/4dba770)
- | 整理代码 | [7a55315](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7a55315)
- | 日历的更改 | [7353ac8](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/7353ac8)
- | 测试接口 | [215e074](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/215e074)
- | 添加弹框动画 | [8903854](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/8903854)
- | 组件文件夹新建 | [22bfe7b](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/22bfe7b)
- | 组件文件夹新建 | [17bb8c9](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/17bb8c9)
- | 组件文件夹新建 | [1421504](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/1421504)
@ -234,4 +241,3 @@
- | style:index | [978f272](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/978f272)
- | !2 基础模板v1.1.0 | [f5e61dd](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/f5e61dd)
- | init | [c0f1deb](https://dd.tall.wiki/gitea/wally/tall-mui-3-project/commits/c0f1deb)

3
package.json

@ -42,6 +42,7 @@
"regenerator-runtime": "^0.12.1",
"uview-ui": "^1.8.4",
"vue": "^2.6.11",
"vue-clipboard2": "^0.3.1",
"vuex": "^3.2.0"
},
"devDependencies": {
@ -74,14 +75,12 @@
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-vue": "^6.2.2",
"husky": "^3.0.9",
"jest": "^25.4.0",
"lint-staged": "^11.0.0",
"mini-types": "*",
"miniprogram-api-typings": "*",
"postcss": "^7.0.36",
"postcss-comment": "^2.0.0",
"prettier": "^2.2.1",
"puppeteer": "^10.2.0",
"right-pad": "^1.0.1",
"sass": "^1.38.2",
"sass-loader": "^8.0.2",

14
src/App.vue

@ -16,12 +16,14 @@ export default {
if (!this.token) {
// tokenuserIdtoken
// token userId
if (!options.query || !options.query.u) {
// u (userId)
this.$t.ui.showToast('缺少用户信息参数');
} else {
const data = await this.getToken(options.query.u);
this.noPhone(data.phone);
if (!options.query.share) {
if (!options.query || !options.query.u) {
// u (userId)
this.$t.ui.showToast('缺少用户信息参数');
} else {
const data = await this.getToken(options.query.u);
this.noPhone(data.phone);
}
}
}
// FIXME:

6
src/apis/project.js

@ -2,6 +2,12 @@ const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {};
//根据id获取项目信息
vm.$u.api.findProjectById = param => vm.$u.post(`${uni.$t.domain}/project/findProjectById`, param);
//创建分享连接
vm.$u.api.createShare = param => vm.$u.post(`${uni.$t.domain}/share/create`, param);
//点击分享连接
vm.$u.api.clickShare = param => vm.$u.post(`${uni.$t.domain}/share/click`, param);
};
export default { install };

3
src/common/styles/app.scss

@ -1,3 +1,6 @@
.min-0 {
min-width: 0;
}
.border-b-1 {
border-bottom-width: 1px;
}

231
src/components/ShareProject/ShareProject.vue

@ -0,0 +1,231 @@
<template>
<view class="secondPopup flex justify-center">
<view class="content p-3 pb-8">
<view class="mb-3 font-bold text-base flex justify-center">创建分享链接</view>
<view class="flex flex-col">
<view class="mb-1">用户以什么角色加入项目</view>
<!-- 下拉多选 -->
<u-dropdown>
<u-dropdown-item v-model="roleValue" :title="roleValue" :options="allRoles" @change="changeRole"></u-dropdown-item>
</u-dropdown>
<!-- 复制链接 -->
<view class="link flex items-center mt-4">
<view class="link-url">{{ links }}</view>
<!-- <u-button style="border-radius: 0" type="primary" @click="copyPasteboard">复制链接</u-button> -->
<u-button
style="border-radius: 0"
type="primary"
v-clipboard:copy="links"
v-clipboard:success="copySuccess"
v-clipboard:error="copyError"
>
复制链接
</u-button>
</view>
<view @click="select">
<!-- 全选按钮 -->
<!-- <view class="flex mt-4">
<view>
<u-checkbox-group>
<u-checkbox v-model="checked" @change="checkedAll"></u-checkbox>
</u-checkbox-group>
</view>
<view>已选择({{ this.quantity }})</view>
<view style="color: #f37378; margin-left: 20px">批量删除</view>
</view> -->
<!-- 多选框 -->
<!-- <view>
<u-checkbox-group class="checkboxs flex flex-1 items-center mt-4" v-for="(item, index) in list" :key="index">
<div class="flex-1 flex items-center">
<u-checkbox v-model="item.checked"></u-checkbox>
<u-avatar :src="item.src" size="55" style="background: #d8dce0; margin-right: 10px"></u-avatar>
<div style="width: 60%; font-size: 12px">
<div style="color: gray">{{ item.name }}</div>
<div style="color: #c4d0e1">{{ item.joinMethod }}</div>
</div>
</div>
</u-checkbox-group>
</view> -->
</view>
</view>
</view>
</view>
</template>
<script>
import { mapGetters, mapState } from 'vuex';
export default {
data() {
return {
roleValue: '观众',
links: 'https://kdocs.cn/l/cbs', //
checked: false, //
//
list: [
{
name: '冯老师',
src: '',
joinMethod: '文件创建者',
role: '观众',
checked: false,
disabled: false,
},
{
name: '马壮',
src: '',
joinMethod: '通过链接加入',
role: '干系人',
checked: false,
disabled: false,
},
{
name: '张野',
src: '',
joinMethod: '通过链接加入',
role: '观众',
checked: false,
disabled: false,
},
],
quantity: 0, //
path: '',
};
},
computed: {
...mapState('role', ['visibleRoles', 'invisibleRoles']),
...mapGetters('project', ['projectId']),
allRoles() {
let newArr = [];
if (this.visibleRoles.length || this.invisibleRoles.length) {
const arr = this.visibleRoles.concat(this.invisibleRoles);
arr.forEach(role => {
let item = { value: '', label: '' };
item.id = role.id;
item.value = role.name;
item.label = role.name;
newArr.push(item);
});
const firstItem = { id: '0', value: '观众', label: '观众' };
newArr.unshift(firstItem);
}
return newArr;
},
},
async created() {
this.path = window.location.href.split('?')[0];
const { path, projectId } = this;
const params = { path: `${path}share=1`, projectId, roleId: '0' };
await this.creatShare(params);
},
methods: {
//
async changeRole(value) {
this.roleValue = value;
const role = this.allRoles.find(item => item.value == value);
const { path, projectId } = this;
const params = { path, projectId, roleId: role.id };
await this.creatShare(params);
},
//
copySuccess() {
this.$t.ui.showToast('复制成功');
},
//
copyError() {
this.$t.ui.showToast('复制失败,请稍后重试');
},
/**
* 创建分享链接
* @param path 路径前缀
* @param projectId 项目id
* @param roleId 角色id
*/
async creatShare(params) {
try {
const data = await this.$u.api.createShare(params);
this.links = data.path;
} catch (error) {
console.error('error: ', error);
}
},
//
copyPasteboard() {
uni.setClipboardData({
data: this.links,
success: function (res) {
console.log('链接复制成功', res.data);
},
});
},
//
select() {
this.quantity = 0;
this.list.forEach(val => {
if (val.checked == true) {
this.quantity++;
}
});
},
//
checkedAll() {
this.list.map(val => {
val.checked = !this.checked;
});
},
},
};
</script>
<style lang="scss" scoped>
.content {
width: 330px;
max-height: 400px;
}
.link {
height: 40px;
border: 1px solid #afbed1;
}
.link-url {
color: #afbed1;
width: 80%;
line-height: 40px;
margin-left: 5px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
/deep/ .u-slot-content {
min-width: 0;
}
/deep/ .u-dropdown__content {
height: 160px !important;
overflow-y: auto;
background: #fff !important;
transition: none !important;
}
/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;
}
/deep/.u-dropdown__content__mask {
display: none;
}
</style>

136
src/components/Title/Title.vue

@ -1,6 +1,6 @@
<template>
<view>
<u-navbar class="overflow-hidden" :is-back="false">
<u-navbar :custom-back="onBack" class="overflow-hidden">
<view class="flex justify-start flex-1 px-3 font-bold min-0">
<view class="truncate">{{ project.name }}</view>
</view>
@ -11,15 +11,43 @@
<u-icon class="m-1" name="xuanxiang" custom-prefix="custom-icon" size="20px" @click="operation"></u-icon>
</view>
</u-navbar>
<view
class="mask"
v-if="maskShow"
@click="closeMask"
style="width: 100%; height: 100vh; z-index: 21; position: fixed; background: rgba(0, 0, 0, 0.3)"
></view>
<!-- 右上角 ... 弹窗 -->
<view class="popup border shadow-md" v-if="show">
<view class="flex pb-3 border-b-1">
<u-icon name="plus-circle" size="36" style="margin: 0 15px 3px 0"></u-icon>
<view @click="newprojects">新建任务</view>
</view>
<view class="flex pt-3">
<u-icon name="share" size="32" style="margin: 0 15px 3px 0"></u-icon>
<view @click="share">分享项目</view>
</view>
</view>
<!-- 分享项目弹窗 -->
<ShareProject v-if="secondShow" class="secondPopup" />
<!-- 新建项目弹窗 -->
<NewProjects @closeMask="closeMask" class="thirdPopup flex transition-transform" v-if="newProjectsShow" />
</view>
</template>
<script>
import { mapGetters, mapState } from 'vuex';
import NewProjects from './components/NewProjects.vue';
export default {
name: 'ProjectTitle',
components: { NewProjects },
data() {
return { showBack: false };
return {
show: false, // ...
newProjectsShow: false, //
secondShow: false, //
maskShow: false, //
};
},
computed: {
...mapState('project', ['project']),
@ -27,6 +55,17 @@ export default {
},
methods: {
//
onBack() {
// eslint-disable-next-line no-undef
const pages = getCurrentPages(); //
if (pages.length > 1) {
uni.navigateBack();
} else {
this.$u.route('/', { u: this.userId });
}
},
// LWBS
lwbs() {
// this.$t.ui.showToast('LWBS');
@ -42,13 +81,104 @@ export default {
//
operation() {
// this.$t.ui.showToast('');
this.show = !this.show;
},
//
newprojects() {
// ...
this.show = false;
//
this.maskShow = true;
//
this.newProjectsShow = true;
},
//
share() {
// ...
this.show = false;
//
this.maskShow = true;
//
this.secondShow = true;
},
//
closeMask() {
//
this.maskShow = false;
//
this.secondShow = false;
//
this.newProjectsShow = false;
},
},
};
</script>
<style lang="scss" scoped>
.secondPopup {
background: #ffffff;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 33;
border-radius: 5px;
}
.thirdPopup {
background: #ffffff;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 33;
border-radius: 5px;
}
.popup {
width: 40%;
background: #fff;
position: absolute;
right: 0;
z-index: 99;
padding: 15px;
color: black;
animation: opacity 1s ease-in;
}
@keyframes opacity {
0% {
opacity: 0;
}
50% {
opacity: 0.8;
}
100% {
opacity: 1;
}
}
::deep .u-slot-content {
min-width: 0;
}
::deep .u-dropdown__content {
height: 160px !important;
overflow-y: auto;
background: #fff !important;
transition: none !important;
}
::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;
}
::deep .u-dropdown__content__mask {
display: none;
}
</style>

320
src/components/Title/components/NewProjects.vue

@ -0,0 +1,320 @@
<template>
<div class="new-projects-box" :style="{ height: arrow ? '330px' : '580px' }">
<div class="form">
<!-- 项目名称 -->
<view class="popupTitle flex justify-center">新建任务</view>
<div class="flex items-center">
<div>名称</div>
<u-input v-model="nameValue" :type="type" :border="border" />
</div>
<!-- 起止时间 -->
<div class="flex items-center">
<div>起止-截止时间</div>
<u-input v-model="timeValue" :type="type" :border="border" />
</div>
<!-- 多选框 -->
<div class="flex justify-between items-center">
<div>负责人</div>
<div label="负责人" style="width: 85%">
<u-dropdown ref="uDropdown">
<u-dropdown-item :title="dropTitle">
<view class="slot-content bg-white">
<div
class="multiple-choice flex flex-row justify-between mb-1"
v-for="(option, optionIndex) in options"
:key="optionIndex"
@click="change(optionIndex)"
>
<view v-model="option.value">{{ option.label }}</view>
<u-icon v-if="option.dropdownShow" name="checkbox-mark" color="#2979ff" size="28"></u-icon>
</div>
</view>
</u-dropdown-item>
</u-dropdown>
</div>
</div>
<!-- 下拉图标 -->
<div class="flex justify-center" style="margin-top: 20px">
<u-icon v-if="arrow" name="arrow-down" size="28" @click="openDropdown"></u-icon>
<u-icon v-else name="arrow-up" size="28" @click="closeSecondDropdown"></u-icon>
</div>
<!-- 下拉框的内容 -->
<div v-if="show">
<!-- 描述 -->
<div class="flex items-center">
<div>描述</div>
<u-input v-model="decripeValue" :type="type" :border="border" />
</div>
<!-- 所属项目 -->
<div class="w flex items-center">
<div>所属项目</div>
<div class="xiangmu" style="position: relative; background: #fff">当前项目</div>
</div>
<!-- 所属任务 -->
<div class="w flex items-center">
<div>所属任务</div>
<div class="renwu">当前任务</div>
</div>
<!-- 上道工序 -->
<div class="flex items-center">
<div>上道工序</div>
<u-input v-model="lastValue" :type="type" :border="border" />
</div>
<!-- 检查人多选框 -->
<div class="flex justify-between items-center">
<div>检查人</div>
<div class="" label="检查人" style="width: 85%">
<u-dropdown ref="dropdown">
<u-dropdown-item :title="secondDropTitle" style="border: none">
<view class="slot-content bg-white">
<div
class="mb-1 multiple-choice flex flex-row justify-between"
v-for="(checkoutOption, Index) in checkoutOptions"
:key="Index"
@click="choose(Index)"
>
<view v-model="checkoutOption.value">{{ checkoutOption.label }}</view>
<u-icon v-if="checkoutOption.dropdownShow" name="checkbox-mark" color="#2979ff" size="28"></u-icon>
</div>
</view>
</u-dropdown-item>
</u-dropdown>
</div>
</div>
<!-- 是否是日常任务 -->
<div class="flex justify-between items-center" style="padding: 25px 0; border-bottom: 1px solid #adadad">
<div>是否日常任务</div>
<u-switch v-model="checked" size="28"></u-switch>
</div>
<div style="padding-top: 25px">
<div>交付物</div>
<u-input style="border-bottom: 1px solid #dcdfe6" placeholder="交付物名称1" :type="type" :border="border" />
<u-input style="border-bottom: 1px solid #dcdfe6" placeholder="交付物名称2" :type="type" :border="border" />
</div>
</div>
<div class="flex justify-between items-center btns">
<u-button class="btn flex justify-center" type="primary" shape="circle" size="medium" @click="$emit('closeMask')">提交</u-button>
<u-button class="btn flex justify-center" shape="circle" size="medium" @click="$emit('closeMask')">取消</u-button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
projects: ['我是睡', '我叫什么', '我的名字是'],
title: 'tall1',
arrow: true,
show: false,
checked: false, //
nameValue: '', //
timeValue: '', //
decripeValue: '', //
projectValue: '', //
projectShow: false, //
taskValue: '', //
lastValue: '', //
type: 'text',
border: true,
dropTitle: '观众,干系人', //
secondDropTitle: '干系人', //
//
options: [
{
label: '观众',
value: 1,
dropdownShow: false,
status: false,
},
{
label: '距离优先',
value: 2,
dropdownShow: false,
status: false,
},
{
label: '价格优先',
value: 3,
dropdownShow: false,
status: false,
},
],
//
checkoutOptions: [
{
label: '观众',
value: 1,
dropdownShow: false,
status: false,
},
{
label: '距离优先',
value: 2,
dropdownShow: false,
status: false,
},
{
label: '价格优先',
value: 3,
dropdownShow: false,
status: false,
},
],
//
diliverables: [],
//
projectOptions: [
{
label: 'tall1',
value: 1,
},
{
label: 'tall2',
value: 2,
},
{
label: 'tall3',
value: 3,
},
],
};
},
methods: {
isProjectShow($event) {
console.log(this.projectValue);
console.log($event);
this.projectShow = true;
},
//
closeDropdown() {
this.$refs.uDropdown.close();
},
//
dropdownClosed() {
this.$refs.dropdown.close();
},
//
change(index) {
console.log(index);
let arr = [...this.options];
//
arr[index].dropdownShow = !arr[index].dropdownShow;
//
this.dropTitle = arr[index].label;
let shows = '';
// arr
arr.map(val => {
if (val.dropdownShow === true) {
shows += val.label + ',';
}
});
this.options = [...arr];
// ','
this.dropTitle = shows.slice(0, shows.length - 1);
console.log(this.dropTitle);
},
//
choose(index) {
console.log(index);
let arr = [...this.checkoutOptions];
//
arr[index].dropdownShow = !arr[index].dropdownShow;
//
this.secondDropTitle = arr[index].label;
let shows = '';
// arr
arr.map(val => {
if (val.dropdownShow === true) {
shows += val.label + ',';
}
});
this.checkoutOptions = [...arr];
// ','
this.secondDropTitle = shows.slice(0, shows.length - 1);
console.log(this.secondDropTitle);
// this.dropTitle = arr[value - 1].label;
},
//
// project(value) {
// console.log(value);
// this.title = this.projectOptions[value - 1].label;
// },
//
openDropdown() {
this.arrow = !this.arrow;
this.show = true;
},
//
closeSecondDropdown() {
this.arrow = !this.arrow;
this.show = false;
},
},
};
</script>
<style lang="scss" scoped>
.projectBelong {
height: auto;
background: #fff;
padding: 0 10px;
color: #c0c4cc;
position: absolute;
z-index: 55;
}
.form {
display: flex;
flex-direction: column;
width: 100%;
height: 550px;
overflow-y: scroll;
}
/deep/.u-input--border {
border: none;
border-radius: 0;
}
/deep/.u-dropdown__menu__item > uni-view {
border: none !important;
padding: 5px;
}
.u-input {
border-bottom: 1px solid #ccc;
}
.btn {
margin-top: 20px;
}
.popupTitle {
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
}
.new-projects-box {
margin-top: 20px;
padding: 15px;
width: 330px;
overflow: hidden;
}
.btns {
padding: 0 30px;
}
.xiangmu {
margin-left: 11px;
color: rgb(192, 196, 204);
}
.renwu {
margin-left: 11px;
color: rgb(192, 196, 204);
}
.w {
width: 300px;
height: 39px;
}
</style>

3
src/main.js

@ -1,6 +1,7 @@
import App from './App';
import Tall from '@/utils/tall';
import Vue from 'vue';
import VueClipboard from 'vue-clipboard2';
import dayjs from 'dayjs';
import plugin from '@/apis/plugin.js';
import project from '@/apis/project.js';
@ -22,6 +23,8 @@ import wbs from '@/apis/wbs.js';
// Vue.use(indexedDB);
//#endif
Vue.use(VueClipboard);
Vue.config.productionTip = false;
Vue.prototype.$moment = dayjs;
Vue.use(uView);

42
src/pages/project/project.vue

@ -36,7 +36,13 @@ export default {
},
onLoad(options) {
this.init(options);
if (options.share && options.share === '1') {
console.log('是分享来的');
this.shareInit(options);
} else {
console.log('不是分享来的');
this.init(options);
}
},
watch: {
@ -287,6 +293,40 @@ export default {
}
},
//
async shareInit(options) {
const user = JSON.parse(this.$t.storage.getStorageSync('user'));
if (user && user.id) {
await this.getToken(user.id);
const res = await this.clickShare({ code: options.shareId });
if (res && res.projectId) {
let query = { ...this.$route.query };
query = {
u: user.id,
p: res.projectId,
};
this.$router.push({ path: this.$route.path, query });
this.init(query);
}
} else {
this.$t.ui.showToast('缺少用户信息参数,请登录');
}
},
/**
* 点击分享连接
* @param {any} commit
* @param {object} param 请求参数
*/
async clickShare(param) {
try {
const data = await this.$u.api.clickShare(param);
return data;
} catch (error) {
this.$t.ui.showToast(error.msg || '获取失败');
}
},
/**
* 通过项目id获取项目信息
* @param {object} params 提交的参数

Loading…
Cancel
Save