| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779 |
- <template>
- <div class="app-container">
- <!-- <el-row :gutter="20"> -->
- <!--机构数据-->
- <!-- <el-col :span="4" :xs="24"> -->
- <!-- <div class="head-container">
- <el-input
- v-model="deptName"
- placeholder="请输入机构名称"
- clearable
- size="small"
- prefix-icon="el-icon-search"
- style="margin-bottom: 20px"
- />
- </div> -->
- <!-- <div style="margin-bottom: 10px">
- <el-checkbox v-model="queryParams.checkSub" @change="changeCheckBox"
- >关联下级</el-checkbox
- >
- </div>
- <el-tree
- :data="deptOptions"
- :props="defaultProps"
- :expand-on-click-node="false"
- :filter-node-method="filterNode"
- ref="tree"
- node-key="id"
- :default-expanded-keys="defaultKeys"
- :default-checked-keys="defaultKeys"
- @node-click="handleNodeClick"
- /> -->
- <!-- <div class="tree-container"> -->
- <layoutCom>
- <org-tree
- slot="leftBar"
- v-model="queryParams.orgId"
- @defaultKey="defaultKeys"
- @checkChange="checkChange"
- @click="handleNodeClick"
- ></org-tree>
- <!-- </div> -->
- <!-- </el-col> -->
- <!--用户数据-->
- <!-- <el-col :span="20" :xs="24"> -->
- <!-- 搜索条件 -->
- <el-row slot="rightBar">
- <el-col>
- <el-form
- :model="queryParams"
- ref="queryForm"
- size="small"
- :inline="true"
- v-show="showSearch"
- >
- <el-form-item label="机构名称" prop="name">
- <el-input
- v-model="queryParams.name"
- placeholder="请输入机构名称"
- clearable
- @keyup.enter.native="handleQuery"
- maxlength="50" @input="inputRestriction"
- />
- </el-form-item>
- <el-form-item label="机构编码" prop="code">
- <el-input
- v-model="queryParams.code"
- placeholder="请输入机构编码"
- clearable
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="状态" prop="isLock">
- <el-select
- v-model="queryParams.isLock"
- placeholder="请选择状态"
- clearable
- >
- <el-option
- v-for="dict in dict.type.sys_normal_disable"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="机构类型" prop="type">
- <el-select
- v-model="queryParams.type"
- placeholder="请选择机构类型"
- clearable
- >
- <el-option
- v-for="dict in dict.type.sys_org_type"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="mini"
- @click="handleQuery"
- >搜索</el-button
- >
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
- >重置</el-button
- >
- </el-form-item>
- </el-form>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- v-if="false"
- type="primary"
- plain
- icon="el-icon-plus"
- size="mini"
- @click="showDialogEdit(0)"
- v-hasPermi="['system:dept:add']"
- ></el-button>
- <el-button
- type="primary"
- plain
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['system:dept:add']"
- >新增</el-button
- >
- </el-col>
- <right-toolbar
- :showSearch.sync="showSearch"
- @queryTable="getList"
- ></right-toolbar>
- </el-row>
- <el-table
- border
- height="650"
- size="small"
- v-loading="loading"
- :data="deptList"
- @selection-change="handleSelectionChange"
- >
- <el-table-column label="序号" align="center" min-width="50">
- <template v-slot:default="scope">
- <span v-text="getPageIndex(scope.$index)"> </span>
- </template>
- </el-table-column>
- <el-table-column
- prop="name"
- label="机构名称"
- min-width="200"
- ></el-table-column>
- <el-table-column
- prop="shortName"
- label="机构简称"
- min-width="200"
- ></el-table-column>
- <el-table-column align="center" prop="type" width="150" label="机构类型">
- <template v-slot="scope">
- <dict-tag
- :options="dict.type.sys_org_type"
- :value="scope.row.type"
- />
- </template>
- </el-table-column>
- <el-table-column prop="code" label="机构编码" width="120"></el-table-column>
- <el-table-column prop="isLock" align="center" label="状态">
- <template v-slot="scope">
- <dict-tag
- :options="dict.type.sys_normal_disable"
- :value="scope.row.isLock"
- />
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="sort"
- label="排序"
- min-width="60"
- width="60"
- ></el-table-column>
- <el-table-column
- align="center"
- prop="weatherCityCode"
- label="城市天气区域"
- width="150"
- >
- <template slot-scope="r">
- <span>{{ getCode(r.row.weatherCityCode) }}</span>
- </template>
- </el-table-column>
- <!-- <el-table-column prop="address" label="地址"></el-table-column> -->
- <!-- <el-table-column label="负责人" align="center">
- <template v-slot:default="scope">
- <span v-text="scope.row.manager"></span>-
- <span v-text="scope.row.managerPhone"> </span>
- </template>
- </el-table-column> -->
- <el-table-column
- align="center"
- prop="manager"
- label="负责人"
- width="150"
- ></el-table-column>
- <el-table-column
- align="center"
- prop="managerPhone"
- label="负责人电话"
- width="150"
- ></el-table-column>
- <el-table-column
- label="操作"
- align="center"
- fixed="right"
- width="160"
- class-name="small-padding fixed-width"
- >
- <template slot-scope="scope">
- <router-link
- :to="'/system/dept-extend/extend/' + scope.row.id"
- class="link-type"
- >
- <el-button
- v-if="
- scope.row.type == 4 ||
- scope.row.type == 10 ||
- scope.row.type == 5
- "
- size="mini"
- type="text"
- icon="el-icon-plus"
- v-hasPermi="['system:dept:extend']"
- >补充信息</el-button
- >
- </router-link>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['system:dept:edit']"
- >编辑</el-button
- >
- <el-button
- v-if="!scope.row.source"
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['system:dept:remove']"
- >删除</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="total > 0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
- </el-col>
- </el-row>
- </layoutCom>
- <!-- 添加或修改机构对话框 -->
- <DialogCom
- :title="title"
- :visible.sync="open"
- width="700px"
- @close="closeHandler"
- append-to-body
- >
- <el-form ref="form" :model="form" :rules="rules" label-width="90px">
- <el-row>
- <el-col :span="24">
- <el-form-item
- v-if="this.pId != -1 && !form.source"
- label="上级机构"
- prop="parentId"
- >
- <treeselect
- v-model="form.parentId"
- :options="deptOptions2"
- :normalizer="tenantIdnormalizer"
- placeholder="请选择上级机构"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item label="机构名称" prop="name">
- <el-input
- :maxlength="50" @input="editRestriction"
- v-model="form.name"
- placeholder="请输入机构名称"
- :disabled="form.source == 1"
- />
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="机构简称" prop="shortName">
- <el-input
- v-model="form.shortName"
- placeholder="请输入机构简称"
- :disabled="form.source == 1"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="机构类型" prop="type">
- <el-select
- prop="type"
- label="机构类型"
- v-model="form.type"
- placeholder="请选择机构类型"
- style="width: 100%"
- clearable
- >
- <el-option
- v-for="dict in dict.type.sys_org_type"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- v-show="
- addIndex == 2 ||
- (addIndex == 3 && dict.value == 5) ||
- (addIndex == 3 && dict.value == 6)
- "
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="负责人" prop="manager">
- <el-input
- v-model="form.manager"
- placeholder="请输入负责人"
- maxlength="20"
- :disabled="form.source == 1"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="负责人电话" prop="managerPhone">
- <el-input
- v-model="form.managerPhone"
- placeholder="请输入负责人电话"
- maxlength="16"
- :disabled="form.source == 1"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="排序" prop="sort">
- <el-input-number
- v-model="form.sort"
- controls-position="right"
- style="width: 100%"
- :min="0"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12" v-if="false">
- <el-form-item label="邮箱" prop="email">
- <el-input
- v-model="form.email"
- placeholder="请输入邮箱"
- maxlength="50"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="机构状态" prop="isLock">
- <el-radio-group v-model="form.isLock">
- <el-radio
- v-for="dict in dict.type.sys_normal_disable"
- :key="dict.value"
- :label="dict.value"
- :disabled="form.source == 1"
- >{{ dict.label }}</el-radio
- >
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button
- v-if="title == '编辑'"
- type="primary"
- @click="changeSubmitForm"
- >确 定</el-button
- >
- <el-button v-if="title == '新增'" type="primary" @click="addSubmitForm"
- >确 定</el-button
- >
- <el-button @click="cancel">取 消</el-button>
- </div>
- </DialogCom>
- <DialogEdit ref="dialogEdit" @success="refs"></DialogEdit>
- </div>
- </template>
- <script>
- import {
- listDept,
- getDept,
- delDept,
- addDept,
- updateDept,
- listDeptExcludeChild,
- } from "@/api/system/dept";
- import { deptTreeSelect } from "@/api/system/public";
- import Treeselect from "@riophae/vue-treeselect";
- import "@riophae/vue-treeselect/dist/vue-treeselect.css";
- import DialogEdit from "@/views/system/dept/dialog.edit.vue";
- import { findAreaList } from "@/api/core/weather";
- import OrgTree from "@/components/orgTree";
- export default {
- name: "Dept",
- dicts: ["sys_normal_disable", "sys_org_type"],
- components: { Treeselect, DialogEdit, OrgTree },
- data() {
- return {
- // 遮罩层
- loading: true,
- // 显示搜索条件
- showSearch: true,
- // 表格树数据
- deptList: [],
- // 总条数
- total: 0,
- //新增机构打开标识
- addIndex: 1,
- // 机构树选项
- deptOptions: [],
- deptOptions2: [],
- pId: 0,
- // 弹出层标题
- title: "",
- // 是否显示弹出层
- open: false,
- // 是否展开,默认全部展开
- isExpandAll: false,
- // 重新渲染表格状态
- refreshTable: true,
- // 机构名称
- deptName: undefined,
- //是否关联下级
- checked: false,
- defaultProps: {
- children: "children",
- label: "shortName",
- },
- // 查询参数
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- name: undefined,
- status: undefined,
- parentId: undefined,
- checkSub: true,
- type: null,
- code:null,
- },
- // 表单参数
- form: {},
- // 表单校验
- rules: {
- parentId: [
- { required: true, message: "上级机构不能为空", trigger: "blur" },
- ],
- name: [
- { required: true, message: "机构名称不能为空", trigger: "blur" },
- ],
- type: [
- { required: true, message: "机构类型不能为空", trigger: "blur" },
- ],
- orderNum: [
- { required: true, message: "显示排序不能为空", trigger: "blur" },
- ],
- isLock: [{ required: true, message: "状态不能为空", trigger: "blur" }],
- email: [
- {
- type: "email",
- message: "请输入正确的邮箱地址",
- trigger: ["blur", "change"],
- },
- ],
- // 同步过来的机构存在座机号的情况
- // phone: [
- // {
- // pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
- // message: "请输入正确的手机号码",
- // trigger: "blur",
- // },
- // ],
- },
- //默认选中节点
- defaultKeys: [],
- areaList: [],
- };
- },
- computed: {
- isShow() {
- if (this.pId == null && this.pId != -1) {
- return true;
- }
- },
- },
- created() {
- this.getDeptTree();
- this.getList();
- this.getAreaList();
- },
- methods: {
- inputRestriction(){
- // 限制只允许输入汉字、英文和数字
- this.queryParams.name = this.queryParams.name.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '');
- },
- editRestriction(){
- // 限制只允许输入汉字、英文和数字
- this.form.name = this.form.name.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '');
- },
- getCode(item) {
- if (item != null && item.length > 0) {
- let area = this.areaList.find((v) => v.key === item);
- if (area) {
- return area.value;
- } else {
- return "";
- }
- } else {
- return "";
- }
- },
- closeHandler() {
- // alert(11111)
- },
- getPageIndex($index) {
- //表格序号
- return (
- (this.queryParams.pageNum - 1) * this.queryParams.pageSize + $index + 1
- );
- },
- //自定义数据
- tenantIdnormalizer(node, instanceId) {
- if (node.children && !node.children.length) {
- delete node.children;
- }
- return {
- id: node.id,
- label: node.shortName,
- children: node.children,
- };
- },
- /** 下穿状态改变*/
- changeCheckBox() {
- this.getList();
- },
- /** 查询机构下拉树结构 */
- getDeptTree() {
- deptTreeSelect().then((response) => {
- this.deptOptions = response.data;
- this.defaultKeys.push(response.data[0].id);
- this.queryParams.parentId = response.data[0].id;
- this.handleQuery();
- });
- },
- getAreaList() {
- findAreaList({}).then((response) => {
- this.areaList = response.data;
- });
- },
- // 筛选节点
- filterNode(value, data) {
- if (!value) return true;
- return data.name.indexOf(value) !== -1;
- },
- // 节点单击事件
- handleNodeClick(data) {
- this.queryParams.parentId = data.id;
- this.handleQuery();
- },
- //单选框状态改变
- checkChange(state) {
- this.queryParams.checkSub = state;
- this.handleQuery();
- },
- /** 查询机构列表 */
- getList() {
- this.loading = true;
- listDept(this.queryParams).then((response) => {
- this.deptList = response.rows;
- this.total = response.total;
- this.loading = false;
- });
- },
- /** 转换机构数据结构 */
- // normalizer(node) {
- // if (node.children && !node.children.length) {
- // delete node.children;
- // }
- // return {
- // id: node.id,
- // label: node.name,
- // children: node.children,
- // };
- // },
- // 取消按钮
- cancel() {
- this.open = false;
- this.reset();
- // this.getList();
- // this.getDeptTree();
- },
- // 表单重置
- reset() {
- this.form = {
- deptId: undefined,
- parentId: undefined,
- deptName: undefined,
- orderNum: undefined,
- leader: undefined,
- phone: undefined,
- email: undefined,
- status: "0",
- isLock: "0",
- type: null,
- };
- this.resetForm("form");
- },
- /** 搜索按钮操作 */
- handleQuery() {
- this.getList();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.resetForm("queryForm");
- // this.
- this.getList();
- },
- /** 新增按钮操作 */
- async handleAdd() {
- // console.log(this.queryParams.parentId, "this.queryParams.parentId");
- // console.log(this.form.parentId, "this.form.parentId");
- this.addIndex = 3;
- this.reset();
- if (this.queryParams.parentId != undefined) {
- if (this.pId != -1) {
- await deptTreeSelect().then((response) => {
- this.deptOptions2 = response.data;
- this.defaultKeys.push(response.data[0].id);
- });
- }
- this.form.parentId = this.queryParams.parentId;
- this.open = true;
- this.title = "新增";
- }
- },
- /** 展开/折叠操作 */
- toggleExpandAll() {
- this.refreshTable = false;
- this.isExpandAll = !this.isExpandAll;
- this.$nextTick(() => {
- this.refreshTable = true;
- });
- },
- /** 修改按钮操作 */
- async handleUpdate(row) {
- this.addIndex = 2;
- this.reset();
- getDept(row.id).then((response) => {
- this.form = response.data;
- this.pId = response.data.parentId;
- });
- if (this.pId != -1) {
- this.pId = row.parentId;
- this.form.parentId = row.parentId;
- console.log(this.form, "this.form");
- console.log(this.form.parentId, "this.pId");
- await deptTreeSelect({ removeId: row.parentId, id: row.id }).then(
- (response) => {
- this.deptOptions2 = response.data;
- // this.defaultKeys.push(response.data[0].id);
- this.open = true;
- this.title = "编辑";
- }
- );
- }
- },
- /** 提交按钮 */
- changeSubmitForm() {
- this.addIndex = 2;
- debugger;
- this.$refs["form"].validate((valid) => {
- if (valid) {
- updateDept(this.form).then((response) => {
- this.$modal.msgSuccess("处理成功");
- this.open = false;
- this.getList();
- this.getDeptTree();
- });
- }
- });
- },
- addSubmitForm() {
- this.addIndex = 3;
- this.$refs["form"].validate((valid) => {
- if (valid) {
- addDept(this.form).then((response) => {
- this.$modal.msgSuccess("处理成功");
- this.open = false;
- this.getList();
- this.getDeptTree();
- });
- }
- });
- },
- /** 删除按钮操作 */
- handleDelete(row) {
- this.$modal
- .confirm('是否确认删除名称为"' + row.name + '"的数据项?')
- .then(function () {
- return delDept(row.id);
- })
- .then(() => {
- this.getList();
- this.$modal.msgSuccess("删除成功");
- this.getDeptTree();
- })
- .catch(() => {});
- },
- // 多选框选中数据
- handleSelectionChange(selection) {
- this.ids = selection.map((item) => item.userId);
- this.single = selection.length != 1;
- this.multiple = !selection.length;
- },
- showDialogEdit(row) {
- this.$refs.dialogEdit.show(row);
- },
- refs() {
- this.getList();
- this.getDeptTree();
- },
- },
- watch: {
- // 根据名称筛选机构树
- deptName(val) {
- this.$refs.tree.filter(val);
- },
- },
- };
- </script>
- <style lang="scss" scoped></style>
|