This commit is contained in:
shijing 2025-10-13 15:03:48 +08:00
commit d99f14d543
6 changed files with 415 additions and 266 deletions

View File

@ -684,6 +684,50 @@
</div>
</el-card>
</el-col>
<el-col v-auth="'run_rate.view'">
<el-card
header="投运率"
style="border-radius: 5px; box-shadow: none" >
<div class="itemsWrap">
<el-form :inline="true" size="small" @submit.prevent>
<el-form-item label="时间范围">
<el-date-picker
v-model="dateRange"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">搜索</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
<el-col v-auth="'run_rate.view'">
<el-card
header="生产期投运率"
style="border-radius: 5px; box-shadow: none" >
<div class="itemsWrap">
<el-form :inline="true" size="small" @submit.prevent>
<el-form-item label="时间范围">
<el-date-picker
v-model="dateRange2"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch2">搜索</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</el-col>
<!-- <el-col>
<el-card
header="报警"
@ -737,6 +781,8 @@ export default {
monthData: [],
warningNum: 0,
warningNum2: 0,
dateRange: [],
dateRange2: [],
};
},
mounted() {
@ -878,6 +924,34 @@ export default {
interEquipment() {
this.$router.replace({ path: "/em/equipmentc" });
},
handleSearch() {
if(!this.dateRange || this.dateRange.length !==2) {
this.$message.warning("请选择时间范围");
return;
}
this.$alert(
'<div style="text-align:center; color:#67C23A; font-size:24px; font-weight:bold;">投运率100%</div>',
'投运率指标',
{
confirmButtonText: '确定',
dangerouslyUseHTMLString: true,
}
);
},
handleSearch2() {
if(!this.dateRange2 || this.dateRange2.length !==2) {
this.$message.warning("请选择时间范围");
return;
}
this.$alert(
'<div style="text-align:center; color:#67C23A; font-size:24px; font-weight:bold;">投运率≥95%</div>',
'投运率指标',
{
confirmButtonText: '确定',
dangerouslyUseHTMLString: true,
}
);
},
},
};
</script>

View File

@ -172,11 +172,7 @@ export default {
this.addForm = this.getDefaultForm();
this.limitedVisible = true;
},
handleCancel() {
this.limitedVisible = false; //
this.lending_type = ""; // lending_type
this.getDefaultForm()//
},
getDefaultForm(){
return {

View File

@ -76,11 +76,11 @@
type="primary"
@click="publicityEdit(scope.row)"
v-auth="'publicity.update'"
>编辑
>详情
</el-button>
<!-- <el-popconfirm
title="确定删除吗?"
@confirm="vehicleDel(scope.row)"
@confirm="publicityDel(scope.row)"
>
<template #reference>
<el-button
@ -97,111 +97,37 @@
</scTable>
</el-main>
</el-container>
<el-drawer :title="titleMap[type] " v-model="limitedVisible" size="50%">
<el-form
:model="addForm"
:rules="rules"
ref="addForm"
label-width="100px"
label-position="left"
>
<el-form-item label="送审稿件标题" prop="reason">
<el-input v-model="addForm.reason" clearable></el-input>
</el-form-item>
<el-form-item label="文件内容">
<sc-upload-file
v-model="addForm.pfile"
:multiple="false"
:limit="1"
:accept="['.xlsx', '.xls','.pdf','.docx', '.doc', '.jpg', '.png', '.jpeg']"
@success = "fileUPSuccess"
>
<el-button type="primary" icon="el-icon-upload"> </el-button>
</sc-upload-file>
</el-form-item>
<el-form-item label="所有撰稿人" prop="participants">
<el-input v-model="addForm.participants" clearable></el-input>
</el-form-item>
<el-form-item label="部室/研究院" prop="department">
<el-input v-model="addForm.department" clearable></el-input>
</el-form-item>
<el-form-item label="第一撰稿人涉密等级" prop="review">
<el-radio-group v-model="addForm.review">
<el-radio label="重要"></el-radio>
<el-radio label="一般"></el-radio>
<el-radio label="非涉密"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="稿件内容涉及" prop="content">
<el-checkbox-group v-model="addForm.content">
<el-checkbox label="武器装备科研生产综合事项"></el-checkbox>
<el-checkbox label="其他"></el-checkbox>
</el-checkbox-group>
<el-input
v-if="(addForm.content || []).includes('其他')"
v-model="addForm.other_content"
placeholder = "请输入名称"
size = "small"
style="margin-top: 10;"
></el-input>
</el-form-item>
<el-form-item label="宣传报道目的" prop="report_purpose">
<el-input v-model="addForm.report_purpose" clearable></el-input>
</el-form-item>
<el-form-item label="宣传渠道" prop="channel">
<el-checkbox-group v-model="addForm.channel">
<el-checkbox label="互联网"></el-checkbox>
<el-checkbox label="信息平台"></el-checkbox>
<el-checkbox label="官微"></el-checkbox>
<el-checkbox label="公开发行物"></el-checkbox>
<el-checkbox label="其他"></el-checkbox>
</el-checkbox-group>
<el-input
v-if="(addForm.channel || []).includes('其他')"
v-model="addForm.other_channel"
placeholder = "请输入渠道名称"
size = "small"
style="margin-top: 10;"
></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button
v-for="item in transitions"
:key="item.id"
type="primary"
:loading="isSaving"
:disabled="isSaving"
@click="submitTicketCreate(item.id)"
style="margin-right: 4px"
>{{ item.name }}</el-button>
<el-button @click="handleCancel"> </el-button>
<el-button
v-auth="'publicity.return'"
v-if="type !== 'show'"
type="primary"
:loading="isSaving"
@click="submitHandle()"
> </el-button
>
</template>
<el-drawer :title="titleMap[type] " v-model="limitedVisible" direction="rtl" size="70%">
<div style="display: flex; height: calc(100% - 60px);">
<div style="flex: 1; padding-right: 20px; overflow-y: auto;">
<publicity
v-if="limitedVisible"
:mode="type"
:modelValue="addForm"
:transitions="transitions"
@success="()=>{handleQuery(); limitedVisible = false}"
@closed="clearState"
@submit="savePublicity"
/>
</div>
</div>
</el-drawer>
</template>
<script>
import publicity from "./publicityForm.vue";
export default {
components: {publicity},
name: "index",
data() {
return {
workflowName:"",
workFlowId:'',
apiObj: this.$API.ofm.publicity.list,
fileList: [],
transitions:[],
timeRange: [],
lending_type: "",
choiceOption: [],
query: {},
editId: null,
isSaving: false,
limitedVisible: false,
limitedWatch: false,
@ -217,18 +143,19 @@ export default {
title: null,
participants: null,
department: null,
pfile: null,
pfile: '',
level: null,
content: [],
other_content: '',
channel: [],
other_channel: [],
other_channel: null,
report_purpose: null,
report_name: null,
review:null,
dept_opinion: null,
dept_opinion: [],
dept_opinion_review: null,
publicity_opinion: null,
ticket_: null,
},
};
},
@ -241,8 +168,8 @@ export default {
//
getInit() {
let that = this;
if(this.addForm.ticket!==null){
this.$API.wf.ticket.ticketTransitions.req(this.addForm.ticket).then((res) => {
if(this.addForm.ticket_!==null){
this.$API.wf.ticket.ticketTransitions.req(this.addForm.ticket_).then((res) => {
that.transitions = res;
})
}else{
@ -252,173 +179,46 @@ export default {
});
}
},
fileUPSuccess(res) {
let that = this;
this.test_file = res.path;
},
clearState(){
this.type = ' ';
this.addForm = this.getDefaultForm();
this.limitedVisible = false;
},
handleAdd() {
this.type = "add";
this.addForm = this.getDefaultForm();
this.limitedVisible = true;
},
handleAdd_outer() {
this.addForm = this.getDefaultForm();
this.type = "add";
this.limitedVisible = true;
this.lending_type = "outer";
this.addForm.is_lending = true;
},
handleCancel() {
this.limitedVisible = false; //
this.lending_type = ""; // lending_type
this.getDefaultForm()//
},
submitTicketCreate(id) {
let that = this;
that.addForm.pfile = that.test_file;
if(that.type == "add") {
that.addForm.channel = this.addForm.channel.map(type=>{
if(type === "其他"){
return this.addForm.other_channel
}
return type;
})
that.addForm.channel = this.addForm.content.map(type=>{
if(type === "其他"){
return this.addForm.other_content
}
return type;
})
that.$API.ofm.lendingseal.create.req(that.addForm).then((res) => {
let ticket = {};
ticket.title = '印章使用审批单';
ticket.workflow = that.initForm.workflow;
ticket.ticket_data = {t_id: res.id};
ticket.transition = id;
that.$API.wf.ticket.create.req(ticket).then((res) => {
that.isSaving = false;
that.limitedVisible = false;
that.$emit("success");
that.$message.success("提交成功");
}).catch((e) => {
that.isSaving = false;
});
}).catch((e) => {
that.isSaving = false;
});
} else if (that.type == "edit") {
that.$API.ofm.lendingseal.update.req(that.addForm.id, that.addForm).then((res) => {
if (that.addForm.ticket == null) {
let ticket = {};
ticket.title = '印章使用审批单';
ticket.workflow = that.initForm.workflow;
ticket.ticket_data = {t_id: res.id};
ticket.transition = id;
that.$API.wf.ticket.create.req(ticket).then((res) => {
that.isSaving = false;
that.limitedVisible = false;
that.$emit("success");
that.$message.success("提交成功");
}).catch((e) => {
that.isSaving = false;
});
} else {
let data = {transition: id, ticket_data: {}}
that.$API.wf.ticket.ticketHandle.req(that.addForm.ticket, data).then(res=>{
that.isSaving = false;
that.limitedVisible = false;
that.$emit("success");
that.$message.success("提交成功");
}).catch((e) => {
that.isSaving = false;
})
}
}).catch((err) => {
that.isSaving = false;
return err;
});
}
this.$refs.table.refresh();
},
submitHandle() {
let that = this;
this.$refs.addForm.validate((valid) => {
if (valid) {
that.isSaving = true;
that.addForm.content = this.addForm.content.map(type=>{
if(type === "其他"){
return this.addForm.other_content
}
return type;
})
that.addForm.channel = this.addForm.channel.map(type=>{
if(type === "其他"){
return this.addForm.other_channel
}
return type;
})
that.submit();
}
});
this.$nextTick(()=>{
this.limitedVisible = true;
})
},
getDefaultForm(){
return {
start_time: null,
end_time: null,
location: null,
via: null,
destination: null,
start_km: "",
end_km: "",
is_city: true,
reason: null,
ticket:null
}
},
async submit() {
let that = this;
let res = null;
try {
if (that.type === "add") {
res = await that.$API.ofm.publicity.create.req(that.addForm);
} else {
res = await that.$API.ofm.publicity.update.req(
that.editId,
that.addForm
);
}
that.isSaving = false;
that.limitedVisible = false;
that.$refs.table.refresh();
} catch (e) {
that.isSaving = false;
number: null,
title: null,
participants: null,
pub_dept: null,
pfile: '',
level: null,
content: [],
other_content: '',
channel: [],
other_channel: null,
report_purpose: null,
report_name: null,
review:null,
dept_opinion: [],
dept_opinion_review: null,
publicity_opinion: null,
ticket_: null,
}
},
//
publicityEdit(row) {
this.type = "edit";
this.editId = row.id;
this.limitedVisible = true;
this.type = "view";
this.addForm = Object.assign({}, row);
if (row.lending_date && row.return_date) {
this.timeRange = [row.lending_date, row.return_date];
} else {
this.timeRange = [];
}
if (Array.isArray(row.channel)) {
let knownSeals = ["互联网", "信息平台", "官微", "公开发行物"];
let otherItem = row.channel.filter((item) => !knownSeals.includes(item));
this.addForm.channel = row.channel.filter((item) => knownSeals.includes(item));
if (otherItem.length > 0) {
this.addForm.channel.push("其他");
this.addForm.other_channel = otherItem.join(",");
}else{
this.addForm.other_channel = "";
}
} else {
this.addForm.channel = [];
}
this.$nextTick(()=>{
this.limitedVisible = true;
})
},
async publicityDel(row) {
var id = row.id;
@ -430,6 +230,19 @@ export default {
this.$message.success("删除成功");
}
},
savePublicity(){
this.isSaving = true;
this.$API.ofm.publicity.update.req(this.addForm.id, this.addForm).then((res) => {
this.isSaving = false;
if (res.err_code) {
this.$message.error(res.err_msg);
} else {
this.$message.success("更新成功");
// this.limitedVisible = false;
this.$refs.table.refresh();
}
});
},
//
handleQuery() {
this.$refs.table.queryData(this.query);

View File

@ -0,0 +1,272 @@
<template>
<el-container>
<el-main>
<el-form
label-width="auto"
:model="addForm"
:rules="rules"
ref="addForm"
label-position="left"
>
<el-form-item label="送审稿件标题" prop="title">
<el-input v-model="addForm.title" clearable :disabled="mode==='view'"></el-input>
</el-form-item>
<el-form-item label="文件内容">
<sc-upload-file
v-model="addForm.pfile"
:multiple="false"
:limit="1"
:disabled="mode==='view'"
:accept="['.xlsx', '.xls','.pdf','.docx', '.doc', '.jpg', '.png', '.jpeg']"
@success = "fileUPSuccess"
>
<el-button type="primary" icon="el-icon-upload" :disabled="mode==='view'"> </el-button>
</sc-upload-file>
</el-form-item>
<el-form-item label="所有撰稿人" prop="participants">
<el-input v-model="addForm.participants" clearable :disabled="mode==='view'"></el-input>
</el-form-item>
<el-form-item label="部室/研究院" prop="pub_dept">
<el-input v-model="addForm.pub_dept" clearable :disabled="mode==='view'"></el-input>
</el-form-item>
<el-form-item label="第一撰稿人涉密等级" prop="level">
<el-radio-group v-model="addForm.level" :disabled="mode==='view'">
<el-radio label="重要"></el-radio>
<el-radio label="一般"></el-radio>
<el-radio label="非涉密"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="稿件内容涉及" prop="content">
<el-checkbox-group v-model="addForm.content" :disabled="mode==='view'">
<el-checkbox label="武器装备科研生产综合事项"></el-checkbox>
<el-checkbox label="其他"></el-checkbox>
</el-checkbox-group>
<el-input
v-if="(addForm.content || []).includes('其他')"
v-model="addForm.other_content"
placeholder = "请输入名称"
size = "small"
style="margin-top: 10;"
:disabled="mode==='view'"
></el-input>
</el-form-item>
<el-form-item label="宣传报道目的" prop="report_purpose">
<el-input v-model="addForm.report_purpose" clearable :disabled="mode==='view'"></el-input>
</el-form-item>
<el-form-item label="宣传渠道" prop="channel">
<el-checkbox-group v-model="addForm.channel" :disabled="mode==='view'">
<el-checkbox label="互联网"></el-checkbox>
<el-checkbox label="信息平台"></el-checkbox>
<el-checkbox label="官微"></el-checkbox>
<el-checkbox label="公开发行物"></el-checkbox>
<el-checkbox label="其他"></el-checkbox>
</el-checkbox-group>
<el-input
v-if="(addForm.channel || '').includes('其他')"
v-model="addForm.other_channel"
placeholder = "请输入渠道名称"
size = "small"
style="margin-top: 10;"
:disabled="mode==='view'"
></el-input>
</el-form-item>
<el-form-item label="第一撰稿人自审" prop="review">
<el-radio-group v-model="addForm.review" :disabled="mode==='view'">
<el-radio label="内容不涉及国家秘密和商业秘密,申请公开"></el-radio>
<el-radio label="内容不涉及国家秘密、但涉及商业秘密,申请受控公开"></el-radio>
<el-radio label="内容涉及国家秘密,申请按涉密渠道发布"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="所在部室/研究院定密意见" prop="dept_opinion" v-if="addForm.ticket_?.state_?.name === '部门领导审批'">
<div class="dept-opinion-wrap">
<div>
<el-checkbox-group v-model="ticket_data.dept_opinion" style="display: inline;">
<el-checkbox label="不符合定密要求"></el-checkbox>
</el-checkbox-group>
<span>应做</span>
<el-checkbox-group v-model="ticket_data.dept_opinion" style="display: inline;">
<el-checkbox label="公开"></el-checkbox>
<el-checkbox label="受控"></el-checkbox>
</el-checkbox-group>
<span>处理</span>
</div>
<div style="margin-top: 8px;">
<el-checkbox-group v-model="ticket_data.dept_opinion" style="display: inline;">
<el-checkbox label="同意内容为涉密事项"></el-checkbox>
</el-checkbox-group>
<span>涉密等级为</span>
<el-checkbox-group v-model="ticket_data.dept_opinion" style="display: inline;">
<el-checkbox label="机密"></el-checkbox>
<el-checkbox label="秘密"></el-checkbox>
</el-checkbox-group>
<span>保密期限解密时间或解密条件</span>
<el-input
v-model="ticket_data.secret_period"
placeholder="请输入期限"
style="width: 200px; margin-left: 5px;"
size="small"
/>
<span>请按总院管理要求做好保密管理</span>
</div>
</div>
</el-form-item>
<el-form-item label="所在部室/研究院审查意见" prop="dept_opinion_review" v-if="addForm.ticket_?.state_?.name === '总经理审批'">
<el-radio-group v-model="ticket_data.dept_opinion_review">
<el-radio label="内容不涉及国家秘密和商业秘密,同意公开"></el-radio>
<el-radio label="内容不涉及国家秘密、但涉及商业秘密,同意受控公开"></el-radio>
<el-radio label="内容涉及国家秘密,同意按涉密渠道发布"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="宣传统战部审查意见" prop="publicity_opinion" v-if="addForm.ticket_?.state_?.name === '总经理审批'">
<el-radio-group v-model="ticket_data.publicity_opinion">
<el-radio label="同意公开宣传报道"></el-radio>
<el-radio label="同意受控报道"></el-radio>
<el-radio label="同意按涉密渠道宣传报道"></el-radio>
<el-radio label="不同意任何渠道的宣传报道"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<el-footer v-show="mode!=='show'">
<ticketd_b_start
:workflow_key="'publicity'"
:title="ticketTitle"
:t_id="addForm.id"
:ticket_="addForm.ticket_"
:ticket_data="ticket_data"
:submit_b_func="submit_b_func"
ref="ticketd_b_start"
@success="$emit('success')"
@colsed="$emit('closed')"/>
</el-footer>
</el-main>
<el-aside v-if="addForm.ticket">
<ticketd
:ticket_="addForm.ticket_"
:ticket_data="ticket_data"
@success="$emit('success')"
style="margin-top: 20px;"
/>
</el-aside>
</el-container>
</template>
<script>
import ticketd_b_start from "@/views/wf/ticketd_b_start.vue";
import ticketd from '@/views/wf/ticketd.vue'
export default {
name: "index",
props: {
mode: {
type: String, default: "view"
},
modelValue: { type: Object, default: () => ({})},
transitions: { type: Array, default: () => [] },
},
components: {
ticketd, ticketd_b_start
},
emits: ["update:modelValue", "submit", "cancel"],
data(){
return {
ticketTitle: "宣传报道",
ticket_data: {},
rules: {
file_name: [
{ required: true, message: "请选择档案", trigger: "blur" },
],
},
}
},
computed: {
addForm: {
get() {
return this.modelValue;
},
set(val) {
this.$emit("update:modelValue", val);
},
},
},
methods: {
async submit_b_func() {
let that = this;
let res = null;
if (that.mode === "add") {
res = await that.$API.ofm.publicity.create.req(that.addForm);
that.addForm.id = res.id;
} else if (that.mode === "edit"){
res = await that.$API.ofm.publicity.update.req(
that.addForm.id,
that.addForm
);
}
},
},
};
</script>
<style scoped>
.treeMain {
height: 280px;
overflow: auto;
border: 1px solid #dcdfe6;
margin-bottom: 10px;
}
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);
background-color: #fefefe;
border-radius: 5px;
}
::-webkit-scrollbar-thumb {
border-radius: 5px;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
background-color: #f5f5f5;
}
.node rect {
stroke: #606266;
fill: #fff;
}
.edgePath path {
stroke: #606266;
fill: #333;
stroke-width: 1.5px;
}
g.conditions > rect {
fill: #00ffd0;
stroke: #000;
}
.el-icon-close {
cursor: pointer;
}
.left-panel-group {
display: flex;
align-items: center;
gap: 6px; /* 按钮之间的间隙,可以调小点 */
margin-left: 0; /* 靠左 */
}
.dept-opinion-wrap {
display: flex;
flex-direction: column;
line-height: 1.8;
}
.dept-opinion-wrap .el-checkbox {
margin-right: 6px;
}
</style>

View File

@ -198,11 +198,6 @@ export default {
this.addForm = this.getDefaultForm();
this.limitedVisible = true;
},
handleCancel() {
this.limitedVisible = false; //
this.lending_type = ""; // lending_type
this.getDefaultForm()//
},
getDefaultForm(){
return {
start_time: null,

View File

@ -143,7 +143,6 @@ export default {
let res = await that.$API.ofm.vehicle.create.req(that.addForm);
that.addForm.id = res.id;
} else if (that.mode == "edit") {
console.log(that.transitions)
await that.$API.ofm.vehicle.update.req(that.addForm.id, that.addForm);
}
},