4 files modified
1 files added
| | |
| | | }); |
| | | }, |
| | | rowUpdate(row, index, done, loading) { |
| | | console.log(row); |
| | | (this.params.isDept ? updateDept(row) : update(row)).then(() => { |
| | | this.onLoad(this.page); |
| | | this.$message({ |
| | |
| | | (this.params.isDept ? getDeptDetail(this.form.id) : getDetail(this.form.id)).then(res => { |
| | | this.form = res.data.data; |
| | | }); |
| | | // getDetail(this.form.id).then(res => { |
| | | // this.form = res.data.data; |
| | | // }); |
| | | if (type === "edit") { |
| | | this.weightRange += this.form.weight |
| | | } |
| | | } |
| | | done(); |
| | | }, |
| | |
| | | }, |
| | | mounted() { |
| | | // 非租户模式默认加载管理组数据 |
| | | if (!website.tenantMode) { |
| | | // if (!website.tenantMode) { |
| | | this.initData(website.tenantId); |
| | | } |
| | | // } |
| | | }, |
| | | methods: { |
| | | nodeClick(data) { |
| New file |
| | |
| | | <template> |
| | | <el-dialog v-model="params.visible" title="新增候选人" width="60%" destroy-on-close> |
| | | <div class="table-box"> |
| | | <avue-crud v-model="form" :option="option" :data="data" @row-save="rowSave"> |
| | | <template #menu="{ row }"> |
| | | <el-popconfirm title="是否确认删除当前候选人?" @confirm="rowDel(row)"> |
| | | <template #reference> |
| | | <el-button text plan type="primary" icon="el-icon-delete">删除</el-button> |
| | | </template> |
| | | </el-popconfirm> |
| | | </template> |
| | | </avue-crud> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { getCurrentInstance, reactive, ref, watch } from 'vue'; |
| | | import _ from 'lodash' |
| | | import { ElMessage } from 'element-plus' |
| | | import { |
| | | getList |
| | | } from '@/api/system/user'; |
| | | import { update } from '@/api/evaluate/evaluateTask'; |
| | | |
| | | const config = getCurrentInstance().appContext.config.globalProperties |
| | | |
| | | const $props = defineProps({ |
| | | params: { |
| | | type: Object, |
| | | default: () => ({ |
| | | visible: false, |
| | | type: 0, |
| | | data: {}, |
| | | }), |
| | | } |
| | | }) |
| | | |
| | | const $emit = defineEmits(['refreshTable']) |
| | | |
| | | const data = ref([]) |
| | | const form = ref({}) |
| | | |
| | | const option = reactive({ |
| | | height: '300', |
| | | tip: false, |
| | | searchShow: true, |
| | | searchMenuSpan: 6, |
| | | border: true, |
| | | index: true, |
| | | viewBtn: false, |
| | | addBtn: true, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | selection: true, |
| | | refreshBtn: false, |
| | | dialogClickModal: false, |
| | | menuFixed: 'right', |
| | | column: [ |
| | | { |
| | | label: '候选人姓名', |
| | | prop: 'name', |
| | | type: 'select', |
| | | dicData: [], |
| | | props: { |
| | | label: 'name', |
| | | value: 'id' |
| | | }, |
| | | control: (val, row) => { |
| | | const { findObject } = config |
| | | const { dicData } = findObject(option.column, 'name') |
| | | const data = dicData.find(item => item.id === val) |
| | | row.deptName = data.deptName || '' |
| | | row.deptId = data.deptId || '' |
| | | form.value = row |
| | | } |
| | | }, |
| | | { |
| | | label: '部门', |
| | | prop: 'deptName', |
| | | type: 'select', |
| | | disabled: true, |
| | | } |
| | | ] |
| | | }) |
| | | |
| | | |
| | | const initData = () => { |
| | | const { candidateNum } = _.cloneDeep($props.params.data) |
| | | const userList = [] |
| | | candidateNum.forEach(item => { |
| | | const { deptName, deptId, users } = item |
| | | users.forEach(user => { |
| | | user.deptName = deptName |
| | | user.deptId = deptId |
| | | userList.push(user) |
| | | }) |
| | | }) |
| | | data.value = userList |
| | | |
| | | const { findObject } = config |
| | | const column = findObject(option.column, 'name'); |
| | | getList(1, 999999, {}).then(res => { |
| | | column.dicData = res.data.data.records |
| | | }) |
| | | } |
| | | |
| | | const rowSave = (row, done) => { |
| | | const { findObject } = config |
| | | const column = findObject(option.column, 'name'); |
| | | const params = $props.params.data |
| | | const info = params.candidateNum.find(item => item.deptId === row.deptId) |
| | | const { name } = column.dicData.find(item => item.id === row.name) |
| | | const is = data.value.find(item => item.id === row.name) |
| | | if (is) { |
| | | ElMessage.warning('当前候选人已存在') |
| | | done() |
| | | } else { |
| | | const user = { |
| | | id: row.name, |
| | | name |
| | | } |
| | | info.users.push(user) |
| | | update(params).then( |
| | | () => { |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | initData() |
| | | $emit('refreshTable', '') |
| | | done() |
| | | }, |
| | | error => { |
| | | ElMessage({ |
| | | type: 'error', |
| | | message: error, |
| | | }); |
| | | } |
| | | ); |
| | | |
| | | } |
| | | } |
| | | |
| | | const rowDel = (row) => { |
| | | const { $index, id, deptId } = row |
| | | const params = $props.params.data |
| | | const info = params.candidateNum.find(item => item.deptId === deptId) |
| | | const index = info.users.find(item => item.id === id) |
| | | info.users.splice(index, 1) |
| | | if (info.val > info.users.length) { |
| | | info.val = info.users.length |
| | | } |
| | | update(params).then( |
| | | () => { |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }); |
| | | initData() |
| | | $emit('refreshTable', '') |
| | | }, |
| | | error => { |
| | | ElMessage({ |
| | | type: 'error', |
| | | message: error, |
| | | }); |
| | | } |
| | | ); |
| | | } |
| | | |
| | | watch(() => $props.params.visible, (val) => { |
| | | val && initData(); |
| | | }, { |
| | | deep: true, |
| | | immediate: true |
| | | }) |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .table-box { |
| | | height: 400px; |
| | | overflow-x: auto; |
| | | } |
| | | </style> |
| | |
| | | <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="认定标准描述:" prop="remark"> |
| | | <el-input v-model="addForm.remark" placeholder="请输入任务名称"></el-input> |
| | | <el-input v-model="addForm.remark" placeholder="请输入认定标准描述"></el-input> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="评优类型:" prop="type"> |
| | | <el-select disabled v-model="addForm.type" placeholder="请选择评优类型" style="width: 100%;"> |
| | |
| | | // 读取部门列表 |
| | | getDeptTree(tenantId) |
| | | .then(res => { |
| | | const result = _.cloneDeep(res.data.data); |
| | | let deptList = []; |
| | | result.forEach(item => { |
| | | _.cloneDeep(res.data.data).forEach(item => { |
| | | deptList.push(item); |
| | | if (item.children) { |
| | | deptList = result.concat(item.children); |
| | | item.children.forEach(ic => { |
| | | ic.title = item.title +'/'+ ic.title; |
| | | }) |
| | | deptList = deptList.concat(item.children); |
| | | delete item.children; |
| | | } |
| | | }); |
| | | return deptList; |
| | | return { |
| | | deptList, |
| | | }; |
| | | }) |
| | | .then(deptList => { |
| | | .then(({ deptList }) => { |
| | | const depts_list = _.cloneDeep(deptList); |
| | | this.depts = []; |
| | | depts_list.forEach(dept => { |
| | |
| | | <template #menu="{ size, row, index }"> |
| | | <el-button type="primary" text plain icon="el-icon-edit" @click="editDialog(row)">编辑</el-button> |
| | | <el-button type="primary" text plain icon="el-icon-position" @click="publicTimeBtn(row)" v-if="row.status === 2">发布</el-button> |
| | | <el-button type="primary" v-if="row.type === 0" text plain icon="el-icon-plus" @click="addCandidateHandle(row)">新增候选人</el-button> |
| | | <el-button type="primary" text plain icon="el-icon-download">导出</el-button> |
| | | </template> |
| | | </avue-crud> |
| | |
| | | </el-dialog> |
| | | <!-- 新增编辑弹窗 --> |
| | | <addDialog :params="addParams" @refreshTable="this.onLoad" /> |
| | | <!-- 新增候选人 --> |
| | | <addCandidate :params="addCandidateParams" @refreshTable="this.onLoad" /> |
| | | </basic-container> |
| | | </template> |
| | | |
| | |
| | | import NProgress from 'nprogress'; |
| | | import 'nprogress/nprogress.css'; |
| | | import addDialog from './components/addDialog.vue'; |
| | | import addCandidate from './components/addCandidate.vue'; |
| | | import { getDeptTree } from '@/api/system/dept'; |
| | | |
| | | export default { |
| | | components: { |
| | | addDialog, |
| | | addCandidate |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | }, |
| | | ], |
| | | }, |
| | | // 新增候选人params |
| | | addCandidateParams: {}, |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | const result = deptResult.data.data; |
| | | let deptList = []; |
| | | result.forEach(dept => { |
| | | console.log(dept); |
| | | if (dept.children) { |
| | | deptList = result.concat(dept.children); |
| | | delete dept.children; |
| | |
| | | ); |
| | | this.dialogVisible = false; |
| | | }, |
| | | addCandidateHandle(row) { |
| | | this.addCandidateParams = { |
| | | visible: true, |
| | | type: 0, |
| | | data: { |
| | | ...row |
| | | } |
| | | } |
| | | }, |
| | | tabChange(value) { |
| | | this.defaultTaskType = value.prop; |
| | | }, |