Commit 9dc65f96 authored by 仇晓婷's avatar 仇晓婷

项目管理

parent 6b5b68d7
......@@ -155,12 +155,12 @@ export default {
picture: "",
attachment: "",
phase: null,
startDate: null,
endDate: null,
startDate: "",
endDate: "",
businessUnits: "",
},
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }],
title: [{ required: true, message: "必填", trigger: "blur" }],
},
parmsName: "app=material&eid=1&name=ProjectMain",
parms: {
......@@ -221,6 +221,8 @@ export default {
this.entity.id = 0;
});
},
//时间相关end
l(key) {
key = "project_main" + "." + key;
return this.$t(key);
......
<template>
<div class="detail">
<Row>
<Filed :span="12" :name="l('creationTime')">{{entity.creationTime}}</Filed>
<Filed :span="12" :name="l('creatorUserId')">{{entity.creatorUserId}}</Filed>
<Filed :span="12" :name="l('lastModificationTime')">{{entity.lastModificationTime}}</Filed>
<Filed :span="12" :name="l('lastModifierUserId')">{{entity.lastModifierUserId}}</Filed>
<Filed :span="12" :name="l('isDeleted')">{{entity.isDeleted}}</Filed>
<Filed :span="12" :name="l('deletionTime')">{{entity.deletionTime}}</Filed>
<Filed :span="12" :name="l('deleterUserId')">{{entity.deleterUserId}}</Filed>
<Filed :span="12" :name="l('title')">{{entity.title}}</Filed>
<Filed :span="24" :name="l('note')">{{entity.note}}</Filed>
<Filed :span="12" :name="l('state')">{{entity.state}}</Filed>
<Filed :span="12" :name="l('type')">{{entity.type}}</Filed>
<Filed :span="12" :name="l('picture')">{{entity.picture}}</Filed>
<Filed :span="12" :name="l('attachment')">{{entity.attachment}}</Filed>
<Filed :span="12" :name="l('phase')">{{entity.phase}}</Filed>
<Filed :span="12" :name="l('startDate')">{{entity.startDate}}</Filed>
<Filed :span="12" :name="l('endDate')">{{entity.endDate}}</Filed>
<Filed :span="12" :name="l('businessUnits')">{{entity.businessUnits}}</Filed>
</Row>
</div>
<div class="detail">
<Row>
<Filed :span="12" :name="l('creationTime')">{{
entity.creationTime
}}</Filed>
<Filed :span="12" :name="l('creatorUserId')">
<User :value="entity.creatorUserId" />
</Filed>
<!-- <Filed :span="12" :name="l('lastModificationTime')">{{
entity.lastModificationTime
}}</Filed>
<Filed :span="12" :name="l('lastModifierUserId')">{{
entity.lastModifierUserId
}}</Filed>
<Filed :span="12" :name="l('isDeleted')">{{ entity.isDeleted }}</Filed>
<Filed :span="12" :name="l('deletionTime')">{{
entity.deletionTime
}}</Filed>
<Filed :span="12" :name="l('deleterUserId')">{{
entity.deleterUserId
}}</Filed> -->
<Filed :span="12" :name="l('title')">{{ entity.title }}</Filed>
<Filed :span="12" :name="l('state')">
<state code="project.main.state" :value="entity.state"
/></Filed>
<!-- <Filed :span="12" :name="l('phase')">{{ entity.phase }}</Filed> -->
<Filed :span="12" :name="l('startDate')">{{ entity.startDate }}</Filed>
<Filed :span="12" :name="l('endDate')">{{ entity.endDate }}</Filed>
<!-- <Filed :span="12" :name="l('businessUnits')">{{
entity.businessUnits
}}</Filed> -->
<Filed :span="12" :name="l('type')">
<state code="project.main.type" :value="entity.type" />
</Filed>
<Filed :span="12" :name="l('picture')">{{ entity.picture }}</Filed>
<Filed :span="12" :name="l('attachment')">{{ entity.attachment }}</Filed>
<Filed :span="24" :name="l('note')">{{ entity.note }}</Filed>
</Row>
</div>
</template>
<script>
import Api from './api'
export default {
name: 'Add',
data() {
return {
entity: {},
rules: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
code: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
props: {
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
this.$emit('on-load')
})
},
handleClose() {
this.$emit('on-close')
},
l(key) {
key = "project_main" + "." + key;
return this.$t(key)
import Api from "./api";
export default {
name: "Add",
data() {
return {
entity: {},
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }],
code: [{ required: true, message: "必填", trigger: "blur" }],
},
};
},
props: ["eid"],
mounted() {
this.load(this.eid);
},
methods: {
load(v) {
Api.get({ id: v }).then((r) => {
this.entity = r.result;
this.entity.type = r.result.type+'';
this.entity.state = r.result.state+'';
this.$emit("on-load");
});
},
handleClose() {
this.$emit("on-close");
},
l(key) {
key = "project_main" + "." + key;
return this.$t(key);
},
},
watch: {
eid(v) {
if (v) {
this.load(v);
}
},
watch: {
eid(v) {
if (v > 0) {
this.load(v);
}
}
}
}
},
},
};
</script>
\ No newline at end of file
<template>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<Col :span="12"><FormItem :label="l('creationTime')" prop="creationTime"> <DatePicker type="date" v-model="entity.creationTime"></DatePicker>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('creatorUserId')" prop="creatorUserId"> <InputNumber v-model="entity.creatorUserId"></InputNumber>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('lastModificationTime')" prop="lastModificationTime"> <DatePicker type="date" v-model="entity.lastModificationTime"></DatePicker>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('lastModifierUserId')" prop="lastModifierUserId"> <InputNumber v-model="entity.lastModifierUserId"></InputNumber>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('isDeleted')" prop="isDeleted"> <InputNumber v-model="entity.isDeleted"></InputNumber>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('deletionTime')" prop="deletionTime"> <DatePicker type="date" v-model="entity.deletionTime"></DatePicker>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('deleterUserId')" prop="deleterUserId"> <InputNumber v-model="entity.deleterUserId"></InputNumber>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('title')" prop="title"> <Input v-model="entity.title"> </Input>
</FormItem></Col>
<Col :span="24"><FormItem :label="l('note')" prop="note"> <Input v-model="entity.note" type="textarea" :rows="5"></Input>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('state')" prop="state"> <Dictionary code="mes.project_main.State" v-model="entity.state"></Dictionary>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('type')" prop="type"> <Dictionary code="mes.project_main.Type" v-model="entity.type"></Dictionary>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('picture')" prop="picture"> <Input v-model="entity.picture"> </Input>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('attachment')" prop="attachment"> <Input v-model="entity.attachment"> </Input>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('phase')" prop="phase"> <Dictionary code="mes.project_main.Phase" v-model="entity.phase"></Dictionary>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('startDate')" prop="startDate"> <DatePicker type="date" v-model="entity.startDate"></DatePicker>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('endDate')" prop="endDate"> <DatePicker type="date" v-model="entity.endDate"></DatePicker>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('businessUnits')" prop="businessUnits"> <Input v-model="entity.businessUnits"> </Input>
</FormItem></Col>
</Row>
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<Col span="8">
<FormItem :label="l('picture')" prop="picture">
<inputFile
class="tphoto"
ref="refmovieFile1"
v-model="imgName"
:parms="parmsName"
/>
</FormItem>
</Form>
<div class="img-touxiang">
<img :src="avatorPath" v-if="imgName" @click="imgUrl" class="img1" />
<img
src="@/assets/images/files_header.png"
v-else
width="100%"
height="100%"
/>
</div>
</Col>
<Col span="16">
<Col :span="12"
><FormItem :label="l('title')" prop="title">
<Input v-model="entity.title"> </Input> </FormItem
></Col>
<Col :span="12"
><FormItem :label="l('state')" prop="state">
<Dictionary
code="project.main.state"
v-model="entity.state"
></Dictionary> </FormItem
></Col>
<Col :span="12"
><FormItem :label="l('startDate')" prop="startDate">
<DatePicker
type="date"
v-model="entity.startDate"
></DatePicker> </FormItem
></Col>
<Col :span="12"
><FormItem :label="l('endDate')" prop="endDate">
<DatePicker
type="date"
v-model="entity.endDate"
></DatePicker> </FormItem
></Col>
<Col :span="12"
><FormItem :label="l('type')" prop="type">
<Dictionary
code="project.main.type"
v-model="entity.type"
></Dictionary> </FormItem
></Col>
<Col :span="24">
<FormItem :label="l('attachment')" prop="attachment">
<!-- <Input v-model="entity.template" type="textarea" :rows="5"></Input> -->
<files ref="refFile" :parms="parms" files />
</FormItem>
</Col>
<!-- <Col :span="12"
><FormItem :label="l('phase')" prop="phase">
<Dictionary
code="mes.project_main.Phase"
v-model="entity.phase"
></Dictionary> </FormItem
></Col> -->
<!-- <Col :span="12"
><FormItem :label="l('businessUnits')" prop="businessUnits">
<Input v-model="entity.businessUnits"> </Input> </FormItem
></Col> -->
<Col :span="24"
><FormItem :label="l('note')" prop="note">
<Input
v-model="entity.note"
type="textarea"
:rows="5"
></Input> </FormItem
></Col>
</Col>
</Row>
<FormItem>
<Button type="primary" @click="handleSubmit" v-noClick>保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Form>
</template>
<script>
import Api from './api'
export default {
name: 'Edit',
data() {
return {
disabled: false,
entity: {
},
rules: {
name: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
props: {
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
})
},
handleSubmit() {
this.$refs.form.validate((v) => {
if (v) {
this.disabled = true;
Api.update(this.entity).then((r) => {
this.disabled = false;
if (r.success) {
this.$Message.success('保存成功')
this.$emit('on-ok')
} else {
this.$Message.error('保存失败')
}
}).catch(err => {
this.disabled = false;
this.$Message.error('保存失败')
console.warn(err)
})
}
})
},
handleClose() {
this.$emit('on-close')
},
l(key) {
key = "project_main" + "." + key;
return this.$t(key)
}
},
watch: {
eid(v) {
if (v != 0) {
this.load(v);
}
}
import Api from "./api";
export default {
name: "Edit",
data() {
return {
imgName: "",
avatorPath: "",
entity: {},
rules: {
title: [{ required: true, message: "必填", trigger: "blur" }],
},
parmsName: "app=material&eid=1&name=ProjectMain",
parms: {
app: "material",
eid: null,
name: "",
field: "",
},
};
},
props: ["eid"],
mounted() {
this.load(this.eid);
this.parms.eid = this.$u.guid();
this.$refs.refmovieFile1.inputShow = false;
},
methods: {
imgUrl() {
window.open(this.avatorPath, "_blank");
},
load(v) {
Api.get({ id: v }).then((r) => {
this.entity = r.result;
this.avatorPath = fileUrlDown + r.result.picture;
this.imgName = r.result.picture;
if (r.result.attachment && r.result.attachment != "") {
this.parms.eid = r.result.attachment;
} else {
this.parms.eid = this.$u.guid();
}
this.entity.attachment = this.parms.eid;
// this.entity.creatorUserId = r.result.creatorUserId;
});
},
handleSubmit() {
this.$refs.form.validate((v) => {
if (v) {
if (this.$refs.refFile.nameList.length > 0) {
this.entity.attachment = this.parms.eid;
} else {
this.entity.attachment = "";
}
Api.update(this.entity)
.then((r) => {
if (r.success) {
this.$Message.success("保存成功");
this.$emit("on-ok");
} else {
this.$Message.error("保存失败");
}
})
.catch((err) => {
this.$Message.error("保存失败");
console.warn(err);
});
}
}
});
},
handleClose() {
this.$emit("on-close");
},
l(key) {
key = "project_main" + "." + key;
return this.$t(key);
},
},
watch: {
eid(v) {
if (v) {
this.load(v);
}
},
},
};
</script>
\ No newline at end of file
<template>
<div>
<div class="project">
<DataGrid
:columns="columns"
ref="grid"
......@@ -13,6 +13,7 @@
><Input
placeholder="请输入关键字标题"
v-model="easySearch.keys.value"
clearable
/>
</FormItem>
<FormItem
......@@ -35,15 +36,29 @@
<template slot="card" slot-scope="{ row }">
<div class="body-card">
<Row class="title-i">
<Col :span="12">
<Ellipsis :text="row.name" :length="18" tooltip />
<Col :span="10" class="title-l">
<Ellipsis :text="row.title" :length="18" tooltip />
</Col>
<Col :span="10" class="btn-click">
<!-- <Ellipsis :text="row.code" :length="18" tooltip/> -->
</Col>
<Col :span="4">
<div class="statuBg" :style="tdStyle(row.state)"></div>
<div class="boxTitle">
<div class="text">
<state
code="project.main.state"
ref="state"
:value="row.state"
type="text"
:color="false"
></state>
</div>
</div>
</Col>
<Col :span="12" class="btn-click">
<Ellipsis :text="row.code" :length="18" tooltip
/></Col>
</Row>
<Row class="row-down" :gutter="10">
<Col span="7">
<Col span="10">
<div class="img-i">
<!-- <img :src="downUrl + row.img" v-if="row.img" /> -->
<Pictrue :src="row.img" v-if="row.img" />
......@@ -55,24 +70,27 @@
/>
</div>
</Col>
<Col span="17">
<Col span="14">
<div class="c">
<div>版本:{{ row.version }}</div>
<div>创建人: <User :value="row.creatorUserId" /></div>
<div>
状态:
<state code="word.document.status" :value="row.status" />
创建时间:{{ row.creationTime }}
<!-- <state code="word.document.status" :value="row.status" /> -->
</div>
<!-- <div>
创建人:
<User :value="row.creatorUserId" />
</div>-->
<div>开始时间:{{ row.startDate }}</div>
<div>结束时间:{{ row.endDate }}</div>
<div class="shuo-ming">
<span>文档说明</span>
<Ellipsis :text="row.description" :length="12" tooltip />
<span>备注</span>
<Ellipsis :text="row.note" :length="12" tooltip />
</div>
</div>
</Col>
</Row>
<Row class="bottom-b">
<Col span="6"
><state code="project.main.type" :value="row.type"
/></Col>
<Col span="18">
<div class="a-icon">
<a @click="edit(row.id)"> <Icon type="md-create" />编辑 </a
>&nbsp;
......@@ -177,55 +195,100 @@ export default {
{
key: "state",
title: this.l("state"),
align: "left",
align: "center",
high: true,
code: "mes.project_main.State",
code: "project.main.state",
},
{
key: "type",
title: this.l("type"),
align: "left",
align: "center",
high: true,
code: "mes.project_main.Type",
code: "project.main.type",
},
{ key: "picture", title: this.l("picture"), align: "left", high: true },
{
key: "attachment",
title: this.l("attachment"),
align: "left",
key: "picture",
title: this.l("picture"),
align: "center",
high: true,
render: (h, params) => {
return h(
"a",
{
on: { click: () => this.viewImg(params.row) },
},
"查看图片"
);
},
},
{
key: "phase",
title: this.l("phase"),
align: "left",
key: "attachment",
title: this.l("attachment"),
align: "center",
high: true,
code: "mes.project_main.Phase",
render: (h, params) => {
return h(
"a",
{
on: { click: () => this.view(params.row.id) },
},
"查看附件"
);
},
},
// {
// key: "phase",
// title: this.l("phase"),
// align: "left",
// high: true,
// code: "mes.project_main.Phase",
// },
{
key: "startDate",
title: this.l("startDate"),
align: "left",
align: "center",
high: true,
render: (h, params) => {
return h(
"span",
params.row.startDate
? this.sliceStr(params.row.startDate + " ", 0, 10)
: ""
);
},
},
{ key: "endDate", title: this.l("endDate"), align: "left", high: true },
{
key: "businessUnits",
title: this.l("businessUnits"),
align: "left",
key: "endDate",
title: this.l("endDate"),
align: "center",
high: true,
render: (h, params) => {
return h(
"span",
params.row.endDate
? this.sliceStr(params.row.endDate + " ", 0, 10)
: ""
);
},
},
// {
// key: "businessUnits",
// title: this.l("businessUnits"),
// align: "left",
// high: true,
// },
{
key: "creationTime",
title: this.l("creationTime"),
align: "left",
align: "center",
hide: false,
},
{
key: "creatorUserId",
title: this.l("creatorUserId"),
align: "left",
align: "center",
high: true,
type: "user",
},
{
title: "操作",
......@@ -275,6 +338,19 @@ export default {
await store.dispatch("loadDictionary"); // 加载数据字典
},
methods: {
tdStyle(val) {
//动态根据状态值加载状态值对应的颜色
let temDic = this.$store.getters.dictionaryByKey("taskList.status");
let temColor = "#666";
temDic.forEach((data) => {
if (Number(data.code) == val) {
temColor = data.color;
}
});
var style = {};
style["border-top"] = " solid 38px " + temColor;
return style;
},
changeShwo() {
//显示模式切换
if (this.typeInfo == "card") {
......@@ -287,6 +363,10 @@ export default {
this.titleInfo = "卡片模式";
}
},
viewImg(row) {
console.log(row);
window.open(fileUrlDown + row.picture, "_blank");
},
ok() {
this.$refs.grid.load();
this.modal = false;
......@@ -302,6 +382,7 @@ export default {
this.modal = true;
},
copy(id) {
console.log(id);
this.curId = id;
this.title = "克隆";
this.detail = () => import("./add");
......@@ -331,6 +412,10 @@ export default {
this.curId = 0;
this.modal = false;
},
//截取字符串
sliceStr(str, lenS, lenE) {
return str.slice(lenS, lenE);
},
l(key) {
let vkey = "project_main" + "." + key;
return this.$t(vkey) || key;
......@@ -339,4 +424,89 @@ export default {
};
</script>
<style lang="less">
.project {
.body-card {
border: 1px solid rgba(38, 128, 235, 1);
margin: 5px 0;
border-radius: 4px;
height: 280px;
.title-i {
border-bottom: 1px solid #2680eb;
// padding: 0 10px;
height: 35px;
line-height: 35px;
background: rgba(38, 128, 235, 0.2);
color: #2680eb;
.title-l {
padding-left: 10px;
}
.btn-click {
text-align: right;
}
.statuBg {
height: 0px;
width: 0;
border-left: solid 50px transparent;
float: right;
margin-right: -1px;
}
.boxTitle {
color: white;
float: right;
margin-top: -40px;
/* Rotate div */
transform: rotate(37deg);
-ms-transform: rotate(37deg);
/* Internet Explorer */
-moz-transform: rotate(37deg);
/* Firefox */
-webkit-transform: rotate(37deg);
/* Safari 和 Chrome */
-o-transform: rotate(37deg);
/* Opera */
.text {
font-size: 8px;
font-weight: normal;
padding-right: 5px;
}
}
}
.row-down {
padding: 14px;
// height: 110px;
.img-i {
height: 170px;
width: 170px;
// img {
// width: 90px;
// height: 90px;
// }
}
.c {
padding-left: 14px;
height: 170px;
div {
height: 30px;
}
}
.shuo-ming {
display: -webkit-inline-box;
// display: inline-block;
}
}
.bottom-b {
line-height: 40px;
padding-left: 14px;
.a-icon {
text-align: right;
}
}
}
}
</style>
\ No newline at end of file
......@@ -18,6 +18,7 @@
<Input
placeholder="请输入文档名称/编号"
v-model="easySearch.keys.value"
clearable
/>
</FormItem>
<FormItem>
......@@ -429,6 +430,7 @@ export default {
}
.shuo-ming {
display: -webkit-inline-box;
// display: inline-block;
}
.a-icon {
text-align: right;
......
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