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

任务

parent a014758f
<template> <template>
<div class="flex fd tree-menu"> <div class="flex fd tree-menu">
<h3> <!-- 任务结构 -->
任务结构 <div class="p-list">
<div class="fr mr10 mt10"> <h3>
<ButtonGroup class="fr" size="small"> <Dropdown @on-click="clickItem">
<Button :icon="expand ? 'md-arrow-dropright' : 'md-arrow-dropdown'" @click="toggle" title="展开/合并"></Button> <a href="javascript:void(0)">
<Button icon="md-refresh" title="刷新" @click="loadTree"></Button> {{ downName }}
<Button icon="md-rewind" title="收起" @click="hide"></Button> <Icon type="ios-arrow-down"></Icon>
</ButtonGroup> </a>
</div> <DropdownMenu slot="list">
</h3> <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">
<Button
:icon="expand ? 'md-arrow-dropright' : 'md-arrow-dropdown'"
@click="toggle"
title="展开/合并"
></Button>
<Button icon="md-refresh" title="刷新" @click="loadTree"></Button>
<Button icon="md-rewind" title="收起" @click="hide"></Button>
</ButtonGroup>
</div>
</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
</div> :data="data"
:render="renderContent"
ref="tree"
@on-select-change="change"
></Tree>
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
name: "", name: "",
data() { data() {
return { return {
keys: "", keys: "",
expand: true, expand: true,
list: [] list: [],
}; downName: "",
projectList: [],
};
},
props: {
curId: {
type: String,
default: "",
},
},
created() {
this.listSlecet();
// this.loadTree();
},
methods: {
clickItem(val) {
console.log(val);
this.projectList.forEach((e) => {
if (val == e.id) {
this.downName = e.title;
}
});
this.loadTree(val);
}, },
props: { listSlecet() {
curId: { let data = {
type: String, conditions: [],
default: '', 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);
}
});
}, },
created() { loadTree(v) {
this.loadTree(); let params = {
conditions: [
{
fieldName: "projectId",
fieldValue: v,
conditionalType: "Equal",
},
],
};
this.$api.post(`${material}/projectplan/list`, params).then((r) => {
var data = this.$u.toTree(
r.result,
null,
(u) => {
u.value = u.id;
u.expand = true;
u.selected = false;
u.checked = false;
},
"upId"
);
this.list = this.$u.clone(data);
});
}, },
methods: { toggle() {
loadTree() { this.expand = !this.expand;
let params = { },
conditions: [{ renderContent(h, { root, node, data }) {
fieldName: "projectId", var items = this.$store.getters.dictionaryByKey(
fieldValue: this.curId, "mes.project_plan.Status"
conditionalType: "Equal" );
}] var item = items.filter((u) => {
} return u.code == data.status;
this.$api.post(`${material}/projectplan/list`, params).then(r => { })[0];
var data = this.$u.toTree( console.warn("jjjjjj", items, item);
r.result, var color = item.color || "black";
null, return h("div", [
u => { h("state", {
u.value = u.id; props: {
u.expand = true; code: "mes.project_plan.Type",
u.selected = false; type: "icon",
u.checked = false; value: data.type + "",
}, size: 16,
"upId" },
); }),
this.list = this.$u.clone(data); h("Badge", {
}); props: {
}, color: color,
toggle() { text: data.title,
this.expand = !this.expand; },
}, }),
renderContent(h, { ]);
root, },
node, change(v, b) {
data // console.log(b);
}) { let ids = [];
// let type = "md-folder"; let productIds = [];
// if (data.isProduct != 0) { // if (b.bomId !== 0) {
// type = "ios-image"; // ids.push(b.bomId);
// } // }
return h("div", [ var curentId = "";
h("state", { curentId = b.id;
props: { productIds.push(b.value);
code: "mes.project_plan.Type", if (b.children) {
type: "icon", addId(b.children);
value: data.type + ""
}
}),
h(
"span", {
style: {
// color: data.isProduct == 0 ? "#000" : "rgba(38, 128, 235, 1)"
}
},
data.title
),
h("state", {
props: {
code: "mes.project_plan.Status",
type: "tag",
value: data.status
}
}),
]);
},
change(v, b) {
// console.log(b);
let ids = [];
let productIds = [];
// if (b.bomId !== 0) {
// ids.push(b.bomId);
// }
var curentId = ''
curentId = b.id
productIds.push(b.value);
if (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);
// } // }
productIds.push(u.value); productIds.push(u.value);
if (u.children) { if (u.children) {
addId(u.children); addId(u.children);
}
});
}
} }
this.$emit("on-select", curentId, b, productIds); });
},
hide() {
this.$emit("on-hide");
} }
}
this.$emit("on-select", curentId, b, productIds);
},
hide() {
this.$emit("on-hide");
}, },
computed: { },
data() { computed: {
let items = this.$u.clone(this.list); data() {
let expand = this.expand; let items = this.$u.clone(this.list);
let result = []; let expand = this.expand;
search(this.keys, items); let result = [];
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);
} else { } else {
u.expand = expand; u.expand = expand;
if (u.title.indexOf(keys) > -1) { if (u.title.indexOf(keys) > -1) {
result.push(u); result.push(u);
} else if (u.children) { } else if (u.children) {
search(keys, u.children); search(keys, u.children);
}
}
});
} }
return result; }
} });
}
return result;
}, },
watch: { },
curId(v) { watch: {
if (v) { curId(v) {
this.loadTree(); if (v) {
} this.loadTree(v);
}, }
}, },
},
}; };
</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
<component :is="detail" :code="code" :value="value" :mode="mode" /> v-model="modal"
title="生命周期"
width="800"
footer-hide
:mask-closable="false"
>
<component :is="detail" :code="code" :value="value" :mode="mode" />
</Modal> </Modal>
</div> </div>
</template> </template>
...@@ -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
<template> <template>
<Layout class="full"> <Layout class="full">
<Sider hide-trigger v-if="showMenu" class="menu_side" width="300"> <Sider hide-trigger v-if="showMenu" class="menu_side" width="300">
<ProjectTaskTree :curId="projectId" @on-hide="onHide" @on-select="productSearch" /> <ProjectTaskTree
:curId="projectId"
@on-hide="onHide"
@on-select="productSearch"
/>
</Sider> </Sider>
<div v-if="!showMenu" class="show_menu"> <div v-if="!showMenu" class="show_menu">
<a class="menu_play fr" @click="showMenuFn" title="展开"> <a class="menu_play fr" @click="showMenuFn" title="展开">
<Icon type="ios-arrow-forward" size="24" /> <Icon type="ios-arrow-forward" size="24" />
</a> </a>
</div> </div>
<Content class="content" :class="!showMenu?'con_bord':''"> <Content class="content" :class="!showMenu ? 'con_bord' : ''">
<DataGrid :columns="columns" ref="grid" :action="action" :conditions="easySearch" :lazy="true" :set="false"> <DataGrid
<template slot="easySearch"> :columns="columns"
<Form ref="formInline" inline> ref="grid"
<FormItem> :action="action"
<div class="taskMenu"> :conditions="easySearch"
<Menu mode="horizontal" active-name="2" @on-select="onSelect"> :lazy="true"
<MenuItem name="1"> :set="false"
所有 >
</MenuItem> <template slot="easySearch">
<MenuItem name="2"> <Form ref="formInline" inline>
未关闭 <FormItem>
</MenuItem> <div class="taskMenu">
<MenuItem name="3"> <Menu mode="horizontal" active-name="2" @on-select="onSelect">
指派给我 <MenuItem name="1"> 所有 </MenuItem>
</MenuItem> <MenuItem name="2"> 未关闭 </MenuItem>
<MenuItem name="4"> <MenuItem name="3"> 指派给我 </MenuItem>
由我参与 <MenuItem name="4"> 由我参与 </MenuItem>
</MenuItem> <MenuItem name="5"> 已延期 </MenuItem>
<MenuItem name="5"> <!--
已延期
</MenuItem>
<!--
<Submenu name="6"> <Submenu name="6">
<template slot="title"> <template slot="title">
更多 更多
...@@ -42,504 +43,557 @@ ...@@ -42,504 +43,557 @@
</MenuGroup> </MenuGroup>
</Submenu> </Submenu>
--> -->
</Menu> </Menu>
</div> </div>
<div class="taskTab" v-if="false"> <div class="taskTab" v-if="false">
<Tabs value="statu2"> <Tabs value="statu2">
<TabPane label="所有" name="statu1" /> <TabPane label="所有" name="statu1" />
<TabPane label="未关闭" name="statu2" /> <TabPane label="未关闭" name="statu2" />
<TabPane label="指派给我" name="statu3" /> <TabPane label="指派给我" name="statu3" />
<TabPane label="由我参与" name="statu4" /> <TabPane label="由我参与" name="statu4" />
<TabPane label="已延期" name="statu5" /> <TabPane label="已延期" name="statu5" />
</Tabs> </Tabs>
</div> </div>
</FormItem> </FormItem>
<FormItem prop="keys"><Input placeholder="请输入项目标题/计划名称/任务标题" v-model="easySearch.keys.value" v-width="240" /> </FormItem> <FormItem prop="keys"
<FormItem><Button type="primary" @click="search">查询</Button></FormItem> ><Input
<!-- placeholder="请输入项目标题/计划名称/任务标题"
v-model="easySearch.keys.value"
v-width="240"
/>
</FormItem>
<FormItem
><Button type="primary" @click="search">查询</Button></FormItem
>
<!--
<FormItem> <FormItem>
<Button @click="highSearch" type="text"> <Button @click="highSearch" type="text">
<Icon type="md-search" />高级 <Icon type="md-search" />高级
</Button> </Button>
</FormItem> </FormItem>
--> -->
</Form> </Form>
</template> </template>
<template slot="buttons"> <template slot="buttons">
<Button type="primary" @click="add">新增</Button> <Button type="primary" @click="add">新增</Button>
</template> </template>
<template slot="batch"> <template slot="batch">
<Button type="primary" class="mr10 ml10">开始</Button> <Button type="primary" class="mr10 ml10">开始</Button>
<Button type="primary" class="mr10 ml10">暂停</Button> <Button type="primary" class="mr10 ml10">暂停</Button>
<Button type="primary" class="mr10 ml10">继续</Button> <Button type="primary" class="mr10 ml10">继续</Button>
</template> </template>
</DataGrid> </DataGrid>
<Modal v-model="modal" :title="title" width="1200" :fullscreen="fullScreen" footer-hide> <Modal
<component :is="detail" :eid="curId" :pid="planId" @on-close="cancel" @on-ok="ok" /> v-model="modal"
</Modal> :title="title"
width="1200"
:fullscreen="fullScreen"
footer-hide
>
<component
:is="detail"
:eid="curId"
:pid="planId"
@on-close="cancel"
@on-ok="ok"
/>
</Modal>
</Content> </Content>
</Layout> </Layout>
</template> </template>
<script> <script>
import Api from './api' import Api from "./api";
import Search from './search' import Search from "./search";
export default { export default {
name: 'list', name: "list",
components: { components: {
Search, Search,
}, },
head: { head: {
title: "", title: "",
author: "henq", author: "henq",
description: "project_task 10/20/2020 9:27:58 AM", description: "project_task 10/20/2020 9:27:58 AM",
}, },
data() { data() {
return { return {
action: Api.index, action: Api.index,
showMenu: true, showMenu: true,
easySearch: { easySearch: {
keys: { keys: {
op: "title", op: "title",
value: null value: null,
},
projectId: {
op: "Equal",
value: ''
},
planId: {
op: "In",
value: []
}
},
theme1: 'light',
modal: false,
title: "新增",
detail: null,
curId: '',
fullScreen: false,
projectId: '',
columns: [
// {
// key: "selection",
// type: "selection",
// width: 50,
// align: "center"
// },
{
key: "id",
title: this.$t("id"),
align: "left",
high: true,
hide: true,
},
{
key: "title",
title: this.l("title"),
align: "left",
easy: true,
high: true,
render: (h, params) => {
return h('a', {
attrs: {
oprate: 'detail'
},
on: {
click: () => this.viewRecord(params.row.id)
}
}, params.row.title)
}
},
{
key: "level",
title: this.l("level"),
align: "center",
high: true,
code: 'project.task.level'
},
{
key: "projectTitle",
title: this.l("projectTitle"),
align: "left",
easy: true,
high: true,
hide: true,
},
{
key: "planTitle",
title: this.l("planTitle"),
align: "left",
easy: true,
high: true,
hide: true,
},
{
key: "status",
title: this.l("status"),
align: "center",
high: true,
code: 'project.task.status'
},
{
key: "userId",
title: this.l("userId"),
align: "left",
high: true,
type: 'user'
},
{
key: "startDate",
title: this.l("startDate"),
align: "center",
high: true,
},
{
key: "endDate",
title: this.l("endDate"),
align: "center",
high: true,
},
{
key: "workHour",
title: this.l("workHour"),
align: "center",
high: true,
render: (h, params) => {
return h('a', {
attrs: {
oprate: 'detail'
},
on: {
click: () => this.viewWork(params.row.id)
}
}, params.row.workHour)
}
},
{
key: "note",
title: this.l("note"),
align: "left",
high: true,
hide: true
},
{
key: "creationTime",
title: this.l("creationTime"),
align: "left",
high: true,
hide: true,
},
{
key: "creatorUserId",
title: this.l("creatorUserId"),
align: "left",
high: true,
hide: true,
type: 'user'
},
{
title: '操作',
key: 'action',
width: 200,
align: 'center',
render: (h, params) => {
return h('div', {
class: "action"
}, [
h('op', {
attrs: {
icon: "md-arrow-dropright-circle",
type: "icon",
oprate: "edit",
title: params.row.status == 0 ? "开始" : params.row.status == 2 ? "继续" : '',
//disable: (params.row.status == 0 || params.row.status == 2) ? false : true
},
on: {
click: () => this.updatepart(params.row.id, 1)
}
}),
// h('op', {
// attrs: {
// icon: "ios-pause",
// type: "icon",
// title: "暂停",
// //disable: params.row.status == 1 ? false : true
// },
// on: {
// click: () => this.updatepart(params.row.id, 2)
// }
// }),
h('op', {
attrs: {
icon: "ios-alarm",
type: "icon",
oprate: "edit",
title: "完成",
//disable: (params.row.status != 0 && params.row.status != 3) ? false : true
},
on: {
click: () => this.updatepart(params.row.id, 3)
}
}),
h('op', {
attrs: {
icon: "md-add",
type: "icon",
oprate: "add",
title: "新增记录",
// disable: (params.row.status != 3 && params.row.status != 4) ? false : true
},
on: {
click: () => this.addRecord(params.row.id)
}
}),
h('op', {
attrs: {
icon: "md-create",
type: "icon",
oprate: "edit",
title: "修改",
//disable: (params.row.status == 0 || params.row.status == 2) ? false : true
},
on: {
click: () => this.edit(params.row.id)
}
}),
h('op', {
attrs: {
icon: "md-trash",
type: "icon",
title: "删除",
oprate: 'delete',
// disable: (params.row.status == 0 || params.row.status == 3) ? false : true
},
on: {
click: () => this.remove(params.row.id)
}
})
])
}
},
],
data1: [{
id: 1,
title: '测试title'
}],
data: [],
planId: '', //当前计划Id
planIdsCur: []
}
},
props: {
eid: String
},
async fetch({
store,
params
}) {
await store.dispatch('loadDictionary') // 加载数据字典
},
created() {
if (this.eid != '') {
this.projectId = this.eid
this.easySearch.projectId.value = this.eid
}
this.treeHeight = window.innerHeight - 150;
},
mounted() {
if (this.eid != "") {
this.easySearch.projectId.value = this.eid
this.$refs.grid.reload(this.easySearch);
}
},
methods: {
ok() {
this.$refs.grid.load()
this.modal = false
this.curId = 0;
}, },
search() { projectId: {
this.easySearch.planId.value = this.planIdsCur op: "Equal",
this.$refs.grid.reload(this.easySearch) value: "",
}, },
add() { planId: {
this.curId = this.projectId; op: "In",
this.title = "新增"; value: [],
this.fullScreen = false;
this.detail = () => import('./add')
this.modal = true;
}, },
highSearch() { },
this.curId = 0; theme1: "light",
this.title = "高级搜索"; modal: false,
this.fullScreen = false; title: "新增",
this.detail = () => import('./search') detail: null,
this.modal = true; curId: "",
fullScreen: false,
projectId: "",
columns: [
// {
// key: "selection",
// type: "selection",
// width: 50,
// align: "center"
// },
{
key: "id",
title: this.$t("id"),
align: "left",
high: true,
hide: true,
}, },
copy(id) { {
this.curId = id; key: "title",
this.title = "克隆"; title: this.l("title"),
this.fullScreen = false; align: "left",
this.detail = () => import('./add') easy: true,
this.modal = true; high: true,
render: (h, params) => {
return h(
"a",
{
attrs: {
oprate: "detail",
},
on: {
click: () => this.viewRecord(params.row.id),
},
},
params.row.title
);
},
}, },
view(id) { {
this.curId = id; key: "level",
this.title = "详情"; title: this.l("level"),
this.fullScreen = false; align: "center",
this.detail = () => import('./detail') high: true,
this.modal = true; code: "project.task.level",
}, },
edit(id) { {
this.curId = id; key: "projectTitle",
this.title = "编辑"; title: this.l("projectTitle"),
this.fullScreen = false; align: "left",
this.detail = () => import('./edit') easy: true,
this.modal = true; high: true,
hide: true,
}, },
remove(id) { {
Api.delete(id).then((r) => { key: "planTitle",
if (r.success) { title: this.l("planTitle"),
this.$refs.grid.load(); align: "left",
this.$Message.success('删除成功') easy: true,
} high: true,
}) hide: true,
}, },
cancel() { {
this.curId = 0; key: "status",
this.modal = false title: this.l("status"),
align: "center",
high: true,
code: "project.task.status",
},
{
key: "userId",
title: this.l("userId"),
align: "left",
high: true,
type: "user",
}, },
onHide() { {
// this.$Message.info("收起左侧树") key: "startDate",
this.showMenu = false; title: this.l("startDate"),
align: "center",
high: true,
}, },
showMenuFn() { {
//this.$Message.info("展开左侧树") key: "endDate",
this.showMenu = true; title: this.l("endDate"),
align: "center",
high: true,
}, },
productSearch(id, item, planIds) { {
this.planId = item.selected ? id : ''; key: "workHour",
this.planIdsCur = item.selected ? planIds : [] title: this.l("workHour"),
let where = { align: "center",
planId: { high: true,
op: "In", render: (h, params) => {
value: item.selected ? planIds : [] return h(
"a",
{
attrs: {
oprate: "detail",
}, },
projectId: { on: {
op: "Equal", click: () => this.viewWork(params.row.id),
value: this.eid
}, },
}; },
this.$refs.grid.reload(where); params.row.workHour
);
},
}, },
updatepart(valId, valStatus) { {
let params = { key: "note",
id: valId, title: this.l("note"),
status: valStatus align: "left",
} high: true,
Api.updatepart(params).then(r => { hide: true,
if (r.success) {
this.$refs.grid.load();
this.$Message.success('操作成功')
} else {
this.$Message.error('操作失败')
}
}).catch(err => {
this.disabled = false;
this.$Message.error('操作失败')
console.warn(err)
})
}, },
onSelect(val) { {
this.$refs.grid.reload(this.easySearch) key: "creationTime",
title: this.l("creationTime"),
align: "left",
high: true,
hide: true,
}, },
viewRecord(id) { {
this.curId = id; key: "creatorUserId",
this.title = "查看记录"; title: this.l("creatorUserId"),
this.fullScreen = true; align: "left",
this.detail = () => import('./detail') high: true,
this.modal = true; hide: true,
type: "user",
}, },
viewWork(id) { {
this.curId = id; title: "操作",
this.title = "查看工时"; key: "action",
this.fullScreen = false; width: 200,
this.detail = () => import('../record') align: "center",
this.modal = true; render: (h, params) => {
return h(
"div",
{
class: "action",
},
[
h("op", {
attrs: {
icon: "md-arrow-dropright-circle",
type: "icon",
oprate: "edit",
title:
params.row.status == 0
? "开始"
: params.row.status == 2
? "继续"
: "",
//disable: (params.row.status == 0 || params.row.status == 2) ? false : true
},
on: {
click: () => this.updatepart(params.row.id, 1),
},
}),
// h('op', {
// attrs: {
// icon: "ios-pause",
// type: "icon",
// title: "暂停",
// //disable: params.row.status == 1 ? false : true
// },
// on: {
// click: () => this.updatepart(params.row.id, 2)
// }
// }),
h("op", {
attrs: {
icon: "ios-alarm",
type: "icon",
oprate: "edit",
title: "完成",
//disable: (params.row.status != 0 && params.row.status != 3) ? false : true
},
on: {
click: () => this.updatepart(params.row.id, 3),
},
}),
h("op", {
attrs: {
icon: "md-add",
type: "icon",
oprate: "add",
title: "新增记录",
// disable: (params.row.status != 3 && params.row.status != 4) ? false : true
},
on: {
click: () => this.addRecord(params.row.id),
},
}),
h("op", {
attrs: {
icon: "md-create",
type: "icon",
oprate: "edit",
title: "修改",
//disable: (params.row.status == 0 || params.row.status == 2) ? false : true
},
on: {
click: () => this.edit(params.row.id),
},
}),
h("op", {
attrs: {
icon: "md-trash",
type: "icon",
title: "删除",
oprate: "delete",
// disable: (params.row.status == 0 || params.row.status == 3) ? false : true
},
on: {
click: () => this.remove(params.row.id),
},
}),
]
);
},
}, },
addRecord(id) { ],
this.curId = id; data1: [
this.title = "新增记录"; {
this.fullScreen = false; id: 1,
this.detail = () => import('../record/add') title: "测试title",
this.modal = true;
}, },
l(key) { ],
let vkey = "project_task" + "." + key; data: [],
return this.$t(vkey) || key planId: "", //当前计划Id
} planIdsCur: [],
};
},
props: {
eid: String,
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
created() {
if (this.eid != "") {
this.projectId = this.eid;
this.easySearch.projectId.value = this.eid;
}
this.treeHeight = window.innerHeight - 150;
},
mounted() {
if (this.eid != "") {
this.easySearch.projectId.value = this.eid;
this.$refs.grid.reload(this.easySearch);
}
},
methods: {
ok() {
this.$refs.grid.load();
this.modal = false;
this.curId = 0;
},
search() {
this.easySearch.planId.value = this.planIdsCur;
this.$refs.grid.reload(this.easySearch);
},
add() {
this.curId = this.projectId;
this.title = "新增";
this.fullScreen = false;
this.detail = () => import("./add");
this.modal = true;
},
highSearch() {
this.curId = 0;
this.title = "高级搜索";
this.fullScreen = false;
this.detail = () => import("./search");
this.modal = true;
},
copy(id) {
this.curId = id;
this.title = "克隆";
this.fullScreen = false;
this.detail = () => import("./add");
this.modal = true;
},
view(id) {
this.curId = id;
this.title = "详情";
this.fullScreen = false;
this.detail = () => import("./detail");
this.modal = true;
},
edit(id) {
this.curId = id;
this.title = "编辑";
this.fullScreen = false;
this.detail = () => import("./edit");
this.modal = true;
}, },
watch: { remove(id) {
eid(v) { Api.delete(id).then((r) => {
if (v != "") { if (r.success) {
this.eid = v this.$refs.grid.load();
} this.$Message.success("删除成功");
} }
} });
} },
cancel() {
this.curId = 0;
this.modal = false;
},
onHide() {
// this.$Message.info("收起左侧树")
this.showMenu = false;
},
showMenuFn() {
//this.$Message.info("展开左侧树")
this.showMenu = true;
},
productSearch(id, item, planIds) {
this.planId = item.selected ? id : "";
this.planIdsCur = item.selected ? planIds : [];
let where = {
planId: {
op: "In",
value: item.selected ? planIds : [],
},
projectId: {
op: "Equal",
value: this.eid,
},
};
this.$refs.grid.reload(where);
},
updatepart(valId, valStatus) {
let params = {
id: valId,
status: valStatus,
};
Api.updatepart(params)
.then((r) => {
if (r.success) {
this.$refs.grid.load();
this.$Message.success("操作成功");
} else {
this.$Message.error("操作失败");
}
})
.catch((err) => {
this.disabled = false;
this.$Message.error("操作失败");
console.warn(err);
});
},
onSelect(val) {
this.$refs.grid.reload(this.easySearch);
},
viewRecord(id) {
this.curId = id;
this.title = "查看记录";
this.fullScreen = true;
this.detail = () => import("./detail");
this.modal = true;
},
viewWork(id) {
this.curId = id;
this.title = "查看工时";
this.fullScreen = false;
this.detail = () => import("../record");
this.modal = true;
},
addRecord(id) {
this.curId = id;
this.title = "新增记录";
this.fullScreen = false;
this.detail = () => import("../record/add");
this.modal = true;
},
l(key) {
let vkey = "project_task" + "." + key;
return this.$t(vkey) || key;
},
},
watch: {
eid(v) {
if (v != "") {
this.eid = v;
}
},
},
};
</script> </script>
<style lang="less"> <style lang="less">
@import "../../../assets/css/custom.less";
.full { .full {
margin-top: 0; margin-top: 0;
.content { .content {
margin-top: 10px; margin-top: 10px;
.ivu-icon-ios-add:before { .ivu-icon-ios-add:before {
content: "\f341"; content: "\f341";
} }
.ivu-icon-ios-remove:before { .ivu-icon-ios-remove:before {
content: "\f33d"; content: "\f33d";
}
} }
}
.ivu-layout-sider {
background: @layout-content-bg-color;
margin-right: 10px;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
// height: 89vh;
overflow: auto;
}
.ivu-layout-content {
margin-left: 5px;
background: @right-bg;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
overflow: auto;
padding: 10px;
// height: 89vh;
}
} }
.taskTab .ivu-tabs-bar { .taskTab .ivu-tabs-bar {
border-bottom: 1px solid #fff; border-bottom: 1px solid #fff;
margin-bottom: 2px; margin-bottom: 2px;
} }
.taskMenu { .taskMenu {
font-size: 12px; font-size: 12px;
.ivu-menu-horizontal { .ivu-menu-horizontal {
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
} }
.ivu-menu-light { .ivu-menu-light {
&:after { &:after {
height: 0px !important; height: 0px !important;
}
} }
}
} }
.actionCur { .actionCur {
a { a {
span { span {
padding: 4px; padding: 4px;
} }
i { i {
padding: 4px; padding: 4px;
border-radius: 3px; border-radius: 3px;
font-weight: bold; font-weight: bold;
font-size: 18px; font-size: 18px;
}
} }
}
} }
</style> </style>
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