按照以下生成帮助说明系统界面说明文档规范
一、目的:
软件系统界面帮助说明是用户与系统之间重要的沟通桥梁,帮助用户快速了解该菜单的功能以及数据来源、数据逻辑,后续可自行操作或者核查信息。
二、编制和适用范围:
e-ONE一体化系统全部界面菜单
三、定义和分类:
由于系统界面菜单主要分操作及查询两大类,界面帮助说明相应进行标准化。
四、职责和更新要求:
界面帮助说明由开发人员按要求整理,发布流程时上传Word文档,正式库发布24小时更新到正式库界面帮助说明中。
五 操作类界面文档内容:
1、 菜单总体功能描述。
Ex: 按项目、材质进行各工序周期统计,求平均数。
2、按钮功能。
每个按钮功能及对应的角色
Ex:预制地设置按钮:选中小票设置小票的预制地,根据设置的预制地进行排产派工,该按钮对应的角色是管-内场角色
Ex:导入按钮:导入该菜单中的材质和厂家日期信息,同时日期格式必须是日日-月月-年年)
有的功能当前只是适用某个基地或者项目或者特殊业务场景等,都要进行说明。
3、字段说明。(除常规字段例如:项目、基地、车间、班组、姓名、工号、图纸号、图纸名、备注等,其他字段都需说明)
说明每个字段含义、数据来源、相关计算逻辑(如果数据有定时任务,请标明定时任务的名称、时间点以及是否有手动刷新的按钮)
Ex:小票号:小票的标识,项目号+小票号+版本确定唯一一条数据。
小票版本:从0版开始,图纸修改会升级版本,版本连续增长,由技术做升版操作
如定时任务同步,标明执行时间与任务名称。
Ex:数据来源于技术和导入操作,每天凌晨一点,技术推送数据。
4、与此菜单关联的基础配置信息。
Ex: MES基地配置(配置后的项目及基地才能进行MES作业下达)
5、更新日志与版本说明
更新日志:统一放到系统更新日志里,在帮助页面放更新日志编号,附加链接即可
版本说明:针对有特殊浏览器版本需求的菜单,提供详细的版本说明和兼容性信息,该菜单需要使用谷歌100以上版本等
Ex:20240329:新增作业区字段(需求提出人:王跳跳;需求负责人: 王建国;开发人员: 王富贵);。
Ex:20240320:新增属地展示。(需求提出人:王跳跳;需求负责人: 王建国;开发人员: 王富贵)
6、负责人及开发人员。
遇到问题方便查找相关人。
Ex: (需求负责人: 王翠花 开发人员: 王富贵)
如果当前需求或者开发人员和前期不一致,请一起写上
1、 报表看板查询类文档内容:
1、报表或者看板总体功能介绍。
Ex: 按项目、材质进行各工序周期统计,求平均数。数据为实时查询。
2、报表适用的场景和范围以及适用角色。
该看板或者报表给哪个场景或者角色使用,方便后期权限维护。
Ex:项目计划员角色需要查询该报表或者该报表当前只是烟台基地开放使用等
3、界面布局:
如果该报表或者看板比较复杂,需要介绍报表界面布局包括上方工具栏、左面板、报表内容区域、分页等信息
4、字段说明。(除常规字段例如:项目、基地、车间、班组、姓名、工号、图纸号、图纸名、备注等,其他字段都需说明)
说明每个字段含义、数据来源、相关计算逻辑(如果数据有定时任务,请标明定时任务的名称、时间点以及手动刷新的按钮)
Ex:小票号:小票的标识,项目号+小票号+版本确定唯一一条数据。
小票版本:从0版开始,图纸修改会升级版本,版本连续增长,由技术做升版操作
如定时任务同步,标明执行时间与任务名称。
Ex:数据来源于技术和导入操作,每天凌晨一点,技术推送数据。
5、更新日志与版本说明
更新日志:统一放到系统更新日志里,在帮助页面放更新日志编号,附加链接即可
版本说明:针对有特殊浏览器版本需求的菜单,提供详细的版本说明和兼容性信息,该菜单需要使用谷歌100以上版本等。
Ex:20240329:新增作业区字段(需求提出人:王跳跳;需求负责人: 王建国;开发人员: 王富贵);。
Ex:20240320:新增属地展示。(需求提出人:王跳跳;需求负责人: 王建国;开发人员: 王富贵)
6、负责人及开发人员。
遇到问题方便查找相关人。
Ex: (需求负责人: 王翠花 开发人员: 王富贵)
帮助说明更新时间:2025-01-01
标准模版:
一、菜单总体功能描述
[菜单总体功能描述内容]
二、按钮功能
按钮名称 功能描述 对应角色
按钮1名称 按钮1功能描述 按钮1对应角色
三、字段说明
字段名称 含义 数据来源 计算逻辑
字段1名称 字段1含义 字段1数据来源 字段1计算逻辑
四、关联的基础配置信息
关联基础配置信息列表项,每项一个说明,如:
五、更新日志与版本说明
版本说明
[版本说明内容,如浏览器兼容性等]
更新日志
[更新日志行数据,每行一个标签包裹,如: ]
版本 更新说明 业务对接人 需求负责人 开发人员 更新日期
V1 初始版本上线,[具体功能描述] [业务需求对接人姓名-IC卡号] [需求负责人姓名] [开发人员姓名] [更新日期V1]
六、负责人及开发人员
需求负责人:[具体需求负责人姓名]
开发人员:[具体开发人员姓名]
(若当前需求/开发人员与前期不一致,补充说明:前期需求负责人为[前期姓名]、开发人员为[前期姓名],当前迭代由[现姓名]负责)
样例:
代码为<!-- 周报文件 -->
<template>
<div>
<!-- 顶部筛选条件 -->
<c-search-panel :columns="columns.concat(extraColumns)" @search="search" ref="searchForm">
<template slot="projectNo">
<v-project-select
mode="multiple"
maxSelect="2"
style="width: 174px"
v-decorator="[
'projectId',
{
rules: [
{
required: true,
message: $t('pipeControll.common.selectProjectNumber'),
},
],
},
]"
/>
</template>
<template slot="cutOffDate">
<a-range-picker @change="cutOffDateChange" v-model="cutOffDate" />
</template>
</c-search-panel>
<v-table
filled
:dataSource="this.dataList"
:columns="columns"
:pagination="pagination"
:toolbar="toolbar"
@toolbar-button-click="onToolbarClick"
:proxy-config="proxyConfig"
:sort-congfig="sortConfig"
ref="vtable"
:loading="$store.state.spinning"
:empty-text="empty"
>
<template #action="{ record }">
<a @click="upload(record,'monthlyReport')" type="primary" v-resource="[{ url: '/service-product/monthlyReport/upload/monthlyReport', method: 'POST' }]" >上传周报</a>
<a-divider type="vertical" />
<a @click="upload(record,'attachment')" type="primary" v-resource="[{ url: '/service-product/monthlyReport/upload/attachment', method: 'POST' }]">上传附件</a>
<a-divider v-if="record.monthlyFileId" type="vertical" />
<a @click="download(record,'monthlyReport')" v-if="record.monthlyFileId" type="primary" v-resource="[{ url: '/service-product/monthlyReport/download/monthlyReport', method: 'GET' }]">download monthly report</a>
<a-divider v-if="record.attachmentFileId" type="vertical" />
<a @click="download(record,'attachment')" v-if="record.attachmentFileId" type="primary" v-resource="[{ url: '/service-product/monthlyReport/download/attachment', method: 'GET' }]">download attachment</a>
</template>
<template #projectNo="{ record }">
<div>{{ record.projectName }}</div>
</template>
</v-table>
<a-modal
:visible="fileVisible"
@ok="fileModalOk"
@cancel="fileModalCancel"
:footer="null"
:title="this.type == 'monthlyReport'?'上传周报':'上传附件'"
okText="确认"
width="700px"
>
<a-row>
<a-upload
:file-list="uploadList"
:remove="handleRemove"
:before-upload="beforeUpload"
list-type="text"
@change="handleUpload"
:multiple="false"
>
<a-button> <a-icon type="upload" />{{ $t('上传文件') }} </a-button>
</a-upload>
</a-row>
</a-modal>
</div>
</template>
<script>
import { fileSaver } from "@/utils";
import * as Serve from "~api/modules/board/p80/monthlyReport/monthlyReport";
import moment from "moment";
import * as vsServe from "~api/modules/board/H609/visitsStatistics";
export default {
data() {
return {
empty:this.$t("noData.default"),
id:'',
type:'',
fileVisible:false,
uploadList: [],
cutOffDate: ['', ''],
columns: [
{ type: "checkbox", width: 50 },
{
dataIndex: "projectId",
title: "Project",
type: "project",
width: 200,
condition: true,
align: "center",
scopedSlots: { customRender: "projectNo" },
},
{
title: "Serial No.",
align: "center",
condition: true,
dataIndex: "serialNo",
width: 100,
},
{
title: "Month",
align: "center",
condition: true,
dataIndex: "month",
width: 100,
},
{
title: "Cutoff Date",
align: "center",
dataIndex: "cutoffDate",
width: 120,
},
{
title: "Monthly Report",
align: "center",
dataIndex: "monthlyReport",
width: 300,
},
{
title: "Attachments",
align: "center",
dataIndex: "attachments",
width: 250,
},
{
//title: "操作",
title: this.$t("column.operation"),
key: "action",
sortable: false,
align: "center",
width: 350,
scopedSlots: { customRender: "action" },
},
],
extraColumns: [
{
title: "Cutoff Date",
visible: false,
condition: true,
scopedSlots: {
customRender: "cutOffDate",
},
},
],
toolbar: {
buttons: [
{
code: "imp",
name: "import",
resource: [
{
url: "/service-product/cd/monthly/report/importDatas",
method: "POST",
},
],
},
{
code: "exp",
name: "export",
resource: [{ url: "/service-product/cd/monthly/report/export", method: "GET" }],
},
],
},
pagination: {
total: 0,
},
dataList: [],
sortConfig: { default: "id", sort: "desc" },
proxyConfig: {
autoLoad:false,
ajax: {
query: ({ page, sort, filters }, ...args) => {
if(this.conditionData == undefined){
this.conditionData = {};
}
let cutOffStartDate = "";
let cutOffEndDate = "";
if (
this.cutOffDate.length == 2 &&
this.cutOffDate[0] != "" &&
this.cutOffDate[0] != null &&
this.cutOffDate[1] != "" &&
this.cutOffDate[1] != null
) {
cutOffStartDate = moment(this.cutOffDate[0]).format("YYYY/MM/DD");
cutOffEndDate = moment(this.cutOffDate[1]).format("YYYY/MM/DD");
}
if (cutOffStartDate != "" && cutOffStartDate != null ) {
this.$set(this.conditionData, "cutOffStartDate", cutOffStartDate);
}
if (cutOffEndDate != "" && cutOffEndDate != null) {
this.$set(this.conditionData, "cutOffEndDate", cutOffEndDate);
}
vsServe.save([{projectId:2902,pathName:window.sessionStorage.getItem("currMenuId")}]);
let data = Serve.page({
...this.conditionData,
...this.$vtable.pagination(page),
});
data.then(res=>{
if (res.data.content.length==0) {
this.empty=this.$t("noData.notAvailableData")
}
})
return data
},
},
},
};
},
beforeCreate() {
this.searchForm = this.$form.createForm(this);
},
computed: {
table() {
return this.$refs.vtable.getTable();
},
form() {
return this.$refs.searchForm.getForm();
},
},
mounted() {
},
methods: {
onToolbarClick(target) {
switch (target.code) {
case "imp":
this.importData();
break;
case "exp":
this.exp();
break;
default:
break;
}
},
fileModalCancel() {
this.fileVisible = false;
this.id = '';
this.type = '';
this.uploadList=[];
},
fileModalOk() {
this.fileVisible = false;
this.id = '';
this.type = '';
this.uploadList=[];
},
// 查询
search(values) {
if (values.projectId) {
values.projectIds = values.projectId.join(",");
delete values.projectId;
}
this.conditionData = values;
this.table.commitProxy("reload", { page: 0 });
},
// 选择截止日期
cutOffDateChange(date, dateString) {
this.cutOffDate = date;
},
// 移除列表中文件
handleRemove(file) {
const index = this.uploadList.indexOf(file)
const newFileList = this.uploadList.slice()
newFileList.splice(index, 1)
this.uploadList = newFileList
},
// 文件上传前处理
beforeUpload(file) {
this.uploadList = [...this.uploadList, file]
return false
},
getPromiseArray(uploadList) {
let promiseArr = []
uploadList.forEach((file) => {
const promiseItem = this.$store.dispatch(
'MaintenanceRespPlan/upload',
file
)
promiseArr.push(promiseItem)
})
return promiseArr
},
handleUpload() {
const { uploadList } = this
Promise.all(this.getPromiseArray(uploadList))
.then((response) => {
console.log('response',response);
if(response && response[0].data) {
let values = [];
if(this.type =='monthlyReport') {
values.push({id:this.id,monthlyFileName:response[0].data.name,monthlyFileId:response[0].data.id});
} else {
values.push({id:this.id,attachmentFileName:response[0].data.name,attachmentFileId:response[0].data.id});
}
Serve.save(values).then((res) => {
if (!res.error) {
this.$message.success('上传成功!')
this.fileModalCancel();
this.table.commitProxy('reload', { page: 0 })
}
})
}
})
.catch(({ response }) => {
this.$message.error(this.$t('maintenance.common.uploadFailed'))
})
},
upload(record,type) {
this.fileVisible = true;
this.id = record.id;
this.type = type;
},
//预览下载
download(record,type) {
let fid = '';
let fname = '';
if(type == 'monthlyReport') {
fid = record.monthlyFileId;
fname = record.monthlyFileName;
} else {
fid = record.attachmentFileId;
fname = record.attachmentFileName;
}
Serve.downloadFile(fid).then(msg => {
if (!msg.error) {
fileSaver.saveAs(msg.data, fname);
}
});
},
importData() {
this.table.readFile({ types: ["xlsx", "xls"] }).then(response => {
const { files } = response;
if (files.length < 1) return;
let params = { file: files[0] };
Serve.imp(params).then(response => {
if (response.data.size > 0) {
this.$message.error("上传失败,请查看错误文件");
fileSaver.saveAs(response.data, "导入提示.xlsx");
} else {
this.$message.success(this.$t("pipeControll.common.uploadSuccess"));
this.table.commitProxy("query");
}
});
});
},
exp() {
this.form.validateFields((err, values) => {
if (values.projectId) {
values.projectIds = values.projectId.join(",");
delete values.projectId;
}
if (!err) {
vsServe.save([{projectId:2902,pathName:window.sessionStorage.getItem("currMenuId")}]);
Serve.exp(values).then(({ data }) => {
this.$notification.open({
duration: 0,
message: "导出内容准备中....",
description:this.$t('assemblybasic.structure.exportstructuretips'),
icon: <a-icon type="check-circle" theme="twoTone" twoToneColor="#52c41a" />,
});
});
}
});
},
},
};
</script>