[update] 企标立项、变更流程
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
import { getAction, postAction } from '@/api/manage'
|
import { getAction, postAction } from '@/api/manage'
|
||||||
|
import { UI_CACHE_DB_DICT_DATA } from '@/store/mutation-types'
|
||||||
|
import Vue from 'vue'
|
||||||
|
|
||||||
// 单点登录获取用户信息
|
// 单点登录获取用户信息
|
||||||
const getSSOUserInfo = (params) => postAction('/iam/loginByOauth2', params)
|
const getSSOUserInfo = (params) => postAction('/iam/loginByOauth2', params)
|
||||||
@@ -10,6 +12,12 @@ const queryPermissionsByUser = () => getAction('/sys/permission/getUserPermissio
|
|||||||
const getFormDictTreeList = (params) => getAction('/sys/dictItem/treeListOption', params)
|
const getFormDictTreeList = (params) => getAction('/sys/dictItem/treeListOption', params)
|
||||||
// 字典标签专用(通过code获取字典数组)
|
// 字典标签专用(通过code获取字典数组)
|
||||||
export const ajaxGetDictItems = (code, params) => getAction(`/sys/dict/getDictItems/${code}`, params)
|
export const ajaxGetDictItems = (code, params) => getAction(`/sys/dict/getDictItems/${code}`, params)
|
||||||
|
// 从缓存中获取字典配置
|
||||||
|
function getDictItemsFromCache (dictCode) {
|
||||||
|
if (Vue.ls.get(UI_CACHE_DB_DICT_DATA) && Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode] && Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode].length > 0) {
|
||||||
|
return Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 重复校验
|
// 重复校验
|
||||||
const duplicateCheck = (params) => getAction('/sys/duplicate/check', params)
|
const duplicateCheck = (params) => getAction('/sys/duplicate/check', params)
|
||||||
@@ -21,6 +29,9 @@ const getFileInfo = (params) => getAction('/sys/oss/file/queryById', params)
|
|||||||
// 获取人员信息列表
|
// 获取人员信息列表
|
||||||
const getPersonInfoList = (params) => getAction('/process/fb/processFbInfo/getNodeList', params)
|
const getPersonInfoList = (params) => getAction('/process/fb/processFbInfo/getNodeList', params)
|
||||||
|
|
||||||
|
// 获取标准左侧树列表(标准体系)
|
||||||
|
const getTreeList = (params) => getAction('/laws/standard/lawsTreeNode/enterprise', params)
|
||||||
|
|
||||||
// 标准入库/变更流程------------
|
// 标准入库/变更流程------------
|
||||||
// 国内法规标准-获取表单模型
|
// 国内法规标准-获取表单模型
|
||||||
const getDomesticStandardFormModal = (params) => getAction('/laws/standard/domestic/getFormModel', params)
|
const getDomesticStandardFormModal = (params) => getAction('/laws/standard/domestic/getFormModel', params)
|
||||||
@@ -30,12 +41,14 @@ const queryStandardECProcessData = (params) => getAction('/process/fb/processFbE
|
|||||||
export {
|
export {
|
||||||
queryPermissionsByUser,
|
queryPermissionsByUser,
|
||||||
getFormDictTreeList,
|
getFormDictTreeList,
|
||||||
|
getDictItemsFromCache,
|
||||||
duplicateCheck,
|
duplicateCheck,
|
||||||
checkRuleByCode,
|
checkRuleByCode,
|
||||||
getFileInfo,
|
getFileInfo,
|
||||||
getSSOUserInfo,
|
getSSOUserInfo,
|
||||||
|
|
||||||
getPersonInfoList,
|
getPersonInfoList,
|
||||||
|
getTreeList,
|
||||||
|
|
||||||
getDomesticStandardFormModal,
|
getDomesticStandardFormModal,
|
||||||
queryStandardECProcessData
|
queryStandardECProcessData
|
||||||
|
|||||||
@@ -68,7 +68,9 @@
|
|||||||
|
|
||||||
/deep/ .vertical-form-item {
|
/deep/ .vertical-form-item {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
.van-field__label {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
.van-field__value {
|
.van-field__value {
|
||||||
margin-top: 0.24rem;
|
margin-top: 0.24rem;
|
||||||
border: 0.02rem solid #C9CDD4;
|
border: 0.02rem solid #C9CDD4;
|
||||||
|
|||||||
@@ -26,8 +26,53 @@ module.exports = {
|
|||||||
remark: '备注',
|
remark: '备注',
|
||||||
clickSelect: '点击选择',
|
clickSelect: '点击选择',
|
||||||
selectUser: '选择人员',
|
selectUser: '选择人员',
|
||||||
|
finishDate: '完成日期',
|
||||||
|
rangeOfApplication: '适用范围',
|
||||||
standardEntryOrChange: {
|
standardEntryOrChange: {
|
||||||
source: '来源',
|
source: '来源',
|
||||||
operationType: '操作类型'
|
operationType: '操作类型'
|
||||||
|
},
|
||||||
|
esInitChange: {
|
||||||
|
applicationType: '申请类型',
|
||||||
|
standardProjectEstablishment: '标准立项',
|
||||||
|
change: '变更',
|
||||||
|
itemCategory: '项目类别',
|
||||||
|
formulate: '制定',
|
||||||
|
revise: '修订',
|
||||||
|
completionTimeChange: '完成时间变更',
|
||||||
|
terminationOfWork: '工作终止',
|
||||||
|
dutyDepartChange: '责任部门变更',
|
||||||
|
merge: '合并',
|
||||||
|
enterpriseStandardNum: '企标编号',
|
||||||
|
enterpriseStandardName: '企标名称',
|
||||||
|
enterpriseStandardCode: '企业标准代号',
|
||||||
|
enterpriseNameCode: '企业名称代号',
|
||||||
|
standardCategoryCode: '标准类别代号',
|
||||||
|
yearNumber: '年代号',
|
||||||
|
newEnterpriseStandardNum: '新企标编号',
|
||||||
|
newEnterpriseStandardName: '新企标名称',
|
||||||
|
standardEnglishName: '标准英文名称',
|
||||||
|
standardSystem: '标准体系',
|
||||||
|
standardType: '标准类型',
|
||||||
|
standardGradeClassification: '标准等级分类',
|
||||||
|
compilationIllustration: '编制说明',
|
||||||
|
draftPlanFinishDate: '草稿计划完成日期',
|
||||||
|
exposureDraftPlanFinishDate: '征求意见稿计划完成日期',
|
||||||
|
planSubmissionDate: '计划报批日期',
|
||||||
|
partName: '零部件名称',
|
||||||
|
authorizationDepart: '授权部门',
|
||||||
|
principalDrafter: '主起草人',
|
||||||
|
mainDraftUnit: '主起草单位',
|
||||||
|
headOfMainDraftingUnit: '起草单位负责人',
|
||||||
|
standardPusher: '标准推进人',
|
||||||
|
suitUnit: '配合单位',
|
||||||
|
projectStatement: '立项说明',
|
||||||
|
projectApprovalChangeReason: '立项/变更原因',
|
||||||
|
projectBackground: '立项背景、立项依据',
|
||||||
|
homogeneousStandardAnalysis: '国际、国家及行业同类标准分析',
|
||||||
|
standardContrastiveAnalysis: '企业同类标准对比分析',
|
||||||
|
leadershipAndNecessity: '立项标准的领先性与必要性',
|
||||||
|
initiatedProject: '立项目的及预期效果等',
|
||||||
|
uploadAttachment: '上传附件'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,262 @@
|
|||||||
|
<template>
|
||||||
|
<ul class="list-menu" v-if="data.length">
|
||||||
|
<li v-for="(item, i) in data" :key="i" @click.stop="selectItem(item)" v-show="expandFlag">
|
||||||
|
<div class="item">
|
||||||
|
<div class="item-left">
|
||||||
|
<!-- 展开的图标 -->
|
||||||
|
<i class='expandIcon'
|
||||||
|
@click.stop="expandItem(item, i)"
|
||||||
|
:class="[expandArr.includes(i) ? 'reduce' : 'add',item.children && item.children.length ? '' : 'disabled']">
|
||||||
|
</i>
|
||||||
|
<!-- 选项名 -->
|
||||||
|
<span class=" value-span">{{ item[labelKey] }}</span>
|
||||||
|
</div>
|
||||||
|
<!-- 选择的图标 -->
|
||||||
|
<template v-if="!multiple">
|
||||||
|
<i class='selectIcon'
|
||||||
|
:class="[value[valueKey] == item[valueKey] ? 'checked' : 'noChecked']">
|
||||||
|
</i>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<i class='selectIcon multiple-select-icon'
|
||||||
|
:class="[checkedArr.includes(item[valueKey]) ? 'checked' : 'noChecked']">
|
||||||
|
</i>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<list-menu
|
||||||
|
v-if='item.children'
|
||||||
|
@input='input'
|
||||||
|
:data='item.children'
|
||||||
|
:valueKey='valueKey'
|
||||||
|
:labelKey='labelKey'
|
||||||
|
:value="value"
|
||||||
|
:toastText='toastText'
|
||||||
|
:expandFlag='expandArr.includes(i)'
|
||||||
|
:multiple="multiple"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
// 组件名必写
|
||||||
|
name: 'ListMenu',
|
||||||
|
props: {
|
||||||
|
// 选中的值的属性名,必传
|
||||||
|
valueKey: String,
|
||||||
|
// 在页面要展示的选项属性名,必传
|
||||||
|
labelKey: String,
|
||||||
|
// 选中的值,必传
|
||||||
|
value: [Object, String, Array],
|
||||||
|
// 控制展开,不需要传
|
||||||
|
expandFlag: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 总数据,必传
|
||||||
|
data: Array,
|
||||||
|
// 不可选提示文字,非必传
|
||||||
|
toastText: String,
|
||||||
|
// 是否多选
|
||||||
|
multiple: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
immediate: true,
|
||||||
|
deep: true,
|
||||||
|
handler (val) {
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
// 当前级组件已展开的项
|
||||||
|
expandArr: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 已经选中的数据 由key组成
|
||||||
|
checkedArr () {
|
||||||
|
return this.value.map(tt => tt[this.valueKey])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 子组件逐级传递选中项
|
||||||
|
input (item) {
|
||||||
|
this.$emit('input', item)
|
||||||
|
},
|
||||||
|
// 选择
|
||||||
|
selectItem (item) {
|
||||||
|
if (!this.multiple) {
|
||||||
|
this.$emit('input', item)
|
||||||
|
} else {
|
||||||
|
// 多选的时候 想要value值是所有选中的obj组成的数组
|
||||||
|
// 先判断保存的值中有没有改数据,存在的话删除,不存在的话增加
|
||||||
|
const eleIndex = this.value.findIndex(a => item[this.valueKey] === a[this.valueKey])
|
||||||
|
if (eleIndex > -1) {
|
||||||
|
const arr = [...this.value]
|
||||||
|
arr.splice(eleIndex, 1)
|
||||||
|
this.$emit('input', arr)
|
||||||
|
} else {
|
||||||
|
this.$emit('input', [...this.value, item])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 展开
|
||||||
|
expandItem (item, i) {
|
||||||
|
if (item.children && item.children.length) {
|
||||||
|
const index = this.expandArr.indexOf(i)
|
||||||
|
if (index > -1) {
|
||||||
|
this.expandArr.splice(index, 1)
|
||||||
|
} else {
|
||||||
|
this.expandArr.push(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
@import '~@assets/less/common.less';
|
||||||
|
.popup-box > ul {
|
||||||
|
padding-right: @pad-base;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
width: 100%;
|
||||||
|
color: #2a2a2a;
|
||||||
|
font-size: 0.22rem;
|
||||||
|
overflow: hidden;
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: .8px solid #e1e1e1;
|
||||||
|
//height: calc(100% - 0.9rem);
|
||||||
|
//overflow: auto;
|
||||||
|
li {
|
||||||
|
padding-right: 0;
|
||||||
|
.item {
|
||||||
|
padding: @pad-base;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 0.3rem;
|
||||||
|
&-left {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expandIcon {
|
||||||
|
height: 0.4rem;
|
||||||
|
width: 0.4rem;
|
||||||
|
font-style: normal;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
font-size:0.4rem;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.add {
|
||||||
|
border-color: #2a2a2a;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
color: #2a2a2a;
|
||||||
|
content: '+';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.reduce {
|
||||||
|
border-color: @primary-color;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
color: @primary-color;
|
||||||
|
content: '-';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
border-color: #ddd;
|
||||||
|
opacity: 0;
|
||||||
|
&:after {
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.value-span {
|
||||||
|
text-align: left;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectIcon {
|
||||||
|
float: right;
|
||||||
|
height: 0.3rem;
|
||||||
|
width: 0.3rem;
|
||||||
|
border: 1.5px solid;
|
||||||
|
border-radius: 50%;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.checked {
|
||||||
|
border-color: @primary-color;
|
||||||
|
background: @primary-color;;
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
color: #fff;
|
||||||
|
content: '✓';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.noChecked {
|
||||||
|
border-color: @primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
border-color: #ddd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.multiple-select-icon {
|
||||||
|
border-radius: 0.04rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
border-top: .8px solid #e1e1e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
> ul {
|
||||||
|
border-bottom: 0;
|
||||||
|
padding-left: 0.35rem;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
li {
|
||||||
|
.item {
|
||||||
|
padding-left: 0.35rem;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.item-left span{
|
||||||
|
width: 0;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
border-top: .8px solid #e1e1e1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {ajaxGetDictItems, getDictItemsFromCache} from '../../api/api'
|
import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'PickerDictField',
|
name: 'PickerDictField',
|
||||||
@@ -55,7 +55,7 @@ export default {
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data () {
|
||||||
return {
|
return {
|
||||||
showPicker: false,
|
showPicker: false,
|
||||||
showValue: '',
|
showValue: '',
|
||||||
@@ -69,53 +69,53 @@ export default {
|
|||||||
this.initVal()
|
this.initVal()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dictCode:{
|
dictCode: {
|
||||||
immediate:true,
|
immediate: true,
|
||||||
handler() {
|
handler () {
|
||||||
this.initDictData()
|
this.initDictData()
|
||||||
this.initVal()
|
this.initVal()
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
//透传给下级组件的事件,需要排除本组件使用的change事件
|
// 透传给下级组件的事件,需要排除本组件使用的change事件
|
||||||
childListeners() {
|
childListeners () {
|
||||||
// const vm = this
|
// const vm = this
|
||||||
let result = Object.assign({},
|
const result = Object.assign({},
|
||||||
this.$listeners,
|
this.$listeners
|
||||||
)
|
)
|
||||||
delete result.change
|
delete result.change
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
showPickerFunc() {
|
showPickerFunc () {
|
||||||
if(this.readonly) return
|
if (this.readonly) return
|
||||||
this.showPicker = true
|
this.showPicker = true
|
||||||
},
|
},
|
||||||
initVal() {
|
initVal () {
|
||||||
// 防止数据字典的值是0
|
// 防止数据字典的值是0
|
||||||
if (this.value + '') {
|
if (this.value + '') {
|
||||||
let item = this.columnData.find(tt => (tt[this.valueKey] + '') === (this.value + ''))
|
const item = this.columnData.find(tt => (tt[this.valueKey] + '') === (this.value + ''))
|
||||||
this.showValue = (item || {})[this.showKey]
|
this.showValue = (item || {})[this.showKey]
|
||||||
} else {
|
} else {
|
||||||
this.showValue = ''
|
this.showValue = ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
initDictData() {
|
initDictData () {
|
||||||
//优先从缓存中读取字典配置
|
// 优先从缓存中读取字典配置
|
||||||
if(getDictItemsFromCache(this.dictCode)){
|
if (getDictItemsFromCache(this.dictCode)) {
|
||||||
this.columnData = getDictItemsFromCache(this.dictCode)
|
this.columnData = getDictItemsFromCache(this.dictCode)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//根据字典Code, 初始化字典数组
|
// 根据字典Code, 初始化字典数组
|
||||||
ajaxGetDictItems(this.dictCode, null).then((res) => {
|
ajaxGetDictItems(this.dictCode, null).then((res) => {
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
this.columnData = res.result
|
this.columnData = res.result
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onConfirm(value) {
|
onConfirm (value) {
|
||||||
this.showPicker = false
|
this.showPicker = false
|
||||||
if (!this.valueKey) {
|
if (!this.valueKey) {
|
||||||
this.$emit('change', value)
|
this.$emit('change', value)
|
||||||
@@ -137,4 +137,4 @@ export default {
|
|||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -0,0 +1,264 @@
|
|||||||
|
<!-- form表单中下拉框样式的组件-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<van-field
|
||||||
|
readonly
|
||||||
|
clickable
|
||||||
|
name="picker"
|
||||||
|
:value="showValue"
|
||||||
|
v-bind="$attrs"
|
||||||
|
v-on="childListeners"
|
||||||
|
@click="showPickerFunc"
|
||||||
|
:rules="rules"
|
||||||
|
/>
|
||||||
|
<van-popup v-model="showPicker" style="height: 50vh" :class="{'dict-checkbox-field-popup': multiple}" position="bottom">
|
||||||
|
<!--background="#3074F6"-->
|
||||||
|
<van-search
|
||||||
|
v-if="canSearch"
|
||||||
|
v-model="searchValue"
|
||||||
|
placeholder="请输入搜索关键词"
|
||||||
|
input-align="left"
|
||||||
|
@search="onSearch"
|
||||||
|
@clear="onClear"
|
||||||
|
/>
|
||||||
|
<template v-if="!multiple">
|
||||||
|
<van-picker
|
||||||
|
show-toolbar
|
||||||
|
:columns="columnDataShow"
|
||||||
|
@confirm="onConfirm"
|
||||||
|
@cancel="showPicker = false"
|
||||||
|
:value-key="showKey"
|
||||||
|
>
|
||||||
|
</van-picker>
|
||||||
|
</template>
|
||||||
|
<template v-if="multiple">
|
||||||
|
<div class="item-ope">
|
||||||
|
<span class="van-picker__cancel" @click="onCancel">取消</span>
|
||||||
|
<span class="van-picker__confirm" @click="onConfirm">确认</span>
|
||||||
|
</div>
|
||||||
|
<van-checkbox-group class="dict-checkbox-group" v-model="checkedArr" ref="checkboxGroup">
|
||||||
|
<van-checkbox
|
||||||
|
v-for="(item) in columnDataShow"
|
||||||
|
:key="item[valueKey]"
|
||||||
|
:name="item[valueKey]"
|
||||||
|
shape="square"
|
||||||
|
>
|
||||||
|
{{ item[showKey] }}
|
||||||
|
</van-checkbox>
|
||||||
|
</van-checkbox-group>
|
||||||
|
</template>
|
||||||
|
</van-popup>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'PickerField',
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: [String, Number, Object],
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
columnData: {
|
||||||
|
type: Array,
|
||||||
|
required: false,
|
||||||
|
default: () => {
|
||||||
|
return [
|
||||||
|
// {name: '1name', value: '1', text: 3},
|
||||||
|
// {name: '2name', value: '2', text: 3},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
type: [Array, null],
|
||||||
|
required: false,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
// 默认是否有其他值
|
||||||
|
valueKey: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: 'value'
|
||||||
|
},
|
||||||
|
// picker中显示的key值
|
||||||
|
showKey: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
default: 'name'
|
||||||
|
},
|
||||||
|
readonly: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
// 是否多选
|
||||||
|
multiple: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
// 是否可以查询
|
||||||
|
canSearch: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 当值不存在于下拉框中,是否要回显传的value
|
||||||
|
needShowValue: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
showPicker: false,
|
||||||
|
showValue: '', // 当前显示的input的值
|
||||||
|
searchValue: '', // 查询的字段
|
||||||
|
columnDataShow: [], // 当前显示的下拉框数据
|
||||||
|
checkedArr: [] // 选中的数据,在多选的情况下使用
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
immediate: true,
|
||||||
|
handler: function () {
|
||||||
|
this.initVal()
|
||||||
|
// console.log('--------value----------', this.value)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
columnData: {
|
||||||
|
immediate: true,
|
||||||
|
handler: function () {
|
||||||
|
this.columnDataShow = this.columnData
|
||||||
|
this.initVal()
|
||||||
|
// console.log('--------columnData----------', this.columnData)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
showPicker (val) {
|
||||||
|
this.searchValue = ''
|
||||||
|
if (val) {
|
||||||
|
this.columnDataShow = [...this.columnData]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 透传给下级组件的事件,需要排除本组件使用的change事件
|
||||||
|
childListeners () {
|
||||||
|
// const vm = this
|
||||||
|
const result = Object.assign({},
|
||||||
|
this.$listeners
|
||||||
|
)
|
||||||
|
delete result.change
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
showPickerFunc () {
|
||||||
|
if (this.readonly || this.$attrs.disabled) return
|
||||||
|
this.showPicker = true
|
||||||
|
},
|
||||||
|
initVal () {
|
||||||
|
if (!this.multiple) {
|
||||||
|
if (this.value) {
|
||||||
|
let item
|
||||||
|
if (this.columnData.length > 0) {
|
||||||
|
item = this.columnData.find(tt => (tt[this.valueKey] + '') === (this.value + ''))
|
||||||
|
}
|
||||||
|
// 如果下拉列表中没有这一项,就回显值
|
||||||
|
if (!item) {
|
||||||
|
this.showValue = this.needShowValue ? this.value : ''
|
||||||
|
} else {
|
||||||
|
this.showValue = (item || {})[this.showKey]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.showValue = ''
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 多选下拉框
|
||||||
|
if (this.value) {
|
||||||
|
this.checkedArr = this.value.split(',')
|
||||||
|
const showArr = []
|
||||||
|
this.checkedArr.map(item => {
|
||||||
|
const column = this.columnData.find(tt => (tt[this.valueKey] + '') === (item + ''))
|
||||||
|
if (column) {
|
||||||
|
showArr.push((column || {})[this.showKey])
|
||||||
|
}
|
||||||
|
this.showValue = showArr.join(',')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.showValue = ''
|
||||||
|
this.checkedArr = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onConfirm (value) {
|
||||||
|
console.log('--------------')
|
||||||
|
if (!value) return
|
||||||
|
if (this.multiple) {
|
||||||
|
if (this.checkedArr.length === 0) {
|
||||||
|
this.$toast('请至少选择一条数据')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.showPicker = false
|
||||||
|
this.$emit('change', this.checkedArr.join())
|
||||||
|
} else {
|
||||||
|
if (!this.valueKey) {
|
||||||
|
this.$emit('change', value)
|
||||||
|
} else {
|
||||||
|
this.showValue = value[this.showKey]
|
||||||
|
this.$emit('change', value[this.valueKey])
|
||||||
|
}
|
||||||
|
this.showPicker = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onCancel () {
|
||||||
|
this.showPicker = false
|
||||||
|
},
|
||||||
|
onSearch (val) {
|
||||||
|
if (val) {
|
||||||
|
this.columnDataShow = this.columnData.filter(tt => tt[this.showKey].indexOf(val) > -1)
|
||||||
|
} else {
|
||||||
|
this.columnDataShow = [...this.columnData]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onClear () {
|
||||||
|
this.columnDataShow = [...this.columnData]
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
model: {
|
||||||
|
prop: 'value',
|
||||||
|
event: 'change'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
@import '~@assets/less/common.less';
|
||||||
|
|
||||||
|
/deep/ .dict-checkbox-field-popup {
|
||||||
|
height: 375px;
|
||||||
|
font-size: 16px;
|
||||||
|
|
||||||
|
.item-ope {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 44px;
|
||||||
|
line-height: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-checkbox-group {
|
||||||
|
padding: @pad-base;
|
||||||
|
height: calc(100% - 44px - 2 * @pad-base - 54px);
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
div + div {
|
||||||
|
margin-top: @pad-base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -1,106 +1,112 @@
|
|||||||
<!-- 选择评价人员 -->
|
<!-- 选择评价人员 -->
|
||||||
<template>
|
<template>
|
||||||
<div class="list-container">
|
<van-popup class="history-list-popup" v-model="isShow" position="right" :style="{ width: '100%', height: '100%' }" >
|
||||||
<van-search
|
<!-- 增加一个标题-->
|
||||||
v-model="filters.realname"
|
<custom-header :title="$t('selectUser')" :leftArrow="true" :handle-left="handleLeft"></custom-header>
|
||||||
show-action
|
<div class="list-container">
|
||||||
:clearable="true"
|
<van-search
|
||||||
input-align="center"
|
v-model="filters.realname"
|
||||||
label="姓名"
|
show-action
|
||||||
placeholder="请输入姓名"
|
:clearable="true"
|
||||||
@search="onSearch"
|
input-align="center"
|
||||||
>
|
label="姓名"
|
||||||
<template #action>
|
placeholder="请输入姓名"
|
||||||
<div @click="onSearch">搜索</div>
|
@search="onSearch"
|
||||||
</template>
|
>
|
||||||
</van-search>
|
<template #action>
|
||||||
<van-list
|
<div @click="onSearch">搜索</div>
|
||||||
v-model="loading"
|
</template>
|
||||||
:finished="listFinished"
|
</van-search>
|
||||||
:finished-text="listData.length > 0 ? '没有更多了' : '暂无数据'"
|
<van-list
|
||||||
@load="onLoadMore"
|
v-model="loading"
|
||||||
:immediate-check="false"
|
:finished="listFinished"
|
||||||
>
|
:finished-text="listData.length > 0 ? '没有更多了' : '暂无数据'"
|
||||||
<van-checkbox-group v-if="type === 'checkbox'" v-model="checkedArr" ref="checkboxGroup">
|
@load="onLoadMore"
|
||||||
<van-swipe-cell
|
:immediate-check="false"
|
||||||
v-for="(item, index) in listData"
|
>
|
||||||
:key="index"
|
<van-checkbox-group v-if="type === 'checkbox'" v-model="checkedArr" ref="checkboxGroup">
|
||||||
:name="index"
|
<van-swipe-cell
|
||||||
stop-propagation
|
v-for="(item, index) in listData"
|
||||||
:before-close="handleBeforeClose"
|
:key="index"
|
||||||
>
|
:name="index"
|
||||||
<div class="item-box">
|
stop-propagation
|
||||||
<van-checkbox :name="item.id" @click="checkboxClick(item)" shape="square" :disabled="readonly"></van-checkbox>
|
:before-close="handleBeforeClose"
|
||||||
<div>
|
>
|
||||||
<div class="item-title">
|
<div class="item-box">
|
||||||
<span class="title">{{ item.realname }}</span>
|
<van-checkbox :name="item.id" @click="checkboxClick(item)" shape="square" :disabled="readonly"></van-checkbox>
|
||||||
<span class="score">工号({{ item.username || '暂无数据' }})</span>
|
<div>
|
||||||
</div>
|
<div class="item-title">
|
||||||
<div class="item-content">
|
<span class="title">{{ item.realname }}</span>
|
||||||
|
<span class="score">工号({{ item.username || '暂无数据' }})</span>
|
||||||
|
</div>
|
||||||
|
<div class="item-content">
|
||||||
<span>
|
<span>
|
||||||
<span class="label">角色: </span>
|
<span class="label">角色: </span>
|
||||||
<span class="text">{{ item.roleTxt || '暂无数据' }}</span>
|
<span class="text">{{ item.roleTxt || '暂无数据' }}</span>
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="label">岗位: </span>
|
<span class="label">岗位: </span>
|
||||||
<span class="text">{{ item.post || '暂无数据' }}</span>
|
<span class="text">{{ item.post || '暂无数据' }}</span>
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</van-swipe-cell>
|
||||||
</van-swipe-cell>
|
</van-checkbox-group>
|
||||||
</van-checkbox-group>
|
<van-radio-group v-else v-model="checkedArr" ref="checkboxGroup">
|
||||||
<van-radio-group v-else v-model="checkedArr" ref="checkboxGroup">
|
<van-swipe-cell
|
||||||
<van-swipe-cell
|
v-for="(item, index) in listData"
|
||||||
v-for="(item, index) in listData"
|
:key="index"
|
||||||
:key="index"
|
:name="index"
|
||||||
:name="index"
|
stop-propagation
|
||||||
stop-propagation
|
:before-close="handleBeforeClose"
|
||||||
:before-close="handleBeforeClose"
|
>
|
||||||
>
|
<div class="item-box">
|
||||||
<div class="item-box">
|
<van-radio :name="item.id" @click="checkboxClick(item)" :disabled="readonly"></van-radio>
|
||||||
<van-radio :name="item.id" @click="checkboxClick(item)" :disabled="readonly"></van-radio>
|
<div>
|
||||||
<div>
|
<div class="item-title">
|
||||||
<div class="item-title">
|
<span class="title">{{ item.realname }}</span>
|
||||||
<span class="title">{{ item.realname }}</span>
|
<span class="score">工号({{ item.username || '暂无数据' }})</span>
|
||||||
<span class="score">工号({{ item.username || '暂无数据' }})</span>
|
</div>
|
||||||
</div>
|
<div class="item-content">
|
||||||
<div class="item-content">
|
|
||||||
<span>
|
<span>
|
||||||
<span class="label">角色: </span>
|
<span class="label">角色: </span>
|
||||||
<span class="text">{{ item.roleTxt || '暂无数据' }}</span>
|
<span class="text">{{ item.roleTxt || '暂无数据' }}</span>
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="label">岗位: </span>
|
<span class="label">岗位: </span>
|
||||||
<span class="text">{{ item.post || '暂无数据' }}</span>
|
<span class="text">{{ item.post || '暂无数据' }}</span>
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</van-swipe-cell>
|
||||||
</van-swipe-cell>
|
</van-radio-group>
|
||||||
</van-radio-group>
|
</van-list>
|
||||||
</van-list>
|
|
||||||
|
|
||||||
<!-- 底部的按钮 -->
|
<!-- 底部的按钮 -->
|
||||||
<div class="bottom-button-container">
|
<div class="bottom-button-container">
|
||||||
<div class="bottom-btn bottom-justify-div">
|
<div class="bottom-btn bottom-justify-div">
|
||||||
<van-button size="small" color="#C6C7CA" native-type="button" plain :disabled="disabled" @click="resetFunc">重置
|
<van-button size="small" color="#C6C7CA" native-type="button" plain :disabled="disabled" @click="resetFunc">重置
|
||||||
</van-button>
|
</van-button>
|
||||||
<van-button v-if="type === 'checkbox'" size="small" color="#E63636" native-type="button" :disabled="disabled" @click="checkAll">全选</van-button>
|
<van-button v-if="type === 'checkbox'" size="small" color="#E63636" native-type="button" :disabled="disabled" @click="checkAll">全选</van-button>
|
||||||
<van-button size="small" color="#E63636" native-type="button" :disabled="disabled" @click="confirmFunc()">确定
|
<van-button size="small" color="#E63636" native-type="button" :disabled="disabled" @click="confirmFunc()">确定
|
||||||
</van-button>
|
</van-button>
|
||||||
<van-button size="small" color="#C6C7CA" native-type="button" plain :disabled="disabled" @click="$emit('cancel')">取消
|
<van-button size="small" color="#C6C7CA" native-type="button" plain :disabled="disabled" @click="hide()">取消
|
||||||
</van-button>
|
</van-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</van-popup>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ListMixin from '../mixins/ListMixin'
|
import ListMixin from '../mixins/ListMixin'
|
||||||
|
import CustomHeader from '@/components/CustomHeader'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SelectUser',
|
name: 'SelectUser',
|
||||||
|
components: { CustomHeader },
|
||||||
mixins: [ListMixin],
|
mixins: [ListMixin],
|
||||||
props: {
|
props: {
|
||||||
selectedData: {
|
selectedData: {
|
||||||
@@ -141,6 +147,7 @@ export default {
|
|||||||
// },
|
// },
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
isShow: false,
|
||||||
loading: false, // 加载数据的标识,
|
loading: false, // 加载数据的标识,
|
||||||
listFinished: false, // 完成加载的标识
|
listFinished: false, // 完成加载的标识
|
||||||
refreshing: false, // 下拉刷新的标志
|
refreshing: false, // 下拉刷新的标志
|
||||||
@@ -164,6 +171,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
open () {
|
||||||
|
this.isShow = true
|
||||||
|
this.initData()
|
||||||
|
this.getListData()
|
||||||
|
},
|
||||||
checkboxClick (item) {
|
checkboxClick (item) {
|
||||||
console.log(item)
|
console.log(item)
|
||||||
if (this.type === 'checkbox') {
|
if (this.type === 'checkbox') {
|
||||||
@@ -234,9 +246,16 @@ export default {
|
|||||||
this.$emit('selected-change', this.checkedArr)
|
this.$emit('selected-change', this.checkedArr)
|
||||||
}
|
}
|
||||||
this.$emit('selected-change-name', this.selectedDataArr.map(item => item.realname + '(' + item.username + ')').join(','))
|
this.$emit('selected-change-name', this.selectedDataArr.map(item => item.realname + '(' + item.username + ')').join(','))
|
||||||
|
this.hide()
|
||||||
},
|
},
|
||||||
onSearch () {
|
onSearch () {
|
||||||
this.getListData()
|
this.getListData()
|
||||||
|
},
|
||||||
|
handleLeft () {
|
||||||
|
this.hide()
|
||||||
|
},
|
||||||
|
hide () {
|
||||||
|
this.isShow = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,6 +266,12 @@ export default {
|
|||||||
@import '~@assets/less/list.less';
|
@import '~@assets/less/list.less';
|
||||||
@import '~@assets/less/common.less';
|
@import '~@assets/less/common.less';
|
||||||
|
|
||||||
|
.history-list-popup{
|
||||||
|
background: @global-bg;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
.list-container{
|
.list-container{
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -12,30 +12,23 @@
|
|||||||
>
|
>
|
||||||
|
|
||||||
</van-field>
|
</van-field>
|
||||||
<van-popup class="history-list-popup" v-model="isShow" position="right" :style="{ width: '100%', height: '100%' }" >
|
<select-user
|
||||||
<!-- 增加一个标题-->
|
ref="evaluatePersonSelectedList"
|
||||||
<custom-header :title="$t('selectUser')" :leftArrow="true" :handle-left="handleLeft"></custom-header>
|
:selected-data="value"
|
||||||
|
:filter-data="filterData"
|
||||||
<select-user
|
@selected-change="selectedChange"
|
||||||
ref="evaluatePersonSelectedList"
|
@selected-change-name="selectedChangeName"
|
||||||
:selected-data="value"
|
v-bind="$attrs"
|
||||||
:filter-data="filterData"
|
:readonly="readonly"
|
||||||
@selected-change="selectedChange"
|
></select-user>
|
||||||
@selected-change-name="selectedChangeName"
|
|
||||||
@cancel="hide()"
|
|
||||||
v-bind="$attrs"
|
|
||||||
:readonly="readonly"
|
|
||||||
></select-user>
|
|
||||||
</van-popup>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import SelectUser from './SelectUser'
|
import SelectUser from './SelectUser'
|
||||||
import CustomHeader from './CustomHeader'
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SelectUserField',
|
name: 'SelectUserField',
|
||||||
components: { SelectUser, CustomHeader },
|
components: { SelectUser },
|
||||||
props: {
|
props: {
|
||||||
// 选中的多个id 以逗号“,”拼接
|
// 选中的多个id 以逗号“,”拼接
|
||||||
value: {
|
value: {
|
||||||
@@ -87,7 +80,6 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
isShow: false,
|
|
||||||
selectedDataNames: ''
|
selectedDataNames: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -96,22 +88,13 @@ export default {
|
|||||||
if (this.readonly) {
|
if (this.readonly) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.isShow = true
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.evaluatePersonSelectedList.initData()
|
this.$refs.evaluatePersonSelectedList.open()
|
||||||
this.$refs.evaluatePersonSelectedList.getListData()
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
handleLeft () {
|
|
||||||
this.hide()
|
|
||||||
},
|
|
||||||
hide () {
|
|
||||||
this.isShow = false
|
|
||||||
},
|
|
||||||
// 选择人员组件 选择后返回的方法
|
// 选择人员组件 选择后返回的方法
|
||||||
selectedChange (value) {
|
selectedChange (value) {
|
||||||
this.$emit('select', value)
|
this.$emit('select', value)
|
||||||
this.hide()
|
|
||||||
},
|
},
|
||||||
selectedChangeName (value) {
|
selectedChangeName (value) {
|
||||||
this.selectedDataNames = value
|
this.selectedDataNames = value
|
||||||
@@ -128,106 +111,4 @@ export default {
|
|||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
@import '~@assets/less/common.less';
|
@import '~@assets/less/common.less';
|
||||||
|
|
||||||
.history-list-popup{
|
|
||||||
background: @global-bg;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
.van-list{
|
|
||||||
padding: @pad-base;
|
|
||||||
flex: 1;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.item-box .item-title.full-width .title{
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
// 底部按钮
|
|
||||||
.bottom-justify-div{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-around;
|
|
||||||
.van-button{
|
|
||||||
padding: 0 @pad-base;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 中间内容
|
|
||||||
.item-box{
|
|
||||||
background: #FFFFFF;
|
|
||||||
padding: @pad-base;
|
|
||||||
& + .item-box{
|
|
||||||
margin-top: 0.24rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 左滑后 样式的变化
|
|
||||||
&.item-box-has-swipe{
|
|
||||||
border-radius: 0.1rem 0 0 0.1rem;
|
|
||||||
.item-state{
|
|
||||||
border-radius: 0 0 0 0.1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.van-checkbox{
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
/deep/.van-checkbox__label{
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.left-img{
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
flex-basis: 1.5rem;
|
|
||||||
.van-image{
|
|
||||||
width: 1.2rem;
|
|
||||||
height: 1.2rem;
|
|
||||||
margin: 0 0.24rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.right-content{
|
|
||||||
width: 0;
|
|
||||||
flex: 1;
|
|
||||||
.title{
|
|
||||||
width: 3.05rem;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.item-title{
|
|
||||||
font-size: 0.28rem;
|
|
||||||
text-align: left;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
span {
|
|
||||||
display: inline-block;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
.item-content{
|
|
||||||
padding: 0.2rem 0 0;
|
|
||||||
span {
|
|
||||||
display: flex;
|
|
||||||
align-items: baseline;
|
|
||||||
color: @font-color;
|
|
||||||
font-size: 0.22rem;
|
|
||||||
text-align: left;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.history-btn{
|
|
||||||
padding: 0 @pad-base;
|
|
||||||
|
|
||||||
}
|
|
||||||
//.van-cell{
|
|
||||||
// padding: 0.27rem 0!important;
|
|
||||||
//}
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -0,0 +1,186 @@
|
|||||||
|
<!--树形结构的多选组件,value-所选树形结构体的id的集合; text所选树形结构名字-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<van-field
|
||||||
|
v-bind="$attrs"
|
||||||
|
readonly
|
||||||
|
clearable
|
||||||
|
@click="showPopup"
|
||||||
|
v-model="showValue"
|
||||||
|
/>
|
||||||
|
<van-popup
|
||||||
|
v-model="show"
|
||||||
|
style="height: 60vh"
|
||||||
|
position="bottom"
|
||||||
|
safe-area-inset-bottom
|
||||||
|
:close-on-click-overlay="false"
|
||||||
|
:close-on-popstate="true"
|
||||||
|
>
|
||||||
|
<div class="popup-box">
|
||||||
|
<div class="operate">
|
||||||
|
<span @click="cancel">取消</span>
|
||||||
|
<span @click="handleOk">确认</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<link-menu
|
||||||
|
:data="list"
|
||||||
|
value-key="key"
|
||||||
|
label-key="title"
|
||||||
|
:value="selectedDepartTemp"
|
||||||
|
@input="selected"
|
||||||
|
:multiple="multiple"
|
||||||
|
></link-menu>
|
||||||
|
</div>
|
||||||
|
</van-popup>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import LinkMenu from './LinkMenu'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'TreeSelectMultiple',
|
||||||
|
components: {
|
||||||
|
LinkMenu
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: [Object, Array],
|
||||||
|
required: true,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
readonly: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
// 是否多选 默认是true
|
||||||
|
multiple: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value: {
|
||||||
|
immediate: true,
|
||||||
|
deep: true,
|
||||||
|
handler () {
|
||||||
|
this.handleInitData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
list: {
|
||||||
|
immediate: true,
|
||||||
|
deep: true,
|
||||||
|
handler () {
|
||||||
|
this.handleInitData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 当前显示的部门名称的字符串
|
||||||
|
showValue () {
|
||||||
|
if (this.multiple) {
|
||||||
|
return this.selectedDepart.map(tt => tt.title).join(',')
|
||||||
|
} else {
|
||||||
|
return this.selectedDepart.title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
show: false, // 控制popup的显示隐藏
|
||||||
|
selectedDepart: [], // 选中的部门
|
||||||
|
selectedDepartTemp: [], // 选中的部门暂存 多选的时候是数组,单选的时候是对象
|
||||||
|
confirm: false // 是否点击了确认
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
cancel () {
|
||||||
|
this.show = false
|
||||||
|
},
|
||||||
|
handleOk () {
|
||||||
|
if (this.multiple) {
|
||||||
|
this.$emit('input', this.selectedDepartTemp.map(tt => tt.key))
|
||||||
|
} else {
|
||||||
|
this.$emit('input', [this.selectedDepartTemp.key])
|
||||||
|
}
|
||||||
|
this.show = false
|
||||||
|
},
|
||||||
|
// 弹出层显示
|
||||||
|
showPopup () {
|
||||||
|
if (this.readonly) return
|
||||||
|
this.selectedDepartTemp = JSON.parse(JSON.stringify(this.selectedDepart))
|
||||||
|
this.show = true
|
||||||
|
},
|
||||||
|
selected (val) {
|
||||||
|
// 先临时转换
|
||||||
|
this.selectedDepartTemp = JSON.parse(JSON.stringify(val))
|
||||||
|
},
|
||||||
|
// 初始化数据,将id的形式转成所有对象的形式
|
||||||
|
handleInitData () {
|
||||||
|
const selectedDepart = []
|
||||||
|
this.findSelectedItemByKey(this.list, selectedDepart)
|
||||||
|
if (this.multiple) {
|
||||||
|
this.selectedDepart = [...selectedDepart]
|
||||||
|
} else {
|
||||||
|
this.selectedDepart = selectedDepart.length > 0 ? selectedDepart[0] : {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 循环遍历数据进行 选中的判断
|
||||||
|
findSelectedItemByKey (arr, result) {
|
||||||
|
arr.forEach(item => {
|
||||||
|
if (this.value.includes(item.key)) {
|
||||||
|
result.push(item)
|
||||||
|
}
|
||||||
|
if (item.children && item.children.length > 0) {
|
||||||
|
this.findSelectedItemByKey(item.children, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
@import '~@assets/less/common.less';
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 0 @pad-base;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解决线上滚动条不灵敏的bug
|
||||||
|
.popup-box{
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
/deep/& > .list-menu {
|
||||||
|
height: calc(100% - 0.8rem);
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.operate {
|
||||||
|
padding: 0 @pad-base;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 0.3rem;
|
||||||
|
font-weight: 600;
|
||||||
|
height: 0.8rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
width: 100%;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -73,3 +73,18 @@ export const ProcessKey = {
|
|||||||
// 企标稽查整改
|
// 企标稽查整改
|
||||||
ES_INSPECTION_RECTIFICATION: { text: 'inspect_plan', value: 'inspect_process' }
|
ES_INSPECTION_RECTIFICATION: { text: 'inspect_plan', value: 'inspect_process' }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 企标计划立项/变更流程-申请类型
|
||||||
|
export const ApplicationCategory = {
|
||||||
|
INITIATION: { text: '立项', value: '3' },
|
||||||
|
CHANGE: { text: '变更', value: '4' }
|
||||||
|
}
|
||||||
|
// 企标计划立项/变更流程-项目类别
|
||||||
|
export const ProjectType = {
|
||||||
|
ENACT: { text: '制定', value: '1' },
|
||||||
|
MODIFY: { text: '修订', value: '2' },
|
||||||
|
COMPLETE_TIME_CHANGE: { text: '完成时间变更', value: '3' },
|
||||||
|
WORK_TERMINATE: { text: '工作中止', value: '4' },
|
||||||
|
RESPONSIBLE_DEPT_CHANGE: { text: '责任部门变更', value: '5' },
|
||||||
|
MERGE: { text: '合并', value: '6' }
|
||||||
|
}
|
||||||
|
|||||||
+454
-19
@@ -26,57 +26,486 @@
|
|||||||
type="date"
|
type="date"
|
||||||
readonly
|
readonly
|
||||||
/>
|
/>
|
||||||
<select-user-field
|
<!-- 流程说明 -->
|
||||||
class="form-item"
|
<van-field
|
||||||
v-model="processInfoForm.appraiserObjArr"
|
v-model="processInfoForm.processDescription"
|
||||||
:checked-names="processInfoForm.appraiserObjArr_dictText"
|
:label="$t('processExplain')"
|
||||||
fieldName="appraiserObjArr"
|
type="textarea"
|
||||||
@selectNameChange="selectUserNameChange"
|
autosize
|
||||||
:readonly="false"
|
disabled
|
||||||
type="radio"
|
rows="2"
|
||||||
/>
|
:placeholder="$t('pleaseEnter')+$t('processExplain')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
</van-form>
|
</van-form>
|
||||||
</div>
|
</div>
|
||||||
<!-- 业务基本信息 -->
|
<!-- 业务基本信息 -->
|
||||||
<div class="process-part">
|
<div class="process-part">
|
||||||
<div class="process-part-title">{{ $t('basicServiceInformation') }}</div>
|
<div class="process-part-title">{{ $t('basicServiceInformation') }}</div>
|
||||||
|
<van-form
|
||||||
|
@failed="onFailed"
|
||||||
|
@submit="onSubmit"
|
||||||
|
ref="form"
|
||||||
|
input-align="right"
|
||||||
|
error-message-align="right"
|
||||||
|
:readonly="readonly"
|
||||||
|
>
|
||||||
|
<!-- 申请类型 -->
|
||||||
|
<picker-field
|
||||||
|
:label="$t('esInitChange.applicationType')"
|
||||||
|
:placeholder="$t('pleaseSelect')+$t('esInitChange.applicationType')"
|
||||||
|
v-model="baseInfoForm.applicationCategory"
|
||||||
|
readonly
|
||||||
|
:columnData="applicationCategoryData"
|
||||||
|
></picker-field>
|
||||||
|
<!-- 项目类别 -->
|
||||||
|
<picker-field
|
||||||
|
:label="$t('esInitChange.itemCategory')"
|
||||||
|
:placeholder="$t('pleaseSelect')+$t('esInitChange.itemCategory')"
|
||||||
|
v-model="baseInfoForm.projectType"
|
||||||
|
readonly
|
||||||
|
:columnData="projectTypeData"
|
||||||
|
></picker-field>
|
||||||
|
<!-- 制定 -->
|
||||||
|
<template v-if="baseInfoForm.projectType === ProjectType.ENACT.value">
|
||||||
|
<!-- 企标编号 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.enterpriseStandardNum')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.enterpriseStandardNum')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.newEnStandardNo" />
|
||||||
|
<!-- 企标名称 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.enterpriseStandardName')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.enterpriseStandardName')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.newEnStandardName" />
|
||||||
|
<!-- 企业标准代号 -->
|
||||||
|
<picker-dict-field
|
||||||
|
:label="$t('esInitChange.enterpriseStandardCode')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.enterpriseStandardCode')"
|
||||||
|
dict-code="enterprise_standard_code"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.enStandardCode" />
|
||||||
|
<!-- 企业名称代号 -->
|
||||||
|
<picker-dict-field
|
||||||
|
:label="$t('esInitChange.enterpriseNameCode')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.enterpriseNameCode')"
|
||||||
|
dict-code="enterprise_name_code"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.enNameCode" />
|
||||||
|
<!-- 标准类别代号 -->
|
||||||
|
<picker-dict-field
|
||||||
|
:label="$t('esInitChange.standardCategoryCode')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.standardCategoryCode')"
|
||||||
|
dict-code="standard_category_code"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.standardCategoryCode" />
|
||||||
|
</template>
|
||||||
|
<!-- 修订 -->
|
||||||
|
<template v-else-if="baseInfoForm.projectType === ProjectType.MODIFY.value">
|
||||||
|
<!-- 企标编号 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.enterpriseStandardNum')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.enterpriseStandardNum')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.originEnStandardNo" />
|
||||||
|
<!-- 企标名称 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.enterpriseStandardName')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.enterpriseStandardName')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.originEnStandardName" />
|
||||||
|
<!-- 新企标编号 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.newEnterpriseStandardNum')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.newEnterpriseStandardNum')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.newEnStandardNo" />
|
||||||
|
<!-- 新企标名称 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.newEnterpriseStandardName')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.newEnterpriseStandardName')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.newEnStandardName" />
|
||||||
|
</template>
|
||||||
|
<!-- 年代号 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.yearNumber')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.yearNumber')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.decadeCode" />
|
||||||
|
<!-- 标准英文名称 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.standardEnglishName')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.standardEnglishName')"
|
||||||
|
readonly
|
||||||
|
maxLength="50"
|
||||||
|
v-model="baseInfoForm.enStandardEnglishName" />
|
||||||
|
<!-- 标准体系 -->
|
||||||
|
<tree-select-multiple
|
||||||
|
:label="$t('esInitChange.standardSystem')"
|
||||||
|
:placeholder="$t('pleaseSelect') + $t('esInitChange.standardSystem')"
|
||||||
|
:list="standardSystemOptions"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.enStandardSystem"/>
|
||||||
|
<!-- 标准类型 -->
|
||||||
|
<picker-dict-field
|
||||||
|
:label="$t('esInitChange.standardType')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.standardType')"
|
||||||
|
dict-code="esp_standard_type"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.standardType" />
|
||||||
|
<!-- 标准等级分类 -->
|
||||||
|
<picker-dict-field
|
||||||
|
:label="$t('esInitChange.standardGradeClassification')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.standardGradeClassification')"
|
||||||
|
dict-code="standard_grade_classify"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.enStandardClassification" />
|
||||||
|
<!-- 编制说明 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.compilationIllustration')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.compilationIllustration')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.compilationDescription" >
|
||||||
|
<template v-slot:input>
|
||||||
|
<file-display :file-ids="baseInfoForm.compilationDescription" />
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
</van-form>
|
||||||
</div>
|
</div>
|
||||||
<!-- 审批意见 -->
|
<!-- 完成日期 -->
|
||||||
|
<div class="process-part">
|
||||||
|
<div class="process-part-title">{{ $t('finishDate') }}</div>
|
||||||
|
<van-form
|
||||||
|
@failed="onFailed"
|
||||||
|
@submit="onSubmit"
|
||||||
|
ref="form"
|
||||||
|
input-align="right"
|
||||||
|
error-message-align="right"
|
||||||
|
:readonly="readonly"
|
||||||
|
>
|
||||||
|
<!-- 草稿计划完成日期 -->
|
||||||
|
<calendar-field
|
||||||
|
:label="$t('esInitChange.draftPlanFinishDate')"
|
||||||
|
v-model="baseInfoForm.draftPlannedCompleteDate"
|
||||||
|
type="date"
|
||||||
|
readonly
|
||||||
|
/>
|
||||||
|
<!-- 征求意见稿计划完成日期 -->
|
||||||
|
<calendar-field
|
||||||
|
:label="$t('esInitChange.exposureDraftPlanFinishDate')"
|
||||||
|
v-model="baseInfoForm.exposureDraftPlanFinishDate"
|
||||||
|
type="date"
|
||||||
|
readonly
|
||||||
|
/>
|
||||||
|
<!-- 计划报批日期 -->
|
||||||
|
<calendar-field
|
||||||
|
:label="$t('esInitChange.planSubmissionDate')"
|
||||||
|
v-model="baseInfoForm.planApprovalDate"
|
||||||
|
type="date"
|
||||||
|
readonly
|
||||||
|
/>
|
||||||
|
</van-form>
|
||||||
|
</div>
|
||||||
|
<!-- 适用范围 -->
|
||||||
|
<div class="process-part">
|
||||||
|
<div class="process-part-title">{{ $t('rangeOfApplication') }}</div>
|
||||||
|
<van-form
|
||||||
|
@failed="onFailed"
|
||||||
|
@submit="onSubmit"
|
||||||
|
ref="form"
|
||||||
|
input-align="right"
|
||||||
|
error-message-align="right"
|
||||||
|
:readonly="readonly">
|
||||||
|
<!-- 零部件名称 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.partName')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.partName')"
|
||||||
|
readonly
|
||||||
|
autosize
|
||||||
|
v-model="baseInfoForm.componentName" />
|
||||||
|
<!-- 授权部门 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.authorizationDepart')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.authorizationDepart')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.authDept_dictText" />
|
||||||
|
<!-- 主起草人 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.principalDrafter')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.principalDrafter')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.mainDraftingUser_dictText" />
|
||||||
|
<!-- 主起草单位 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.mainDraftUnit')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.mainDraftUnit')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.mainDraftingUnit_dictText" />
|
||||||
|
<!-- 起草单位负责人 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.headOfMainDraftingUnit')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.headOfMainDraftingUnit')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.mainDraftingUnitResponsiblePerson_dictText" />
|
||||||
|
<!-- 标准推进人 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.standardPusher')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.standardPusher')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.standardPromoter_dictText" />
|
||||||
|
<!-- 配合单位 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.suitUnit')"
|
||||||
|
:placeholder="$t('pleaseEnter') + $t('esInitChange.suitUnit')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.cooperationUnit_dictText" />
|
||||||
|
</van-form>
|
||||||
|
</div>
|
||||||
|
<!-- 立项说明 -->
|
||||||
|
<div class="process-part">
|
||||||
|
<div class="process-part-title">{{ $t('esInitChange.projectStatement') }}</div>
|
||||||
|
<van-form
|
||||||
|
@failed="onFailed"
|
||||||
|
@submit="onSubmit"
|
||||||
|
ref="form"
|
||||||
|
input-align="right"
|
||||||
|
error-message-align="right"
|
||||||
|
:readonly="readonly">
|
||||||
|
<!-- 立项/变更原因 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.changeReason"
|
||||||
|
:label="$t('esInitChange.projectApprovalChangeReason')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
disabled
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('esInitChange.projectApprovalChangeReason')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
<!-- 立项背景、立项依据 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.projectBackground"
|
||||||
|
:label="$t('esInitChange.projectBackground')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
disabled
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('esInitChange.projectBackground')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
<!-- 国际、国家及行业同类标准分析 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.similarNaStandardsAnalysis"
|
||||||
|
:label="$t('esInitChange.homogeneousStandardAnalysis')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
disabled
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('esInitChange.homogeneousStandardAnalysis')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
<!-- 企业同类标准对比分析 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.similarEnStandardsAnalysis"
|
||||||
|
:label="$t('esInitChange.standardContrastiveAnalysis')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
disabled
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('esInitChange.standardContrastiveAnalysis')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
<!-- 立项标准的领先性与必要性 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.standardLeadingNecessity"
|
||||||
|
:label="$t('esInitChange.leadershipAndNecessity')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
disabled
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('esInitChange.leadershipAndNecessity')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
<!-- 立项目的及预期效果等 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.projectExpectedEffects"
|
||||||
|
:label="$t('esInitChange.initiatedProject')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
disabled
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('esInitChange.initiatedProject')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
<!-- 上传附件 -->
|
||||||
|
<van-field
|
||||||
|
:label="$t('esInitChange.uploadAttachment')"
|
||||||
|
readonly
|
||||||
|
v-model="baseInfoForm.uploadAttachment" >
|
||||||
|
<template v-slot:input>
|
||||||
|
<file-display :file-ids="baseInfoForm.uploadAttachment" />
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
</van-form>
|
||||||
|
</div>
|
||||||
|
<!-- 流程审批信息 -->
|
||||||
<div class="process-part">
|
<div class="process-part">
|
||||||
<div class="process-part-title">{{ $t('processApprovalInformation') }}</div>
|
<div class="process-part-title">{{ $t('processApprovalInformation') }}</div>
|
||||||
|
<van-form
|
||||||
|
@failed="onFailed"
|
||||||
|
@submit="onSubmit"
|
||||||
|
ref="form"
|
||||||
|
input-align="right"
|
||||||
|
error-message-align="right"
|
||||||
|
:readonly="readonly">
|
||||||
|
<!-- 备注 -->
|
||||||
|
<van-field
|
||||||
|
v-model="processInfoForm.commitText"
|
||||||
|
:label="$t('remark')"
|
||||||
|
type="textarea"
|
||||||
|
autosize
|
||||||
|
rows="2"
|
||||||
|
:placeholder="$t('pleaseEnter')+$t('remark')"
|
||||||
|
:border="false"
|
||||||
|
input-align="left"
|
||||||
|
class="vertical-form-item"/>
|
||||||
|
</van-form>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:operation>
|
<template v-slot:operation>
|
||||||
<van-button icon="revoke" class="operation-common-btn">{{ $t('turnTo') }}</van-button>
|
<van-button class="operation-common-btn">
|
||||||
<van-button icon="revoke" class="operation-common-btn" type="primary" @click="handleAgree">{{ $t('agree') }}</van-button>
|
<template #icon>
|
||||||
<van-button icon="revoke" class="operation-common-btn light-color-button">{{ $t('reject') }}</van-button>
|
<van-icon class="iconfont" class-prefix="icon" name="zhuanban" />
|
||||||
|
</template>
|
||||||
|
{{ $t('turnTo') }}
|
||||||
|
</van-button>
|
||||||
|
<van-button class="operation-common-btn" type="primary" @click="handleAgree">
|
||||||
|
<template #icon>
|
||||||
|
<van-icon class="iconfont" class-prefix="icon" name="check" />
|
||||||
|
</template>
|
||||||
|
{{ $t('agree') }}
|
||||||
|
</van-button>
|
||||||
|
<van-button class="operation-common-btn light-color-button">
|
||||||
|
<template #icon>
|
||||||
|
<van-icon class="iconfont" class-prefix="icon" name="close" />
|
||||||
|
</template>
|
||||||
|
{{ $t('reject') }}
|
||||||
|
</van-button>
|
||||||
</template>
|
</template>
|
||||||
</process-common-layout>
|
</process-common-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ProcessCommonLayout from '@/components/ProcessCommonLayout'
|
import ProcessCommonLayout from '@/components/ProcessCommonLayout'
|
||||||
import { ProcessKey } from '@/enums/commonEnums'
|
import { ApplicationCategory, ProcessKey, ProjectType } from '@/enums/commonEnums'
|
||||||
import CalendarField from '@/components/CalendarField'
|
import CalendarField from '@/components/CalendarField'
|
||||||
import SelectUserField from '@/components/SelectUserField'
|
import PickerField from '@/components/PickerField'
|
||||||
|
import PickerDictField from '@/components/PickerDictField'
|
||||||
|
import TreeSelectMultiple from '@/components/TreeSelectMultiple'
|
||||||
|
import FileDisplay from '@/components/FileDisplay'
|
||||||
|
import { getTreeList } from '@/api/api'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'EnterpriseStandardInitChange',
|
name: 'EnterpriseStandardInitChange',
|
||||||
components: {
|
components: {
|
||||||
|
PickerDictField,
|
||||||
|
PickerField,
|
||||||
ProcessCommonLayout,
|
ProcessCommonLayout,
|
||||||
CalendarField,
|
CalendarField,
|
||||||
SelectUserField
|
TreeSelectMultiple,
|
||||||
|
FileDisplay
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
ProcessKey,
|
ProcessKey,
|
||||||
|
ProjectType,
|
||||||
readonly: false,
|
readonly: false,
|
||||||
processInfoForm: {
|
// 申请类型
|
||||||
appraiserObjArr: ''
|
applicationCategoryData: [
|
||||||
} // 流程信息表单
|
{ // 标准立项
|
||||||
|
name: this.$t('esInitChange.standardProjectEstablishment'),
|
||||||
|
value: ApplicationCategory.INITIATION.value,
|
||||||
|
text: this.$t('esInitChange.standardProjectEstablishment')
|
||||||
|
},
|
||||||
|
{ // 变更
|
||||||
|
name: this.$t('esInitChange.change'),
|
||||||
|
value: ApplicationCategory.CHANGE.value,
|
||||||
|
text: this.$t('esInitChange.change')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 项目类别
|
||||||
|
projectTypeData: [
|
||||||
|
{ // 制定
|
||||||
|
name: this.$t('esInitChange.formulate'),
|
||||||
|
value: ProjectType.ENACT.value,
|
||||||
|
text: this.$t('esInitChange.formulate')
|
||||||
|
},
|
||||||
|
{ // 修订
|
||||||
|
name: this.$t('esInitChange.revise'),
|
||||||
|
value: ProjectType.MODIFY.value,
|
||||||
|
text: this.$t('esInitChange.revise')
|
||||||
|
},
|
||||||
|
{ // 完成时间变更
|
||||||
|
name: this.$t('esInitChange.completionTimeChange'),
|
||||||
|
value: ProjectType.COMPLETE_TIME_CHANGE.value,
|
||||||
|
text: this.$t('esInitChange.completionTimeChange')
|
||||||
|
},
|
||||||
|
{ // 工作终止
|
||||||
|
name: this.$t('esInitChange.terminationOfWork'),
|
||||||
|
value: ProjectType.WORK_TERMINATE.value,
|
||||||
|
text: this.$t('esInitChange.terminationOfWork')
|
||||||
|
},
|
||||||
|
{ // 责任部门变更
|
||||||
|
name: this.$t('esInitChange.dutyDepartChange'),
|
||||||
|
value: ProjectType.RESPONSIBLE_DEPT_CHANGE.value,
|
||||||
|
text: this.$t('esInitChange.dutyDepartChange')
|
||||||
|
},
|
||||||
|
{ // 合并
|
||||||
|
name: this.$t('esInitChange.merge'),
|
||||||
|
value: ProjectType.MERGE.value,
|
||||||
|
text: this.$t('esInitChange.merge')
|
||||||
|
}
|
||||||
|
],
|
||||||
|
standardSystemOptions: [], // 标准体系下拉框数据
|
||||||
|
processInfoForm: {}, // 流程信息表单
|
||||||
|
baseInfoForm: {
|
||||||
|
applicationCategory: 3,
|
||||||
|
projectType: 1,
|
||||||
|
enStandardCode: '1',
|
||||||
|
enStandardSystem: 'adb15f66ce174f7295ab51fbc39c15b8',
|
||||||
|
compilationDescription: '1730504676669747201'
|
||||||
|
} // 业务基本信息
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
created () {
|
||||||
|
this.initStandardSystemOptions()
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 获取标准体系下拉框数据
|
||||||
|
initStandardSystemOptions () {
|
||||||
|
getTreeList({ option: 1 }).then(res => {
|
||||||
|
if (res.success) {
|
||||||
|
this.standardSystemOptions = res.result
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
selectUserNameChange (value, fieldName) {
|
selectUserNameChange (value, fieldName) {
|
||||||
this.processInfoForm[fieldName + '_dictText'] = value
|
this.processInfoForm[fieldName + '_dictText'] = value
|
||||||
},
|
},
|
||||||
@@ -86,6 +515,12 @@ export default {
|
|||||||
},
|
},
|
||||||
handleAgree () {
|
handleAgree () {
|
||||||
this.onSubmit()
|
this.onSubmit()
|
||||||
|
},
|
||||||
|
selectUserFinish (value) {
|
||||||
|
console.log(value)
|
||||||
|
},
|
||||||
|
selectUser () {
|
||||||
|
this.$refs.selectUserRef.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user