Commit a68d5a4b authored by 仇晓婷's avatar 仇晓婷

任务

parent a014758f
<template> <template>
<div class="flex fd tree-menu"> <div class="flex fd tree-menu">
<!-- 任务结构 -->
<div class="p-list">
<h3> <h3>
任务结构 <Dropdown @on-click="clickItem">
<div class="fr mr10 mt10"> <a href="javascript:void(0)">
{{ downName }}
<Icon type="ios-arrow-down"></Icon>
</a>
<DropdownMenu slot="list">
<DropdownItem
v-for="item in projectList"
:key="item.id"
:name="item.id"
>{{ item.title }}</DropdownItem
>
</DropdownMenu>
</Dropdown>
</h3>
<div class="mr10 mt10 icon-d">
<ButtonGroup class="fr" size="small"> <ButtonGroup class="fr" size="small">
<Button :icon="expand ? 'md-arrow-dropright' : 'md-arrow-dropdown'" @click="toggle" title="展开/合并"></Button> <Button
:icon="expand ? 'md-arrow-dropright' : 'md-arrow-dropdown'"
@click="toggle"
title="展开/合并"
></Button>
<Button icon="md-refresh" title="刷新" @click="loadTree"></Button> <Button icon="md-refresh" title="刷新" @click="loadTree"></Button>
<Button icon="md-rewind" title="收起" @click="hide"></Button> <Button icon="md-rewind" title="收起" @click="hide"></Button>
</ButtonGroup> </ButtonGroup>
</div> </div>
</h3> </div>
<div class="search"> <div class="search">
<Input search placeholder="请输入关键字" v-model="keys" clearable /> <Input search placeholder="请输入关键字" v-model="keys" clearable />
</div> </div>
<div class="fg"> <div class="fg">
<div class="tree"> <div class="tree">
<Tree :data="data" :render="renderContent" ref="tree" @on-select-change="change"></Tree> <Tree
:data="data"
:render="renderContent"
ref="tree"
@on-select-change="change"
></Tree>
</div>
</div> </div>
</div> </div>
</div>
</template> </template>
<script> <script>
...@@ -28,32 +53,62 @@ export default { ...@@ -28,32 +53,62 @@ export default {
return { return {
keys: "", keys: "",
expand: true, expand: true,
list: [] list: [],
downName: "",
projectList: [],
}; };
}, },
props: { props: {
curId: { curId: {
type: String, type: String,
default: '', default: "",
}, },
}, },
created() { created() {
this.loadTree(); this.listSlecet();
// this.loadTree();
}, },
methods: { methods: {
loadTree() { clickItem(val) {
console.log(val);
this.projectList.forEach((e) => {
if (val == e.id) {
this.downName = e.title;
}
});
this.loadTree(val);
},
listSlecet() {
let data = {
conditions: [],
sortBy: "id",
isDesc: false,
};
this.$api.post(`${material}/projectmain/list`, data).then((r) => {
if (r.result) {
this.projectList = r.result;
this.downName = this.projectList[0].title;
// this.curId = this.projectList[0].id;
this.loadTree(this.projectList[0].id);
}
});
},
loadTree(v) {
let params = { let params = {
conditions: [{ conditions: [
{
fieldName: "projectId", fieldName: "projectId",
fieldValue: this.curId, fieldValue: v,
conditionalType: "Equal" conditionalType: "Equal",
}] },
} ],
this.$api.post(`${material}/projectplan/list`, params).then(r => { };
this.$api.post(`${material}/projectplan/list`, params).then((r) => {
var data = this.$u.toTree( var data = this.$u.toTree(
r.result, r.result,
null, null,
u => { (u) => {
u.value = u.id; u.value = u.id;
u.expand = true; u.expand = true;
u.selected = false; u.selected = false;
...@@ -67,37 +122,29 @@ export default { ...@@ -67,37 +122,29 @@ export default {
toggle() { toggle() {
this.expand = !this.expand; this.expand = !this.expand;
}, },
renderContent(h, { renderContent(h, { root, node, data }) {
root, var items = this.$store.getters.dictionaryByKey(
node, "mes.project_plan.Status"
data );
}) { var item = items.filter((u) => {
// let type = "md-folder"; return u.code == data.status;
// if (data.isProduct != 0) { })[0];
// type = "ios-image"; console.warn("jjjjjj", items, item);
// } var color = item.color || "black";
return h("div", [ return h("div", [
h("state", { h("state", {
props: { props: {
code: "mes.project_plan.Type", code: "mes.project_plan.Type",
type: "icon", type: "icon",
value: data.type + "" value: data.type + "",
} size: 16,
}),
h(
"span", {
style: {
// color: data.isProduct == 0 ? "#000" : "rgba(38, 128, 235, 1)"
}
}, },
data.title }),
), h("Badge", {
h("state", {
props: { props: {
code: "mes.project_plan.Status", color: color,
type: "tag", text: data.title,
value: data.status },
}
}), }),
]); ]);
}, },
...@@ -108,14 +155,14 @@ export default { ...@@ -108,14 +155,14 @@ export default {
// if (b.bomId !== 0) { // if (b.bomId !== 0) {
// ids.push(b.bomId); // ids.push(b.bomId);
// } // }
var curentId = '' var curentId = "";
curentId = b.id curentId = b.id;
productIds.push(b.value); productIds.push(b.value);
if (b.children) { if (b.children) {
addId(b.children); addId(b.children);
function addId(data) { function addId(data) {
data.map(u => { data.map((u) => {
// if (u.bomId !== 0) { // if (u.bomId !== 0) {
// ids.push(u.bomId); // ids.push(u.bomId);
// } // }
...@@ -130,7 +177,7 @@ export default { ...@@ -130,7 +177,7 @@ export default {
}, },
hide() { hide() {
this.$emit("on-hide"); this.$emit("on-hide");
} },
}, },
computed: { computed: {
data() { data() {
...@@ -140,7 +187,7 @@ export default { ...@@ -140,7 +187,7 @@ export default {
search(this.keys, items); search(this.keys, items);
function search(keys, data) { function search(keys, data) {
data.map(u => { data.map((u) => {
if (keys.length < 2) { if (keys.length < 2) {
u.expand = expand; u.expand = expand;
result.push(u); result.push(u);
...@@ -155,12 +202,12 @@ export default { ...@@ -155,12 +202,12 @@ export default {
}); });
} }
return result; return result;
} },
}, },
watch: { watch: {
curId(v) { curId(v) {
if (v) { if (v) {
this.loadTree(); this.loadTree(v);
} }
}, },
}, },
...@@ -168,36 +215,43 @@ export default { ...@@ -168,36 +215,43 @@ export default {
</script> </script>
<style lang="less"> <style lang="less">
@import "../../assets/css/custom.less"; // @import "../../assets/css/custom.less";
.tree-menu {
h3 {
height: 50px;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 50px;
color: @left-tree-header-color;
background: @left-tree-header-bg-color;
opacity: 1;
padding-left: 10px;
}
.search { // .tree-menu {
height: 50px; // h3 {
padding: 5px 10px; // height: 50px;
} // font-size: 14px;
// font-family: Microsoft YaHei;
// font-weight: bold;
// line-height: 50px;
// color: @left-tree-header-color;
// background: @left-tree-header-bg-color;
// opacity: 1;
// padding-left: 10px;
// }
.p-list {
position: relative;
}
.icon-d {
position: absolute;
top: 0;
right: 0;
}
// .search {
// height: 50px;
// padding: 5px 10px;
// }
.fg { // .fg {
flex: none; // flex: none;
// height:0; // // height:0;
overflow: auto; // overflow: auto;
padding-left: 10px; // padding-left: 10px;
} // }
.tree { // .tree {
height: calc(100vh - 215px); // height: calc(100vh - 215px);
overflow: auto; // overflow: auto;
} // }
} // }
</style> </style>
<template> <template>
<div class="ib" @click="showLife"> <div class="ib" @click="showLife">
<div class="ib" v-if="!isMore"> <div class="ib" v-if="!isMore">
<span v-if="type=='text'" :style="style">{{name}}</span> <span v-if="type == 'text'" :style="style">{{ name }}</span>
<Tag v-if="type=='tag'" :color="tagcolor">{{name}}</Tag> <Tag v-if="type == 'tag'" :color="tagcolor">{{ name }}</Tag>
<Badge v-if="type=='dot'" :color="tagcolor" :text="name" /> <Badge v-if="type == 'dot'" :color="tagcolor" :text="name" />
<Icon v-if="type=='icon'" :type="item.icon" :color="tagcolor" :title="name" size="24" /> <Icon
v-if="type == 'icon'"
:type="item.icon"
:color="tagcolor"
:title="name"
:size="size"
/>
</div> </div>
<div class="ib" v-else v-for="(li,i) in items" :key="i"> <div class="ib" v-else v-for="(li, i) in items" :key="i">
<span v-if="type=='text'" :style="li.style">{{li.name}}</span> <span v-if="type == 'text'" :style="li.style">{{ li.name }}</span>
<Tag v-if="type=='tag'" :color="li.tagcolor">{{li.name}}</Tag> <Tag v-if="type == 'tag'" :color="li.tagcolor">{{ li.name }}</Tag>
<Badge v-if="type=='dot'" :color="li.tagcolor" :text="li.name" />&nbsp; <Badge v-if="type == 'dot'" :color="li.tagcolor" :text="li.name" />&nbsp;
</div> </div>
<Modal v-model="modal" title="生命周期" width="800" footer-hide :mask-closable="false"> <Modal
v-model="modal"
title="生命周期"
width="800"
footer-hide
:mask-closable="false"
>
<component :is="detail" :code="code" :value="value" :mode="mode" /> <component :is="detail" :code="code" :value="value" :mode="mode" />
</Modal> </Modal>
</div> </div>
...@@ -21,48 +33,52 @@ export default { ...@@ -21,48 +33,52 @@ export default {
name: "state", name: "state",
data() { data() {
return { return {
mode:'0', mode: "0",
name: "", name: "",
isMore: false, isMore: false,
modal:false, modal: false,
item: {}, item: {},
items: [], items: [],
data: [], data: [],
detail:null, detail: null,
}; };
}, },
props: { props: {
default: { default: {
type: String, type: String,
default: "" default: "",
}, },
type: { type: {
type: String, type: String,
default: "text", default: "text",
validator: function(value) { validator: function (value) {
return ["text", "tag", "dot", "icon"].indexOf(value) != -1; return ["text", "tag", "dot", "icon"].indexOf(value) != -1;
} },
}, },
code: { code: {
type: String, type: String,
required: true required: true,
}, },
value: { value: {
type: [String, Number], type: [String, Number],
required: false required: false,
}, },
color: { color: {
type: Boolean, type: Boolean,
default: true default: true,
},
size: {
type: Number,
default: 24,
}, },
icon: { icon: {
type: Boolean, type: Boolean,
default: false default: false,
}, },
img: { img: {
type: Boolean, type: Boolean,
default: false default: false,
} },
}, },
created() { created() {
this.data = this.$store.getters.dictionaryByKey(this.code) || []; this.data = this.$store.getters.dictionaryByKey(this.code) || [];
...@@ -71,7 +87,7 @@ export default { ...@@ -71,7 +87,7 @@ export default {
setName(v) { setName(v) {
if ((v + "").indexOf(",") == -1) { if ((v + "").indexOf(",") == -1) {
var item; var item;
this.data.map(u => { this.data.map((u) => {
if (u.code == v) { if (u.code == v) {
item = u; item = u;
} }
...@@ -81,7 +97,7 @@ export default { ...@@ -81,7 +97,7 @@ export default {
this.item = item; this.item = item;
} else { } else {
if (this.value == "undefined") { if (this.value == "undefined") {
this.name = ' ' this.name = " ";
} else { } else {
this.name = this.value; this.name = this.value;
} }
...@@ -90,7 +106,7 @@ export default { ...@@ -90,7 +106,7 @@ export default {
this.isMore = true; this.isMore = true;
var items = []; var items = [];
var ul = (v + "").split(","); var ul = (v + "").split(",");
this.data.map(u => { this.data.map((u) => {
if (ul.indexOf(u.code) > -1) { if (ul.indexOf(u.code) > -1) {
u.tagcolor = u.color | "default"; u.tagcolor = u.color | "default";
u.style = { color: u.color | "inherit" }; u.style = { color: u.color | "inherit" };
...@@ -99,11 +115,11 @@ export default { ...@@ -99,11 +115,11 @@ export default {
}); });
this.items = items; this.items = items;
} }
} },
,showLife(){ showLife() {
this.modal= true ; this.modal = true;
this.detail=()=>import("./life"); this.detail = () => import("./life");
} },
}, },
computed: { computed: {
tagcolor() { tagcolor() {
...@@ -125,9 +141,9 @@ export default { ...@@ -125,9 +141,9 @@ export default {
color: color:
this.item && this.item.color != "" && this.item.color != null this.item && this.item.color != "" && this.item.color != null
? this.item.color ? this.item.color
: "inherit" : "inherit",
}; };
} },
}, },
watch: { watch: {
value(v) { value(v) {
...@@ -139,7 +155,7 @@ export default { ...@@ -139,7 +155,7 @@ export default {
this.setName(this.value); this.setName(this.value);
this.$forceUpdate(); this.$forceUpdate();
} }
} },
} },
}; };
</script> </script>
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment