3 changed files with 487 additions and 6 deletions
-
6src/views/modules/longchuang/production-plan-home-order.vue
-
472src/views/modules/longchuang/production-plan-machining-task.vue
-
15src/views/modules/rack/part-archive.vue
@ -0,0 +1,472 @@ |
|||
<template> |
|||
<div class="mod-config"> |
|||
<el-form :inline="true" label-position="top" class="query-form"> |
|||
<el-form-item label="物料号"> |
|||
<el-input v-model="searchData.projectNo" clearable placeholder="请输入物料号" style="width: 140px"></el-input> |
|||
</el-form-item> |
|||
<el-form-item label="数量"> |
|||
<el-input v-model="searchData.taskQty" clearable placeholder="请输入数量" style="width: 140px"></el-input> |
|||
</el-form-item> |
|||
<el-form-item label="状态"> |
|||
<el-select v-model="searchData.status" clearable placeholder="全部" style="width: 120px"> |
|||
<el-option label="已排产" value="已排产"></el-option> |
|||
<el-option label="进行中" value="进行中"></el-option> |
|||
<el-option label="已完成" value="已完成"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="计划发货日期"> |
|||
<el-date-picker v-model="searchData.deliveryStartDate" type="date" value-format="yyyy-MM-dd" placeholder="开始" style="width: 130px"></el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="至"> |
|||
<el-date-picker v-model="searchData.deliveryEndDate" type="date" value-format="yyyy-MM-dd" placeholder="结束" style="width: 130px"></el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label=" " style="margin-top: -11px"> |
|||
<el-button @click="getDataList('Y')" plain class="search-btn">查询</el-button> |
|||
<el-button @click="resetQuery()" plain class="reset-btn">重置</el-button> |
|||
<el-button @click="openEditDialog()" plain class="add-btn">新增任务单</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
|
|||
<el-table class="data-table" :data="dataList" :height="tableHeight" border highlight-current-row v-loading="dataListLoading" style="width: 100%"> |
|||
<el-table-column type="index" label="#" width="50" align="center"></el-table-column> |
|||
<el-table-column prop="projectNo" label="物料号" width="120" align="center"></el-table-column> |
|||
<el-table-column prop="taskQty" label="数量" width="130" align="center"></el-table-column> |
|||
<el-table-column prop="specialRequirement" label="特殊要求" min-width="180" show-overflow-tooltip></el-table-column> |
|||
<el-table-column prop="planDeliveryDate" label="计划发货日期" width="120" align="center"></el-table-column> |
|||
<el-table-column prop="currentNode" label="当前节点" width="120" align="center"></el-table-column> |
|||
<el-table-column prop="assigneeSummary" label="节点负责人" min-width="160" show-overflow-tooltip></el-table-column> |
|||
<el-table-column label="节点进度" width="100" align="center"> |
|||
<template slot-scope="scope"> |
|||
<el-tag size="small" type="info">{{ scope.row.nodeDoneCount }}/{{ scope.row.nodeTotalCount }}</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="status" label="状态" width="90" align="center"> |
|||
<template slot-scope="scope"> |
|||
<el-tag :type="getStatusType(scope.row.status)" size="small">{{ scope.row.status }}</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="finishDate" label="完工日期" width="120" align="center"> |
|||
<template slot-scope="scope">{{ scope.row.finishDate || '-' }}</template> |
|||
</el-table-column> |
|||
<el-table-column label="操作" width="300" align="center" > |
|||
<template slot-scope="scope"> |
|||
<a type="text" @click="openEditDialog(scope.row)" v-if="scope.row.status !== '已完成'">修改</a> |
|||
<a type="text" @click="openAssignDialog(scope.row)" v-if="scope.row.status !== '已完成'">分配人员</a> |
|||
<a type="text" @click="finishOrder(scope.row)" v-if="scope.row.status !== '已完成'">完工</a> |
|||
<a type="text" style="color:#F56C6C" @click="deleteOrder(scope.row)" v-if="scope.row.status !== '已完成'">删除</a> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
|
|||
<el-pagination |
|||
@size-change="sizeChangeHandle" |
|||
@current-change="currentChangeHandle" |
|||
:current-page="pageIndex" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="pageSize" |
|||
:total="totalPage" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
style="margin-top: 20px; text-align: right"> |
|||
</el-pagination> |
|||
|
|||
<el-dialog :title="saveHeaderData.orderNo ? '修改任务订单' : '新增任务订单'" :visible.sync="setUp.reviewFlag" width="550px" :close-on-click-modal="false" v-drag> |
|||
<el-form |
|||
ref="editForm" |
|||
:model="saveHeaderData" |
|||
label-position="top" |
|||
class="edit-form"> |
|||
<el-row :gutter="20"> |
|||
<el-col :span="12"><el-form-item label="物料号" required><el-input v-model="saveHeaderData.projectNo"></el-input></el-form-item></el-col> |
|||
<el-col :span="12"><el-form-item label="数量" required><el-input v-model="saveHeaderData.taskQty"></el-input></el-form-item></el-col> |
|||
</el-row> |
|||
<el-row :gutter="20"> |
|||
<el-col :span="12"><el-form-item label="计划发货日期"><el-date-picker v-model="saveHeaderData.planDeliveryDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker></el-form-item></el-col> |
|||
<el-col :span="12"><el-form-item label="状态"><el-select v-model="saveHeaderData.status" style="width: 100%"><el-option label="已排产" value="已排产"></el-option><el-option label="进行中" value="进行中"></el-option><el-option label="已完成" value="已完成"></el-option></el-select></el-form-item></el-col> |
|||
</el-row> |
|||
<el-row :gutter="20"> |
|||
<el-col :span="12"> |
|||
<el-form-item> |
|||
<template slot="label"> |
|||
人员分配策略 |
|||
<el-tooltip effect="dark" placement="top"> |
|||
<div slot="content"> |
|||
默认分配:创建订单后,系统会按节点角色自动分配该角色下全部人员。<br> |
|||
手动分配:创建订单后不自动分配,需要在“分配人员”里手工选择负责人。 |
|||
</div> |
|||
<i class="el-icon-question" style="margin-left:6px;color:#909399;cursor:pointer;"></i> |
|||
</el-tooltip> |
|||
</template> |
|||
<el-radio-group v-model="saveHeaderData.autoAssignAllUsers"> |
|||
<el-radio :label="true">默认分配</el-radio> |
|||
<el-radio :label="false">手动分配</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="节点报工模式"> |
|||
<el-radio-group v-model="saveHeaderData.nodeReportMode"> |
|||
<el-radio label="PARALLEL">并行</el-radio> |
|||
<el-radio label="SEQUENTIAL">按顺序</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
<el-form-item label="特殊要求"><el-input v-model="saveHeaderData.specialRequirement" type="textarea" :rows="3"></el-input></el-form-item> |
|||
</el-form> |
|||
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> |
|||
<el-button plain class="reset-btn" @click="setUp.reviewFlag = false">取消</el-button> |
|||
<el-button plain class="add-btn" :loading="setUp.saveButton" @click="saveOrder">保存</el-button> |
|||
</el-footer> |
|||
</el-dialog> |
|||
|
|||
<el-dialog title="车间节点报工" :visible.sync="setUp.reportFlag" width="460px" :close-on-click-modal="false" v-drag> |
|||
<el-form :model="reportData" label-width="110px" label-position="top"> |
|||
<el-form-item label="项目号"><el-input v-model="reportData.projectNo" disabled></el-input></el-form-item> |
|||
<el-form-item label="报工节点"> |
|||
<el-select v-model="reportData.nodeCode" placeholder="请选择节点" style="width: 100%"> |
|||
<el-option v-for="item in reportNodeOptions" :key="item.nodeCode" :label="item.nodeName" :value="item.nodeCode"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="报工备注"><el-input v-model="reportData.remark" type="textarea" :rows="2"></el-input></el-form-item> |
|||
</el-form> |
|||
<el-footer style="height: 40px; margin-top: 50px; text-align: center"> |
|||
<el-button plain class="reset-btn" @click="setUp.reportFlag = false">取消</el-button> |
|||
<el-button plain class="search-btn" :loading="setUp.reportButton" @click="submitNodeReport">提交报工</el-button> |
|||
</el-footer> |
|||
</el-dialog> |
|||
<el-dialog title="节点负责人分配" :visible.sync="setUp.assignFlag" width="700px" :close-on-click-modal="false" v-drag> |
|||
<el-table :data="assignNodeList" border> |
|||
<el-table-column prop="nodeName" label="节点" width="180"></el-table-column> |
|||
<el-table-column label="负责人"> |
|||
<template slot-scope="scope"> |
|||
<el-select v-model="scope.row.assigneeUserIdList" filterable clearable multiple collapse-tags placeholder="请选择负责人" style="width: 100%"> |
|||
<el-option v-for="user in scope.row.userOptions" :key="user.userId" :label="user.displayName || user.username" :value="user.userId"></el-option> |
|||
</el-select> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-footer style="height: 40px; margin-top: 20px; text-align: center"> |
|||
<el-button plain class="reset-btn" @click="setUp.assignFlag = false">取消</el-button> |
|||
<el-button plain class="add-btn" :loading="setUp.assignButton" @click="saveNodeAssigneeAction">保存分配</el-button> |
|||
</el-footer> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { deleteMachiningOrder, finishMachiningOrder, getNodeAssigneeList, getNodeAssigneeUsers, getMachiningOrderList, reportMachiningOrderNode, saveNodeAssignee, saveMachiningOrder } from '@/api/longchuang/productionPlan' |
|||
|
|||
export default { |
|||
name: 'ProductionPlanMachiningOrder', |
|||
data() { |
|||
return { |
|||
searchData: { projectNo: '', taskQty: '', status: '', deliveryStartDate: '', deliveryEndDate: '',orderType:'MACHINING', page: 1, limit: 20 }, |
|||
saveHeaderData: {}, |
|||
reportData: { orderNo: '', projectNo: '', nodeCode: '', remark: '' }, |
|||
reportNodeOptions: [], |
|||
setUp: { reviewFlag: false, reportFlag: false, assignFlag: false, saveButton: false, reportButton: false, assignButton: false }, |
|||
dataList: [], |
|||
currentAssignOrder: { orderNo: '', orderType: 'MACHINING' }, |
|||
assignNodeList: [], |
|||
pageIndex: 1, |
|||
pageSize: 20, |
|||
totalPage: 0, |
|||
dataListLoading: false, |
|||
tableHeight: 520 |
|||
} |
|||
}, |
|||
activated() { |
|||
this.getDataList() |
|||
}, |
|||
methods: { |
|||
getDataList(flag) { |
|||
if (flag === 'Y') this.pageIndex = 1 |
|||
this.searchData.page = this.pageIndex |
|||
this.searchData.limit = this.pageSize |
|||
this.dataListLoading = true |
|||
getMachiningOrderList(this.searchData).then(({data}) => { |
|||
this.dataListLoading = false |
|||
if (data && data.code === 0) { |
|||
this.dataList = (data.page.list || []).map(this.normalizeRow) |
|||
this.totalPage = data.page.totalCount || 0 |
|||
} else this.loadMockData() |
|||
}).catch(() => { |
|||
this.dataListLoading = false |
|||
this.loadMockData() |
|||
}) |
|||
}, |
|||
normalizeRow(row) { |
|||
const list = row.nodeList || [] |
|||
const done = list.filter(item => item.status === '已完成').length |
|||
const currentNode = (list.find(item => item.status !== '已完成') || {}).nodeName || '全部完成' |
|||
const assigneeSummary = list.filter(item => item.assigneeUserName).map(item => `${item.nodeName}:${item.assigneeUserName}`).join(';') |
|||
return { ...row, taskQty: row.taskQty != null && row.taskQty !== '' ? row.taskQty : row.modelNo || '', modelNo: row.modelNo != null && row.modelNo !== '' ? row.modelNo : row.taskQty || '', autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL', nodeList: list, nodeDoneCount: done, nodeTotalCount: list.length, currentNode: row.currentNode || currentNode, assigneeSummary: assigneeSummary || '-' } |
|||
}, |
|||
resetQuery() { |
|||
this.searchData = { projectNo: '', taskQty: '', status: '', deliveryStartDate: '', deliveryEndDate: '', page: 1, limit: 20 } |
|||
this.getDataList('Y') |
|||
}, |
|||
openEditDialog(row) { |
|||
this.saveHeaderData = row ? { ...row, taskQty: row.taskQty != null && row.taskQty !== '' ? row.taskQty : row.modelNo || '', modelNo: row.modelNo != null && row.modelNo !== '' ? row.modelNo : row.taskQty || '', autoAssignAllUsers: !!row.autoAssignAllUsers, nodeReportMode: row.nodeReportMode || 'PARALLEL' } : { orderNo: '', projectNo: '', taskQty: '', modelNo: '', floorCount: 1, specialRequirement: '', planDeliveryDate: '', status: '已排产', autoAssignAllUsers: true, nodeReportMode: 'PARALLEL', nodeList: [] } |
|||
this.setUp.reviewFlag = true |
|||
}, |
|||
saveOrder() { |
|||
if (!this.saveHeaderData.projectNo || !this.saveHeaderData.taskQty) return this.$message.warning('请先填写物料号和数量') |
|||
this.setUp.saveButton = true |
|||
const payload = { ...this.saveHeaderData, taskQty: this.saveHeaderData.taskQty } |
|||
saveMachiningOrder(payload).then(({data}) => { |
|||
this.setUp.saveButton = false |
|||
if (data && data.code === 0) { |
|||
this.$message.success(data.msg || '保存成功') |
|||
this.setUp.reviewFlag = false |
|||
this.getDataList() |
|||
} else this.$message.error(data.msg || '保存失败') |
|||
}).catch(() => { |
|||
this.setUp.saveButton = false |
|||
const orderNo = this.saveHeaderData.orderNo || String(Date.now()) |
|||
const index = this.dataList.findIndex(item => item.orderNo === orderNo) |
|||
const saveData = this.normalizeRow({ |
|||
...this.saveHeaderData, |
|||
orderNo: orderNo, |
|||
nodeList: this.saveHeaderData.nodeList && this.saveHeaderData.nodeList.length ? this.saveHeaderData.nodeList : [ |
|||
{ nodeCode: 'stocking', nodeName: '仓库配料', status: '未开始' }, |
|||
{ nodeCode: 'assy', nodeName: '组装', status: '未开始' }, |
|||
{ nodeCode: 'inspect', nodeName: '检验', status: '未开始' }, |
|||
{ nodeCode: 'pack', nodeName: '打包', status: '未开始' } |
|||
] |
|||
}) |
|||
if (index > -1) this.$set(this.dataList, index, saveData) |
|||
else this.dataList.unshift(saveData) |
|||
this.totalPage = this.dataList.length |
|||
this.setUp.reviewFlag = false |
|||
this.$message.success('后端未完成,已在前端演示保存') |
|||
}) |
|||
}, |
|||
openReportDialog(row) { |
|||
this.reportNodeOptions = (row.nodeList || []).filter(item => item.status !== '已完成') |
|||
this.reportData = { orderNo: row.orderNo, projectNo: row.projectNo, nodeCode: '', remark: '' } |
|||
this.setUp.reportFlag = true |
|||
}, |
|||
openAssignDialog(row) { |
|||
if (!row.orderNo) return this.$message.warning('请先保存订单后再分配人员') |
|||
this.currentAssignOrder = { orderNo: row.orderNo, orderType: 'MACHINING' } |
|||
getNodeAssigneeList({ orderNo: row.orderNo, orderType: 'MACHINING' }).then(({ data }) => { |
|||
const assignRows = data && data.code === 0 ? (data.rows || []) : [] |
|||
this.assignNodeList = assignRows.map(item => ({ ...item, assigneeUserIdList: item.assigneeUserIdList || [], userOptions: [] })) |
|||
const requests = this.assignNodeList.map(item => |
|||
getNodeAssigneeUsers({ orderType: 'MACHINING', nodeCode: item.nodeCode }).then(({ data: userData }) => { |
|||
item.userOptions = userData && userData.code === 0 ? (userData.rows || []) : [] |
|||
}).catch(() => { item.userOptions = [] }) |
|||
) |
|||
Promise.all(requests).finally(() => { this.setUp.assignFlag = true }) |
|||
}).catch(() => { |
|||
this.$message.error('加载节点分配信息失败') |
|||
}) |
|||
}, |
|||
saveNodeAssigneeAction() { |
|||
this.setUp.assignButton = true |
|||
const assigneeList = this.assignNodeList.map(item => ({ |
|||
nodeCode: item.nodeCode, |
|||
nodeName: item.nodeName, |
|||
assigneeUserIdList: item.assigneeUserIdList || [] |
|||
})) |
|||
saveNodeAssignee({ |
|||
orderNo: this.currentAssignOrder.orderNo, |
|||
orderType: this.currentAssignOrder.orderType, |
|||
assigneeList: assigneeList |
|||
}).then(({ data }) => { |
|||
this.setUp.assignButton = false |
|||
if (data && data.code === 0) { |
|||
this.$message.success(data.msg || '分配成功') |
|||
this.setUp.assignFlag = false |
|||
this.getDataList() |
|||
} else this.$message.error(data.msg || '分配失败') |
|||
}).catch(() => { |
|||
this.setUp.assignButton = false |
|||
this.$message.error('分配失败') |
|||
}) |
|||
}, |
|||
submitNodeReport() { |
|||
if (!this.reportData.nodeCode) return this.$message.warning('请选择报工节点') |
|||
this.setUp.reportButton = true |
|||
reportMachiningOrderNode(this.reportData).then(({data}) => { |
|||
this.setUp.reportButton = false |
|||
if (data && data.code === 0) { |
|||
this.$message.success(data.msg || '报工成功') |
|||
this.setUp.reportFlag = false |
|||
this.getDataList() |
|||
} else this.$message.error(data.msg || '报工失败') |
|||
}).catch(() => { |
|||
this.setUp.reportButton = false |
|||
this.simulateNodeReport(this.reportData.orderNo, this.reportData.nodeCode) |
|||
this.setUp.reportFlag = false |
|||
this.$message.success('后端未完成,已在前端演示节点报工') |
|||
}) |
|||
}, |
|||
simulateNodeReport(orderNo, nodeCode) { |
|||
const row = this.dataList.find(item => item.orderNo === orderNo) |
|||
if (!row) return |
|||
const node = row.nodeList.find(item => item.nodeCode === nodeCode) |
|||
if (!node) return |
|||
node.status = '已完成' |
|||
row.status = '进行中' |
|||
const nextNode = row.nodeList.find(item => item.status !== '已完成') |
|||
row.currentNode = nextNode ? nextNode.nodeName : '全部完成' |
|||
row.nodeDoneCount = row.nodeList.filter(item => item.status === '已完成').length |
|||
if (!nextNode) { |
|||
row.status = '已完成' |
|||
row.finishDate = this.dayjs().format('YYYY-MM-DD') |
|||
} |
|||
}, |
|||
finishOrder(row) { |
|||
finishMachiningOrder({ orderNo: row.orderNo }).then(({data}) => { |
|||
if (data && data.code === 0) { |
|||
this.$message.success(data.msg || '完工成功') |
|||
this.getDataList() |
|||
} else this.$message.error(data.msg || '完工失败') |
|||
}).catch(() => { |
|||
row.status = '已完成' |
|||
row.finishDate = this.dayjs().format('YYYY-MM-DD') |
|||
row.nodeList = row.nodeList.map(item => ({ ...item, status: '已完成' })) |
|||
row.currentNode = '全部完成' |
|||
row.nodeDoneCount = row.nodeTotalCount |
|||
this.$message.success('后端未完成,已在前端演示完工') |
|||
}) |
|||
}, |
|||
deleteOrder(row) { |
|||
this.$confirm('确定删除该加工订单吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { |
|||
deleteMachiningOrder({ orderNo: row.orderNo }).then(({data}) => { |
|||
if (data && data.code === 0) { |
|||
this.$message.success(data.msg || '删除成功') |
|||
this.getDataList() |
|||
} else this.$message.error(data.msg || '删除失败') |
|||
}).catch(() => { |
|||
this.dataList = this.dataList.filter(item => item.orderNo !== row.orderNo) |
|||
this.totalPage = this.dataList.length |
|||
this.$message.success('后端未完成,已在前端演示删除') |
|||
}) |
|||
}).catch(() => {}) |
|||
}, |
|||
getStatusType(status) { |
|||
const map = { 已排产: 'info', 进行中: 'warning', 已完成: 'success' } |
|||
return map[status] || 'info' |
|||
}, |
|||
sizeChangeHandle(val) { |
|||
this.pageSize = val |
|||
this.pageIndex = 1 |
|||
this.getDataList() |
|||
}, |
|||
currentChangeHandle(val) { |
|||
this.pageIndex = val |
|||
this.getDataList() |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.data-table { |
|||
background-color: #fff; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.data-table >>> .el-table__header-wrapper th, |
|||
.data-table >>> .el-table__fixed-header-wrapper th { |
|||
background-color: #f5f7fa !important; |
|||
color: #333; |
|||
font-weight: 600; |
|||
border-color: #ebeef5; |
|||
padding: 8px 0; |
|||
} |
|||
|
|||
.data-table >>> .el-table__header-wrapper .cell, |
|||
.data-table >>> .el-table__fixed-header-wrapper .cell, |
|||
.data-table >>> .el-table__body-wrapper .cell, |
|||
.data-table >>> .el-table__fixed-body-wrapper .cell { |
|||
padding: 0 10px; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
font-size: 13px !important; |
|||
} |
|||
|
|||
.data-table >>> .el-table__body tr:hover > td { |
|||
background-color: #f5f7fa !important; |
|||
} |
|||
|
|||
.data-table >>> .el-table__body tr.current-row > td { |
|||
background-color: #ecf5ff !important; |
|||
} |
|||
|
|||
.query-form { |
|||
background-color: #fff; |
|||
padding: 15px 15px 5px 15px; |
|||
border-radius: 4px; |
|||
margin-bottom: 12px; |
|||
} |
|||
|
|||
.query-form >>> .el-form-item__label { |
|||
color: #333; |
|||
font-size: 13px; |
|||
padding-bottom: 5px; |
|||
} |
|||
|
|||
.query-form >>> .el-input__inner { |
|||
height: 32px; |
|||
line-height: 32px; |
|||
border-radius: 4px; |
|||
font-size: 13px; |
|||
} |
|||
|
|||
.query-form >>> .el-button { |
|||
height: 32px; |
|||
padding: 0 15px; |
|||
font-size: 13px; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.search-btn { |
|||
background-color: #ecf5ff; |
|||
border-color: #b3d8ff; |
|||
color: #409eff; |
|||
} |
|||
|
|||
.search-btn:hover { |
|||
background-color: #409eff; |
|||
border-color: #409eff; |
|||
color: #fff; |
|||
} |
|||
|
|||
.reset-btn { |
|||
background-color: #f5f7fa; |
|||
border-color: #d3d4d6; |
|||
color: #606266; |
|||
} |
|||
|
|||
.reset-btn:hover { |
|||
background-color: #909399; |
|||
border-color: #909399; |
|||
color: #fff; |
|||
} |
|||
|
|||
.add-btn { |
|||
background-color: #f0f9eb; |
|||
border-color: #c2e7b0; |
|||
color: #67c23a; |
|||
} |
|||
|
|||
.add-btn:hover { |
|||
background-color: #67c23a; |
|||
border-color: #67c23a; |
|||
color: #fff; |
|||
} |
|||
|
|||
.dialog-footer { |
|||
text-align: right; |
|||
} |
|||
|
|||
.edit-form { |
|||
margin-left: 5px; |
|||
margin-top: -5px; |
|||
} |
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue