feat: 品牌工作室迁移完成

This commit is contained in:
2026-08-19 18:04:39 +08:00
parent d38d48a147
commit 19bbd61436
15 changed files with 1512 additions and 283 deletions
@@ -3,20 +3,26 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<el-form :inline="true" :model="pageForm">
<el-form-item label="创立年度">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item label="工作室名称">
<el-input v-model="pageForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="创建年份">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="pageData">查询</el-button>
<el-button @click="openApply()">新建</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" border>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-button size="small" type="primary" @click="openApply()">申请品牌工作室</el-button>
</table-tool>
<el-table :data="tableData" border style="width: 100%">
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="name" label="工作室名称" min-width="160"></el-table-column>
<el-table-column prop="createYear" label="创立年度" width="100"></el-table-column>
@@ -25,28 +31,100 @@ layout("/layouts/platform.html"){
<el-table-column prop="type" label="工作室类型" width="120"></el-table-column>
<el-table-column prop="track" label="工作室赛道" width="120"></el-table-column>
<el-table-column prop="memberNum" label="成员人数" width="90"></el-table-column>
<el-table-column label="状态" width="100">
<el-table-column label="流程状态" width="100">
<template slot-scope="{row}">
<el-tag v-if="row.status===0" type="info">草稿</el-tag>
<el-tag v-else-if="row.status===1" type="warning">审核中</el-tag>
<el-tag v-else-if="row.status===2" type="danger">驳回</el-tag>
<el-tag v-else-if="row.status===5" type="success">通过</el-tag>
<el-tag v-else>{{row.status}}</el-tag>
<el-tag v-if="!row.instanceId" type="info">草稿</el-tag>
<enum-tag
v-else
:value="row.instanceState"
name="ProcessInstanceStateEnum"
label_key="message"
size="small">
</enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="180">
<el-table-column label="操作" width="260" fixed="right">
<template slot-scope="{row}">
<el-button type="text" @click="openApply(row.id)">编辑</el-button>
<el-button type="text" @click="submitApply(row)" v-if="row.status===0 || row.status===7">申请</el-button>
<el-button size="mini" type="primary" @click="openView(row)" v-if="row.instanceId">查看</el-button>
<el-button size="mini" type="primary" @click="openApply(row.id)" v-if="row.taskKey === 'startTask' || !row.instanceId">编辑</el-button>
<el-button size="mini" type="danger" @click="recallApply(row)" v-if="row.canRevoke === true || row.canRevoke === 1">撤回</el-button>
<el-button size="mini" type="danger" @click="deleteApply(row.id)" v-if="row.taskKey === 'startTask' || !row.instanceId">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<template #view>
<div>
<el-tabs tab-position="top" v-model="activeName">
<el-tab-pane name="1" label="基础信息">
<div class="process-title">
品牌工作室申请
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<el-descriptions :column="2" border>
<el-descriptions-item label="工作室名称">{{detail.name}}</el-descriptions-item>
<el-descriptions-item label="创立年度">{{detail.createYear}}</el-descriptions-item>
<el-descriptions-item label="所属工会">{{detail.unionName}}</el-descriptions-item>
<el-descriptions-item label="所在单位">{{detail.deptName}}</el-descriptions-item>
<el-descriptions-item label="领衔人">{{detail.leadPeople}}</el-descriptions-item>
<el-descriptions-item label="领衔人年龄">{{detail.leadAge}}</el-descriptions-item>
<el-descriptions-item label="领衔人身份">{{detail.leadIdentity}}</el-descriptions-item>
<el-descriptions-item label="领衔人荣誉">{{detail.leadHonor}}</el-descriptions-item>
<el-descriptions-item label="工作室类型">{{detail.type}}</el-descriptions-item>
<el-descriptions-item label="所属赛道">{{detail.track}}</el-descriptions-item>
<el-descriptions-item label="工作室地址" :span="2">{{detail.address}}</el-descriptions-item>
<el-descriptions-item label="工作室介绍" :span="2">{{detail.introduction}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{detail.remark}}</el-descriptions-item>
</el-descriptions>
<snaker-chart ref="snakerChartRef"></snaker-chart>
</el-tab-pane>
<el-tab-pane name="2" label="成员信息">
<div class="process-title">成员信息</div>
<el-table :data="detail.brandStudioMembers || []" border size="small">
<el-table-column label="姓名" prop="name" width="120"></el-table-column>
<el-table-column label="出生年月" prop="birthdate" width="120"></el-table-column>
<el-table-column label="学位" prop="grade" show-overflow-tooltip></el-table-column>
<el-table-column label="职称" prop="professional" show-overflow-tooltip></el-table-column>
<el-table-column label="所在单位" prop="deptName" show-overflow-tooltip></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="3" label="审核记录">
<template v-if="doneTasks.length > 0" v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})</el-descriptions-item>
<el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
</el-descriptions>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion || task.taskFormData.remark || task.taskFormData.approvalComment }}</el-descriptions-item>
</el-descriptions>
</div>
</template>
<template v-else>
<el-empty description="暂无审核记录"></el-empty>
</template>
</el-tab-pane>
</el-tabs>
</div>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
new Vue({
el: "#app",
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
pageForm: {
@@ -54,7 +132,11 @@ layout("/layouts/platform.html"){
limit: 20,
createYear: String(new Date().getFullYear())
},
tableData: []
tableData: [],
detail: {},
currentRow: {},
activeName: "1",
doneTasks: []
}
},
methods: {
@@ -67,16 +149,78 @@ layout("/layouts/platform.html"){
this.tableData = data.list || data.data || []
})
},
openApply(id) {
window.location.href = '/platform/zhgh/brand/apply/index' + (id ? '?id=' + id : '')
openApply(id, mode) {
let url = '/platform/zhgh/brand/apply/index'
const params = []
if (id) {
params.push('id=' + id)
}
if (mode) {
params.push('mode=' + mode)
}
if (params.length) {
url += '?' + params.join('&')
}
window.location.href = url
},
submitApply(row) {
this.$axios.post('/platform/zhgh/brand/application/submitApply', {
applicationId: row.id,
status: 1
openView(row) {
this.$refs.guava.view(() => {
this.currentRow = row
this.activeName = "1"
this.loadDetail(row.id)
this.getDoneTasks(row)
})
},
loadDetail(id) {
this.$axios.get('/platform/zhgh/brand/application/' + id).then((res) => {
this.detail = this.getData(res) || {}
this.detail.brandStudioMembers = this.detail.brandStudioMembers || []
})
},
getDoneTasks(row) {
this.$axios.post('/flow/common/doneTasks', {
instanceId: row.instanceId,
bizId: row.id
}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data || []
}
})
},
openChart() {
if (!this.currentRow.instanceId || !this.currentRow.instanceProcessDefineId) {
this.$message.warning('暂无流程图信息')
return
}
this.$refs.snakerChartRef.onOpenFull(this.currentRow.instanceProcessDefineId, this.currentRow.instanceId)
},
recallApply(row) {
this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$message.success('申请成功')
this.pageData()
this.$axios.post('/platform/zhgh/brand/flow/recall', {
applicationId: row.id,
processInstanceTaskId: row.startTaskId
}).then(() => {
this.$message.success('撤回成功')
this.pageData()
})
})
},
deleteApply(id) {
this.$confirm('您确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$axios.post('/platform/zhgh/brand/application/delete', {
data: [id]
}).then(() => {
this.$message.success('删除成功')
this.pageData()
})
})
}
},
@@ -4,10 +4,8 @@ layout("/layouts/platform.html"){
<div id="app" v-cloak>
<el-card shadow="never">
<div slot="header">
<span>{{form.id ? '修改申请' : '创建申请'}}</span>
</div>
<el-form ref="form" :model="form" label-width="130px">
<snaker-start slot="header" label="品牌工作室申请" define_key="BRAND_STUDIO"></snaker-start>
<el-form ref="form" :model="form" label-width="130px" :disabled="isView">
<el-row :gutter="15">
<el-col :span="12">
<el-form-item label="工作室名称">
@@ -16,22 +14,36 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :span="12">
<el-form-item label="创建年份">
<el-date-picker v-model="form.createYear" type="year" value-format="yyyy" style="width: 100%"></el-date-picker>
<el-input v-model="form.createYear" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属工会">
<el-input v-model="form.unionName"></el-input>
<el-select v-model="form.unionId" filterable placeholder="请选择所属工会" style="width: 100%" @change="unionChange">
<el-option
v-for="item in unionOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属机构">
<el-input v-model="form.deptName"></el-input>
<el-form-item label="所在单位">
<el-input v-model="form.deptName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="领衔人">
<el-input v-model="form.leadPeople"></el-input>
<el-select v-model="leadPeopleEmplid" filterable placeholder="请选择领衔人" style="width: 100%" @change="leaderChange">
<el-option
v-for="item in leaderHonors"
:key="item.emplid"
:label="item.label"
:value="item.emplid">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -41,7 +53,14 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :span="12">
<el-form-item label="领衔人身份">
<el-input v-model="form.leadIdentity"></el-input>
<el-select v-model="form.leadIdentity" multiple filterable placeholder="请选择领衔人身份" style="width: 100%">
<el-option
v-for="item in leadPeopleDict"
:key="item.id"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -51,22 +70,26 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :span="12">
<el-form-item label="工作室类型">
<el-input v-model="form.type"></el-input>
<el-select v-model="form.type" filterable placeholder="请选择工作室类型" style="width: 100%">
<el-option
v-for="item in brandOfficeTypeDict"
:key="item.id"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属赛道">
<el-input v-model="form.track"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属领域">
<el-input v-model="form.domain"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成员人数">
<el-input-number v-model="form.memberNum" :min="1" style="width: 100%"></el-input-number>
<el-select v-model="form.track" filterable placeholder="请选择所属赛道" style="width: 100%" @change="trackChange">
<el-option
v-for="item in brandOfficeTrackDict"
:key="item.id"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
@@ -86,26 +109,42 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<el-divider content-position="left">工作室成员</el-divider>
<el-table :data="form.brandStudioMembers" border size="small">
<el-divider content-position="left">选择工作室成员</el-divider>
<div class="brand-member-toolbar" v-if="!isView">
<div class="brand-member-count">已选择 {{form.brandStudioMembers.length}} 人</div>
<el-button size="small" type="primary" icon="el-icon-plus" @click="openMemberDialog">选择工作室成员</el-button>
</div>
<div class="brand-member-toolbar" v-else>
<div class="brand-member-count">已选择 {{form.brandStudioMembers.length}} 人</div>
</div>
<div class="brand-member-table">
<el-table :data="form.brandStudioMembers" border size="small">
<el-table-column label="姓名" min-width="120">
<template slot-scope="{row}">
<el-input v-model="row.name"></el-input>
</template>
</el-table-column>
<el-table-column label="角色" min-width="120">
<template slot-scope="{row}">
<el-input v-model="row.role"></el-input>
<el-input v-model="row.name" disabled></el-input>
</template>
</el-table-column>
<el-table-column label="出生年月" min-width="120">
<template slot-scope="{row}">
<el-input v-model="row.birthdate"></el-input>
<el-date-picker
v-model="row.birthdate"
type="month"
value-format="yyyy-MM"
placeholder="请选择出生年月"
style="width: 100%">
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="学历" min-width="120">
<el-table-column label="学位" min-width="120">
<template slot-scope="{row}">
<el-input v-model="row.grade"></el-input>
<el-select v-model="row.grade" filterable placeholder="请选择学位" style="width: 100%">
<el-option
v-for="item in memberDegreeDict"
:key="item.id"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="职称" min-width="120">
@@ -113,23 +152,43 @@ layout("/layouts/platform.html"){
<el-input v-model="row.professional"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button type="text" @click="removeMember(scope.$index)">删除</el-button>
<el-table-column label="所在单位" min-width="160">
<template slot-scope="{row}">
<el-input v-model="row.deptName" disabled></el-input>
</template>
</el-table-column>
</el-table>
<div style="margin-top: 10px">
<el-button size="small" @click="addMember">添加成员</el-button>
<el-table-column label="操作" width="90" v-if="!isView">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="removeMember(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<el-form-item style="margin-top: 20px">
<el-button @click="goBack">返回</el-button>
<el-form-item class="brand-form-actions" v-if="!isView">
<el-button type="primary" :loading="loading" @click="save(0)">保存草稿</el-button>
<el-button type="primary" :loading="loading" @click="save(6)">提交申请</el-button>
</el-form-item>
</el-form>
</el-card>
<el-dialog title="选择工作室成员" :visible.sync="memberDialogVisible" width="760px" class="brand-member-dialog">
<div class="brand-member-search">
<el-input v-model="memberKeyword" placeholder="请输入姓名或工号" clearable @keyup.enter.native="loadMemberCandidates"></el-input>
<el-button type="primary" icon="el-icon-search" @click="loadMemberCandidates">查询</el-button>
</div>
<el-table :data="memberCandidates" border size="small" height="360" @selection-change="memberSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="loginname" label="工号" width="120"></el-table-column>
<el-table-column prop="username" label="姓名" width="120"></el-table-column>
<el-table-column prop="unitName" label="所属机构" show-overflow-tooltip></el-table-column>
</el-table>
<div slot="footer">
<el-button @click="memberDialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirmSelectMembers">确定</el-button>
</div>
</el-dialog>
</div>
<script nonce="${cspNonce!}">
@@ -139,11 +198,25 @@ layout("/layouts/platform.html"){
data() {
return {
loading: false,
isView: false,
form: {
archive: 0,
status: 0,
createYear: String(new Date().getFullYear()),
leadIdentity: [],
brandStudioMembers: []
}
},
unionOptions: [],
leaderHonors: [],
leadPeopleDict: [],
brandOfficeTypeDict: [],
brandOfficeTrackDict: [],
memberDegreeDict: [],
leadPeopleEmplid: '',
memberDialogVisible: false,
memberKeyword: '',
memberCandidates: [],
selectedMemberCandidates: []
}
},
methods: {
@@ -161,26 +234,139 @@ layout("/layouts/platform.html"){
this.form.unionName = union.name
this.form.deptid = user.unitId || unit.id
this.form.deptName = unit.name
this.form.createYear = String(new Date().getFullYear())
},
async loadUnionOptions() {
const user = this.$store.state.user || {}
const union = user.union || {}
const roles = user.roles || []
const isAdmin = roles.some(item => item.code === 'SYSADMIN' || item.code === 'SCHOOL_UNION_ADMIN')
this.unionOptions = await this.$businessTool.listUnion(isAdmin ? null : union.id)
if (!this.form.unionId && this.unionOptions.length > 0) {
this.form.unionId = this.unionOptions[0].id
this.form.unionName = this.unionOptions[0].name
}
},
unionChange(unionId) {
const union = this.unionOptions.find(item => item.id === unionId)
this.form.unionName = union ? union.name : ''
},
loadDictOptions(code) {
return this.$axios.get('/open/common/dictOptions', {params: {code: code}}).then((res) => {
return this.getData(res) || []
})
},
loadDicts() {
Promise.all([
this.loadDictOptions('brand_office_lead_people'),
this.loadDictOptions('brand_office_type'),
this.loadDictOptions('brand_office_track'),
this.loadDictOptions('USER_ACADEMIC_DEGREE')
]).then(([leadPeopleDict, brandOfficeTypeDict, brandOfficeTrackDict, memberDegreeDict]) => {
this.leadPeopleDict = leadPeopleDict
this.brandOfficeTypeDict = brandOfficeTypeDict
this.brandOfficeTrackDict = brandOfficeTrackDict
this.memberDegreeDict = memberDegreeDict
})
},
loadLeaderHonors() {
this.$axios.get('/platform/zhgh/brand/application/leader').then((res) => {
const data = this.getData(res) || []
this.leaderHonors = data.map(item => {
item.label = item.userName + '(' + item.emplid + ')'
return item
})
if (this.form.leadPeople) {
const leader = this.leaderHonors.find(item => item.userName === this.form.leadPeople)
this.leadPeopleEmplid = leader ? leader.emplid : ''
}
})
},
leaderChange(emplid) {
const leader = this.leaderHonors.find(item => item.emplid === emplid)
if (leader) {
this.form.leadPeople = leader.userName
this.form.leadAge = leader.age
this.form.leadHonor = (leader.honorNames || []).join(',')
} else {
this.form.leadPeople = ''
this.form.leadAge = ''
this.form.leadHonor = ''
}
},
trackChange(track) {
this.form.domain = track
},
openMemberDialog() {
this.memberDialogVisible = true
this.loadMemberCandidates()
},
loadMemberCandidates() {
this.$axios.get('/platform/zhgh/brand/application/members', {
params: {
unionId: this.form.unionId,
keyword: this.memberKeyword
}
}).then((res) => {
this.memberCandidates = this.getData(res) || []
})
},
memberSelectionChange(selection) {
this.selectedMemberCandidates = selection
},
confirmSelectMembers() {
if (!this.selectedMemberCandidates.length) {
this.$message.warning('请至少选择一位工作室成员')
return
}
const existingIds = new Set((this.form.brandStudioMembers || []).map(item => item.userId || item.id))
const members = this.selectedMemberCandidates
.filter(item => !existingIds.has(item.id))
.map(item => ({
userId: item.id,
emplid: item.emplid || item.loginname,
name: item.name || item.username,
role: '',
birthdate: item.birthdate,
grade: item.grade,
professional: item.professional,
deptName: item.deptName || item.unitName
}))
this.form.brandStudioMembers = [...(this.form.brandStudioMembers || []), ...members]
this.form.memberNum = this.form.brandStudioMembers.length
this.memberDialogVisible = false
},
loadDetail(id) {
this.$axios.get('/platform/zhgh/brand/application/' + id).then((res) => {
const data = this.getData(res) || {}
data.brandStudioMembers = data.brandStudioMembers || []
data.memberNum = data.brandStudioMembers.length
data.leadIdentity = data.leadIdentity ? data.leadIdentity.split(',') : []
this.form = data
this.loadUnionOptions()
this.loadLeaderHonors()
})
},
addMember() {
this.form.brandStudioMembers.push({})
this.form.memberNum = this.form.brandStudioMembers.length
},
removeMember(index) {
this.form.brandStudioMembers.splice(index, 1)
this.form.memberNum = this.form.brandStudioMembers.length
},
save(status) {
this.loading = true
this.form.status = status
const params = Object.assign({}, this.form)
params.leadIdentity = (params.leadIdentity || []).join(',')
params.domain = params.track
params.memberNum = (params.brandStudioMembers || []).length
params.brandStudioMembersJson = JSON.stringify(params.brandStudioMembers || [])
delete params.brandStudioMembers
const request = this.form.id
? this.$axios.post('/platform/zhgh/brand/application/update', this.form)
: this.$axios.post('/platform/zhgh/brand/application', this.form)
? this.$axios.post('/platform/zhgh/brand/application/update', params)
: this.$axios.post('/platform/zhgh/brand/application', params)
request.then(() => {
this.$message.success('保存成功')
this.goBack()
@@ -193,17 +379,53 @@ layout("/layouts/platform.html"){
}
},
created() {
this.loadDicts()
this.loadLeaderHonors()
const id = this.getParam('id')
this.isView = this.getParam('mode') === 'view'
if (id) {
this.loadDetail(id)
} else {
this.loadUserInfo()
this.addMember()
this.loadUnionOptions()
}
}
})
</script>
<style>
.brand-member-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 0 12px;
padding: 0 2px 0 16px;
}
.brand-member-count {
color: #606266;
font-size: 13px;
}
.brand-member-table {
padding-left: 16px;
}
.brand-form-actions {
margin-top: 20px;
text-align: right;
}
.brand-member-search {
display: flex;
gap: 10px;
margin-bottom: 12px;
}
.brand-member-search .el-input {
flex: 1;
}
.brand-member-dialog .el-dialog__body {
padding-top: 12px;
padding-bottom: 12px;
}
</style>
<!--#
}
#-->
@@ -3,34 +3,153 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<el-form :inline="true" :model="pageForm">
<el-form-item label="工作室名称">
<el-input v-model="pageForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="创建年份">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="pageData">查询</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" border>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="name" label="工作室名称" min-width="160"></el-table-column>
<el-table-column prop="createYear" label="创立年度" width="100"></el-table-column>
<el-table-column prop="leadPeople" label="领衔人" width="120"></el-table-column>
<el-table-column prop="deptName" label="所属机构" min-width="140"></el-table-column>
<el-table-column prop="type" label="工作室类型" width="120"></el-table-column>
<el-table-column prop="track" label="工作室赛道" width="120"></el-table-column>
<el-table-column prop="memberNum" label="成员人数" width="90"></el-table-column>
<el-table-column label="操作" width="120">
<template slot-scope="{row}">
<el-button type="text" @click="openApply(row.id)">编辑工作室</el-button>
</template>
</el-table-column>
<guava ref="guava">
<el-card shadow="never">
<el-form :inline="true" :model="pageForm">
<el-form-item label="创立年度">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item label="工作室名称">
<el-input v-model="pageForm.name" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="pageData">查询</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="工作室列表"></table-tool>
<el-table :data="tableData" border style="width: 100%">
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="name" label="工作室名称" min-width="160"></el-table-column>
<el-table-column prop="createYear" label="创立年度" width="100"></el-table-column>
<el-table-column prop="leadPeople" label="领衔人" width="120"></el-table-column>
<el-table-column prop="deptName" label="所在单位" min-width="140"></el-table-column>
<el-table-column prop="type" label="工作室类型" width="120"></el-table-column>
<el-table-column prop="track" label="工作室赛道" width="120"></el-table-column>
<el-table-column prop="memberNum" label="成员人数" width="90"></el-table-column>
<el-table-column label="操作" width="150" fixed="right">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openDetail(row)">编辑品牌工作室</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<template #public>
<div>
<div class="process-title">编辑品牌工作室</div>
<el-tabs v-model="activeName">
<el-tab-pane name="base" label="基本信息">
<el-descriptions :column="2" border>
<el-descriptions-item label="工作室名称">{{form.name}}</el-descriptions-item>
<el-descriptions-item label="创立年度">{{form.createYear}}</el-descriptions-item>
<el-descriptions-item label="所属工会">{{form.unionName}}</el-descriptions-item>
<el-descriptions-item label="所在单位">{{form.deptName}}</el-descriptions-item>
<el-descriptions-item label="领衔人">{{form.leadPeople}}</el-descriptions-item>
<el-descriptions-item label="领衔人年龄">{{form.leadAge}}</el-descriptions-item>
<el-descriptions-item label="领衔人身份">{{Array.isArray(form.leadIdentity) ? form.leadIdentity.join(',') : form.leadIdentity}}</el-descriptions-item>
<el-descriptions-item label="领衔人荣誉">{{form.leadHonor}}</el-descriptions-item>
<el-descriptions-item label="工作室类型">{{form.type}}</el-descriptions-item>
<el-descriptions-item label="工作室赛道">{{form.track}}</el-descriptions-item>
<el-descriptions-item label="工作室地址" :span="2">{{form.address}}</el-descriptions-item>
<el-descriptions-item label="工作室介绍" :span="2">{{form.introduction}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{form.remark}}</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane name="members" label="成员信息">
<div class="brand-member-toolbar">
<span>成员人数:{{(form.brandStudioMembers || []).length}}</span>
<div>
<el-button type="primary" size="small" @click="openMemberDialog">选择成员</el-button>
<el-button type="primary" size="small" :loading="savingMembers" @click="saveMembers">保存人员</el-button>
</div>
</div>
<el-table :data="form.brandStudioMembers || []" border size="small">
<el-table-column label="姓名" prop="name" width="120"></el-table-column>
<el-table-column label="出生年月" prop="birthdate" width="180">
<template slot-scope="{row}">
<el-date-picker v-model="row.birthdate" type="month" value-format="yyyy-MM" style="width: 100%"></el-date-picker>
</template>
</el-table-column>
<el-table-column label="学位" prop="grade" min-width="180">
<template slot-scope="{row}">
<el-select v-model="row.grade" style="width: 100%">
<el-option v-for="item in memberDegreeDict" :key="item.value || item.code" :label="item.label || item.name" :value="item.value || item.code"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="职称" prop="professional" min-width="180">
<template slot-scope="{row}">
<el-input v-model="row.professional"></el-input>
</template>
</el-table-column>
<el-table-column label="所在单位" prop="deptName" min-width="180"></el-table-column>
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="removeMember(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="honors" label="荣誉信息">
<div class="brand-member-toolbar">
<span>荣誉数量:{{(form.brandStudioHonors || []).length}}</span>
<div>
<el-button type="primary" size="small" @click="addHonor">添加荣誉</el-button>
<el-button type="primary" size="small" :loading="savingHonors" @click="saveHonors">保存荣誉</el-button>
</div>
</div>
<el-table :data="form.brandStudioHonors || []" border size="small">
<el-table-column label="荣誉称号" prop="honorName" min-width="160">
<template slot-scope="{row}">
<el-input v-model="row.honorName"></el-input>
</template>
</el-table-column>
<el-table-column label="获取年度" prop="requireYear" min-width="180">
<template slot-scope="{row}">
<el-date-picker v-model="row.requireYear" type="year" value-format="yyyy" style="width: 100%"></el-date-picker>
</template>
</el-table-column>
<el-table-column label="荣誉类别" prop="honorCategory" min-width="180">
<template slot-scope="{row}">
<el-select v-model="row.honorCategory" style="width: 100%">
<el-option label="外部荣誉" :value="1"></el-option>
<el-option label="行内荣誉" :value="2"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="操作" min-width="160">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="removeHonor(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<el-row type="flex" justify="end" class="brand-detail-actions">
</el-row>
</div>
</template>
</guava>
<el-dialog title="选择工作室成员" :visible.sync="memberDialogVisible" width="760px" class="brand-member-dialog">
<div class="brand-member-search">
<el-input v-model="memberKeyword" placeholder="请输入姓名或工号" clearable @keyup.enter.native="loadMemberCandidates"></el-input>
<el-button type="primary" icon="el-icon-search" @click="loadMemberCandidates">查询</el-button>
</div>
<el-table :data="memberCandidates" border size="small" height="360" @selection-change="memberSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="loginname" label="工号" width="120"></el-table-column>
<el-table-column prop="username" label="姓名" width="120"></el-table-column>
<el-table-column prop="unitName" label="所在单位" show-overflow-tooltip></el-table-column>
</el-table>
</el-card>
<div slot="footer">
<el-button @click="memberDialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirmSelectMembers">确定</el-button>
</div>
</el-dialog>
</div>
<script nonce="${cspNonce!}">
@@ -44,7 +163,20 @@ layout("/layouts/platform.html"){
status: 5,
createYear: String(new Date().getFullYear())
},
tableData: []
tableData: [],
activeName: 'base',
savingMembers: false,
savingHonors: false,
form: {
brandStudioMembers: [],
brandStudioHonors: [],
leadIdentity: []
},
memberDegreeDict: [],
memberDialogVisible: false,
memberKeyword: '',
memberCandidates: [],
selectedMemberCandidates: []
}
},
methods: {
@@ -57,16 +189,157 @@ layout("/layouts/platform.html"){
this.tableData = data.list || data.data || []
})
},
openApply(id) {
window.location.href = '/platform/zhgh/brand/apply/index?id=' + id
loadDictOptions(code) {
return this.$axios.get('/open/common/dictOptions', {params: {code: code}}).then((res) => {
return this.getData(res) || []
})
},
loadDicts() {
Promise.all([
this.loadDictOptions('USER_ACADEMIC_DEGREE')
]).then(([memberDegreeDict]) => {
this.memberDegreeDict = memberDegreeDict
})
},
openDetail(row) {
this.$refs.guava.public(() => {
this.activeName = 'base'
this.$axios.get('/platform/zhgh/brand/application/' + row.id).then((res) => {
const data = this.getData(res) || {}
data.brandStudioMembers = data.brandStudioMembers || []
data.brandStudioHonors = data.brandStudioHonors || []
data.memberNum = data.brandStudioMembers.length
data.leadIdentity = data.leadIdentity ? data.leadIdentity.split(',') : []
this.form = data
})
})
},
openMemberDialog() {
this.memberDialogVisible = true
this.selectedMemberCandidates = []
this.loadMemberCandidates()
},
loadMemberCandidates() {
this.$axios.get('/platform/zhgh/brand/application/members', {
params: {
unionId: this.form.unionId,
keyword: this.memberKeyword
}
}).then((res) => {
this.memberCandidates = this.getData(res) || []
})
},
memberSelectionChange(selection) {
this.selectedMemberCandidates = selection
},
confirmSelectMembers() {
if (!this.selectedMemberCandidates.length) {
this.$message.warning('请至少选择一位工作室成员')
return
}
const existingIds = new Set((this.form.brandStudioMembers || []).map(item => item.userId || item.id))
const members = this.selectedMemberCandidates
.filter(item => !existingIds.has(item.id))
.map(item => ({
userId: item.id,
emplid: item.emplid || item.loginname,
name: item.name || item.username,
role: '',
birthdate: item.birthdate,
grade: item.grade,
professional: item.professional,
deptName: item.deptName || item.unitName
}))
this.form.brandStudioMembers = [...(this.form.brandStudioMembers || []), ...members]
this.form.memberNum = this.form.brandStudioMembers.length
this.memberDialogVisible = false
},
removeMember(index) {
this.form.brandStudioMembers.splice(index, 1)
this.form.memberNum = this.form.brandStudioMembers.length
},
addHonor() {
this.form.brandStudioHonors = this.form.brandStudioHonors || []
this.form.brandStudioHonors.push({
applicationId: this.form.id,
honorName: '',
requireYear: String(new Date().getFullYear()),
honorCategory: 1
})
},
removeHonor(index) {
this.form.brandStudioHonors.splice(index, 1)
},
buildSaveParams() {
const params = Object.assign({}, this.form)
params.status = 5
params.leadIdentity = (params.leadIdentity || []).join(',')
params.domain = params.track
params.memberNum = (params.brandStudioMembers || []).length
params.brandStudioMembersJson = JSON.stringify(params.brandStudioMembers || [])
delete params.brandStudioMembers
return params
},
saveMembers() {
this.savingMembers = true
const params = this.buildSaveParams()
this.$axios.post('/platform/zhgh/brand/application/honor', params).then(() => {
this.$message.success('保存人员成功')
this.pageData()
}).finally(() => {
this.savingMembers = false
})
},
saveHonors() {
this.savingHonors = true
const params = this.buildSaveParams()
params.brandStudioHonors = (this.form.brandStudioHonors || []).map(item => ({
applicationId: this.form.id,
honorName: item.honorName,
honorGrade: item.honorGrade,
requireYear: item.requireYear,
honorCategory: item.honorCategory
}))
params.brandStudioHonorsJson = JSON.stringify(params.brandStudioHonors)
this.$axios.post('/platform/zhgh/brand/application/honor', params).then(() => {
this.$message.success('保存荣誉成功')
this.pageData()
}).finally(() => {
this.savingHonors = false
})
}
},
created() {
this.loadDicts()
this.pageData()
}
})
</script>
<style>
.brand-detail-actions {
margin-top: 16px;
}
.brand-member-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.brand-member-search {
display: flex;
gap: 10px;
margin-bottom: 12px;
}
.brand-member-search .el-input {
flex: 1;
}
.brand-member-dialog .el-dialog__body {
padding-top: 12px;
padding-bottom: 12px;
}
</style>
<!--#
}
#-->
@@ -3,82 +3,264 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<el-form :inline="true" :model="pageForm">
<el-form-item label="工作室名称">
<el-input v-model="pageForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="创建年份">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item label="审核状态">
<el-select v-model="pageForm.processStatus" clearable>
<el-option label="待审核" :value="1"></el-option>
<el-option label="已审核" :value="5"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="pageData">查询</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" border>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="name" label="工作室名称" min-width="160"></el-table-column>
<el-table-column prop="createYear" label="创立年度" width="100"></el-table-column>
<el-table-column prop="leadPeople" label="领衔人" width="120"></el-table-column>
<el-table-column prop="deptName" label="所属机构" min-width="140"></el-table-column>
<el-table-column prop="processTaskNode" label="审核节点" width="140"></el-table-column>
<el-table-column prop="processTaskReason" label="任务状态" width="100"></el-table-column>
<el-table-column label="操作" width="180">
<template slot-scope="{row}">
<el-button type="text" @click="audit(row, 'PASS')" v-if="row.processTaskReason==='ACTIVE'">通过</el-button>
<el-button type="text" @click="audit(row, 'REJECT')" v-if="row.processTaskReason==='ACTIVE'">驳回</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="创立年度:">
<el-date-picker
placeholder="选择创立年度"
type="year"
style="width: 100%"
v-model="pageForm.createYear"
value-format="yyyy"
></el-date-picker>
</search-item>
<search-item label="工作室名称:">
<el-input
@keyup.enter.native="doSearch"
clearable
placeholder="请输入工作室名称"
style="width: 100%"
v-model="pageForm.name"
></el-input>
</search-item>
</search>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-radio-group @change="doSearch" size="small" v-model="pageForm.audit">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" label="序号" type="index" width="80px"></el-table-column>
<el-table-column label="工作室名称" prop="name" sortable show-overflow-tooltip min-width="180"></el-table-column>
<el-table-column label="创立年度" prop="createYear" sortable show-overflow-tooltip width="120"></el-table-column>
<el-table-column label="领衔人" prop="leadPeople" sortable show-overflow-tooltip width="120"></el-table-column>
<el-table-column label="所在单位" prop="deptName" sortable show-overflow-tooltip min-width="180"></el-table-column>
<el-table-column label="工作室类型" prop="type" sortable show-overflow-tooltip min-width="140"></el-table-column>
<el-table-column label="工作室赛道" prop="track" sortable show-overflow-tooltip min-width="140"></el-table-column>
<el-table-column label="成员人数" prop="memberNum" sortable show-overflow-tooltip width="110"></el-table-column>
<el-table-column label="工作室地址" prop="address" show-overflow-tooltip min-width="220"></el-table-column>
<el-table-column label="当前节点" prop="curTaskName" show-overflow-tooltip min-width="180"></el-table-column>
<el-table-column label="审核时间" prop="finishTime" show-overflow-tooltip min-width="180">
<template v-slot="{ row }">
<span>{{ row.finishTime ? $moment(row.finishTime).format('YYYY-MM-DD HH:mm:ss') : '-' }}</span>
</template>
</el-table-column>
<el-table-column label="流程状态" prop="instanceState" show-overflow-tooltip min-width="180">
<template v-slot="{ row }">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message" size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="180">
<template v-slot="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="onAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #public>
<div>
<el-tabs tab-position="top" v-model="activeName">
<el-tab-pane name="1" label="基础信息">
<div class="process-title">
品牌工作室申请
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<el-descriptions :column="2" border>
<el-descriptions-item label="工作室名称">{{detail.name}}</el-descriptions-item>
<el-descriptions-item label="创立年度">{{detail.createYear}}</el-descriptions-item>
<el-descriptions-item label="所属工会">{{detail.unionName}}</el-descriptions-item>
<el-descriptions-item label="所在单位">{{detail.deptName}}</el-descriptions-item>
<el-descriptions-item label="领衔人">{{detail.leadPeople}}</el-descriptions-item>
<el-descriptions-item label="领衔人年龄">{{detail.leadAge}}</el-descriptions-item>
<el-descriptions-item label="领衔人身份">{{detail.leadIdentity}}</el-descriptions-item>
<el-descriptions-item label="领衔人荣誉">{{detail.leadHonor}}</el-descriptions-item>
<el-descriptions-item label="工作室类型">{{detail.type}}</el-descriptions-item>
<el-descriptions-item label="所属赛道">{{detail.track}}</el-descriptions-item>
<el-descriptions-item label="工作室地址" :span="2">{{detail.address}}</el-descriptions-item>
<el-descriptions-item label="工作室介绍" :span="2">{{detail.introduction}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{detail.remark}}</el-descriptions-item>
</el-descriptions>
<snaker-chart ref="snakerChartRef"></snaker-chart>
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
<el-form-item label="审批意见" prop="remark"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.remark"></user-opinion-textarea>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane name="2" label="成员信息">
<div class="process-title">成员信息</div>
<el-table :data="detail.brandStudioMembers || []" border size="small">
<el-table-column label="姓名" prop="name" width="120"></el-table-column>
<el-table-column label="出生年月" prop="birthdate" width="120"></el-table-column>
<el-table-column label="学位" prop="grade" show-overflow-tooltip></el-table-column>
<el-table-column label="职称" prop="professional" show-overflow-tooltip></el-table-column>
<el-table-column label="所在单位" prop="deptName" show-overflow-tooltip></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="3" label="审核记录">
<template v-if="doneTasks.length > 0" v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})</el-descriptions-item>
<el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
</el-descriptions>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion || task.taskFormData.remark || task.taskFormData.approvalComment }}</el-descriptions-item>
</el-descriptions>
</div>
</template>
<template v-else>
<el-empty description="暂无审核记录"></el-empty>
</template>
</el-tab-pane>
</el-tabs>
</div>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
new Vue({
el: "#app",
mixins: [initTableMixins],
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
pageForm: {
page: 1,
limit: 20,
processStatus: 1,
audit: false,
createYear: String(new Date().getFullYear())
},
tableData: []
detail: {},
formData: {},
currentRow: {},
showApprovalForm: false,
activeName: "1",
doneTasks: []
}
},
methods: {
getData(res) {
return res.data && res.data.data !== undefined ? res.data.data : res.data
},
pageData() {
this.$axios.get('/platform/zhgh/brand/application/auditPage', {params: this.pageForm}).then((res) => {
const data = this.getData(res) || {}
this.tableData = data.list || data.data || []
onView(row) {
this.$refs.guava.public(() => {
this.currentRow = row
this.activeName = "1"
this.showApprovalForm = false
this.loadDetail(row.id)
this.getDoneTasks(row)
})
},
audit(row, type) {
this.$prompt('请输入审批意见', '审批', {
inputType: 'textarea',
inputValue: type === 'PASS' ? '同意' : ''
}).then(({value}) => {
this.$axios.post('/platform/zhgh/brand/flow/audit', {
onAudit(row) {
this.$refs.guava.public(() => {
this.currentRow = row
this.activeName = "1"
this.formData = {
applicationId: row.id,
processInstanceId: row.processInstanceId,
processInstanceTaskId: row.processInstanceTaskId || row.flowId,
bpmTaskApprovalType: type,
remark: value
}).then(() => {
this.$message.success('操作成功')
this.pageData()
processInstanceTaskId: row.processInstanceTaskId || row.taskId,
taskName: row.curTaskName,
remark: ''
}
this.showApprovalForm = true
this.loadDetail(row.id)
this.getDoneTasks(row)
})
},
loadDetail(id) {
this.$axios.get('/platform/zhgh/brand/application/' + id).then((res) => {
this.detail = this.getData(res) || {}
this.detail.brandStudioMembers = this.detail.brandStudioMembers || []
})
},
getDoneTasks(row) {
this.$axios.post('/flow/common/doneTasks', {
instanceId: row.processInstanceId || row.instanceId,
bizId: row.id
}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data || []
}
})
},
openChart() {
if (!this.currentRow.processInstanceId || !this.currentRow.instanceProcessDefineId) {
this.$message.warning('暂无流程图信息')
return
}
this.$refs.snakerChartRef.onOpenFull(this.currentRow.instanceProcessDefineId, this.currentRow.processInstanceId)
},
handleTaskAction(val) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/zhgh/brand/flow/audit', {
...this.formData,
submitType: val
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
async pageData() {
const resp = await this.$axios.post('/platform/zhgh/brand/application/auditPage', this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
} else {
this.$message.warning(resp.msg)
}
}
},
created() {
@@ -3,31 +3,87 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<el-form :inline="true" :model="pageForm">
<el-form-item label="工作室名称">
<el-input v-model="pageForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="创建年份">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="pageData">查询</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" border>
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="deptName" label="一级机构" min-width="120"></el-table-column>
<el-table-column prop="name" label="工作室名称" min-width="160"></el-table-column>
<el-table-column prop="leadPeople" label="领衔人" width="120"></el-table-column>
<el-table-column prop="honorName" label="外部荣誉称号" min-width="150"></el-table-column>
<el-table-column prop="createYear" label="创立年度" width="100"></el-table-column>
<el-table-column prop="track" label="所属领域" width="120"></el-table-column>
<el-table-column prop="leadHonor" label="领衔人荣誉称号" min-width="160"></el-table-column>
<el-table-column prop="memberNum" label="成员人数" width="90"></el-table-column>
<el-table-column prop="address" label="工作室地址" min-width="160"></el-table-column>
</el-table>
</el-card>
<guava ref="guava">
<el-card shadow="never">
<el-form :inline="true" :model="pageForm">
<el-form-item label="创立年度">
<el-date-picker v-model="pageForm.createYear" type="year" value-format="yyyy"></el-date-picker>
</el-form-item>
<el-form-item label="工作室名称">
<el-input v-model="pageForm.name" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="pageData">查询</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="工作室台账"></table-tool>
<el-table :data="tableData" border style="width: 100%">
<el-table-column type="index" label="序号" width="60"></el-table-column>
<el-table-column prop="name" label="工作室名称" min-width="160"></el-table-column>
<el-table-column prop="createYear" label="创立年度" width="100"></el-table-column>
<el-table-column prop="leadPeople" label="领衔人" width="120"></el-table-column>
<el-table-column prop="deptName" label="所在单位" min-width="140"></el-table-column>
<el-table-column prop="honorName" label="荣誉称号" min-width="150"></el-table-column>
<el-table-column prop="track" label="所属领域" width="120"></el-table-column>
<el-table-column prop="leadHonor" label="领衔人荣誉称号" min-width="160"></el-table-column>
<el-table-column prop="memberNum" label="成员人数" width="90"></el-table-column>
<el-table-column prop="address" label="工作室地址" min-width="180"></el-table-column>
<el-table-column label="操作" width="90" fixed="right">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<template #public>
<div>
<div class="process-title">查看品牌工作室</div>
<el-tabs v-model="activeName">
<el-tab-pane name="base" label="基本信息">
<el-descriptions :column="2" border>
<el-descriptions-item label="工作室名称">{{form.name}}</el-descriptions-item>
<el-descriptions-item label="创立年度">{{form.createYear}}</el-descriptions-item>
<el-descriptions-item label="所属工会">{{form.unionName}}</el-descriptions-item>
<el-descriptions-item label="所在单位">{{form.deptName}}</el-descriptions-item>
<el-descriptions-item label="领衔人">{{form.leadPeople}}</el-descriptions-item>
<el-descriptions-item label="领衔人年龄">{{form.leadAge}}</el-descriptions-item>
<el-descriptions-item label="领衔人身份">{{form.leadIdentity}}</el-descriptions-item>
<el-descriptions-item label="领衔人荣誉">{{form.leadHonor}}</el-descriptions-item>
<el-descriptions-item label="工作室类型">{{form.type}}</el-descriptions-item>
<el-descriptions-item label="所属领域">{{form.track}}</el-descriptions-item>
<el-descriptions-item label="工作室地址" :span="2">{{form.address}}</el-descriptions-item>
<el-descriptions-item label="工作室介绍" :span="2">{{form.introduction}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{form.remark}}</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane name="members" label="成员信息">
<el-table :data="form.brandStudioMembers || []" border size="small">
<el-table-column label="姓名" prop="name" width="120"></el-table-column>
<el-table-column label="出生年月" prop="birthdate" width="120"></el-table-column>
<el-table-column label="学位" prop="grade" show-overflow-tooltip></el-table-column>
<el-table-column label="职称" prop="professional" show-overflow-tooltip></el-table-column>
<el-table-column label="所在单位" prop="deptName" show-overflow-tooltip></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="honors" label="荣誉信息">
<el-table :data="form.brandStudioHonors || []" border size="small">
<el-table-column label="荣誉称号" prop="honorName" min-width="160"></el-table-column>
<el-table-column label="获取年度" prop="requireYear" min-width="120"></el-table-column>
<el-table-column label="荣誉类别" prop="honorCategory" min-width="120">
<template slot-scope="{row}">
<span>{{row.honorCategory === 1 ? '外部荣誉' : (row.honorCategory === 2 ? '行内荣誉' : row.honorCategory)}}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
@@ -38,9 +94,15 @@ layout("/layouts/platform.html"){
pageForm: {
page: 1,
limit: 20,
status: 5
status: 5,
createYear: String(new Date().getFullYear())
},
tableData: []
tableData: [],
activeName: 'base',
form: {
brandStudioMembers: [],
brandStudioHonors: []
}
}
},
methods: {
@@ -52,6 +114,17 @@ layout("/layouts/platform.html"){
const data = this.getData(res) || {}
this.tableData = data.list || data.data || []
})
},
openView(row) {
this.$refs.guava.public(() => {
this.activeName = 'base'
this.$axios.get('/platform/zhgh/brand/application/' + row.id).then((res) => {
const data = this.getData(res) || {}
data.brandStudioMembers = data.brandStudioMembers || []
data.brandStudioHonors = data.brandStudioHonors || []
this.form = data
})
})
}
},
created() {