| New file |
| | |
| | | <template>
|
| | | <el-select v-model="value"
|
| | | v-bind="props"
|
| | | multiple
|
| | | @change="onChange">
|
| | | <el-option v-for="(item, index) in list"
|
| | | :key="index"
|
| | | :value="item.logic_id"
|
| | | :label="item.logic_id" />
|
| | | </el-select>
|
| | | </template>
|
| | |
|
| | | <script lang="ts">
|
| | | import { defineComponent, onMounted, ref, watch } from "vue";
|
| | | import { useCool } from "/@/cool";
|
| | | import { isArray } from "/@/cool/utils";
|
| | |
|
| | | export default defineComponent({
|
| | | name: "cl-device-select",
|
| | |
|
| | | props: {
|
| | | modelValue: [String, Number, Array],
|
| | | props: Object
|
| | | },
|
| | |
|
| | | emits: ["update:modelValue"],
|
| | |
|
| | | setup(props, { emit }) {
|
| | | // 请求服务
|
| | | const { service } = useCool();
|
| | |
|
| | | // 数据列表
|
| | | const list = ref<any[]>([]);
|
| | |
|
| | | // 绑定值
|
| | | const value = ref<any>();
|
| | |
|
| | | // 绑定值回调
|
| | | function onChange(val: any) {
|
| | | emit("update:modelValue", val);
|
| | | }
|
| | |
|
| | | // 解析值
|
| | | watch(
|
| | | () => props.modelValue,
|
| | | (val: any) => {
|
| | | value.value = (isArray(val) ? val : [val]).filter(Boolean);
|
| | | },
|
| | | {
|
| | | immediate: true
|
| | | }
|
| | | );
|
| | |
|
| | | onMounted(async () => {
|
| | | console.log(list, "list");
|
| | | list.value = await service.business.basedeviceinfo.list();
|
| | | });
|
| | |
|
| | | return {
|
| | | list,
|
| | | value,
|
| | | onChange
|
| | | };
|
| | | }
|
| | | });
|
| | | </script>
|
| | |
| | | <template> |
| | | <div class="system-user"> |
| | | <div class="pane"> |
| | | <!-- 组织架构 --> |
| | | <div class="dept" :class="[isExpand ? '_expand' : '_collapse']"> |
| | | <cl-dept-tree |
| | | @row-click="onDeptRowClick" |
| | | @user-add="onDeptUserAdd" |
| | | @list-change="onDeptListChange" |
| | | /> |
| | | </div> |
| | | <div class="system-user"> |
| | | <div class="pane"> |
| | | <!-- 组织架构 --> |
| | | <div class="dept" |
| | | :class="[isExpand ? '_expand' : '_collapse']"> |
| | | <cl-dept-tree @row-click="onDeptRowClick" |
| | | @user-add="onDeptUserAdd" |
| | | @list-change="onDeptListChange" /> |
| | | </div> |
| | | |
| | | <!-- 成员列表 --> |
| | | <div class="user"> |
| | | <div class="header"> |
| | | <div class="icon" @click="deptExpand"> |
| | | <i class="el-icon-arrow-left" v-if="isExpand"></i> |
| | | <i class="el-icon-arrow-right" v-else></i> |
| | | </div> |
| | | <!-- 成员列表 --> |
| | | <div class="user"> |
| | | <div class="header"> |
| | | <div class="icon" |
| | | @click="deptExpand"> |
| | | <i class="el-icon-arrow-left" |
| | | v-if="isExpand"></i> |
| | | <i class="el-icon-arrow-right" |
| | | v-else></i> |
| | | </div> |
| | | |
| | | <span>成员列表</span> |
| | | </div> |
| | | <span>成员列表</span> |
| | | </div> |
| | | |
| | | <div class="container"> |
| | | <cl-crud :ref="setRefs('crud')" :on-refresh="onRefresh" @load="onLoad"> |
| | | <el-row type="flex"> |
| | | <cl-refresh-btn /> |
| | | <cl-add-btn /> |
| | | <cl-multi-delete-btn /> |
| | | <el-button |
| | | v-permission="service.base.sys.user.permission.move" |
| | | size="mini" |
| | | type="success" |
| | | :disabled="selects.ids.length == 0" |
| | | @click="toMove()" |
| | | >转移</el-button |
| | | > |
| | | <cl-flex1 /> |
| | | <cl-search-key /> |
| | | </el-row> |
| | | <div class="container"> |
| | | <cl-crud :ref="setRefs('crud')" |
| | | :on-refresh="onRefresh" |
| | | @load="onLoad"> |
| | | <el-row type="flex"> |
| | | <cl-refresh-btn /> |
| | | <cl-add-btn /> |
| | | <cl-multi-delete-btn /> |
| | | <el-button v-permission="service.base.sys.user.permission.move" |
| | | size="mini" |
| | | type="success" |
| | | :disabled="selects.ids.length == 0" |
| | | @click="toMove()">转移</el-button> |
| | | <cl-flex1 /> |
| | | <cl-search-key /> |
| | | </el-row> |
| | | |
| | | <el-row> |
| | | <cl-table |
| | | :ref="setRefs('table')" |
| | | v-bind="table" |
| | | @selection-change="onSelectionChange" |
| | | > |
| | | <!-- 头像 --> |
| | | <template #column-headImg="{ scope }"> |
| | | <cl-avatar |
| | | shape="square" |
| | | size="medium" |
| | | :src="scope.row.headImg" |
| | | :style="{ margin: 'auto' }" |
| | | /> |
| | | </template> |
| | | <el-row> |
| | | <cl-table :ref="setRefs('table')" |
| | | v-bind="table" |
| | | @selection-change="onSelectionChange"> |
| | | <!-- 头像 --> |
| | | <template #column-headImg="{ scope }"> |
| | | <cl-avatar shape="square" |
| | | size="medium" |
| | | :src="scope.row.headImg" |
| | | :style="{ margin: 'auto' }" /> |
| | | </template> |
| | | |
| | | <!-- 权限 --> |
| | | <template #column-roleName="{ scope }"> |
| | | <el-tag |
| | | v-for="(item, index) in scope.row.roleNameList" |
| | | :key="index" |
| | | disable-transitions |
| | | size="small" |
| | | effect="dark" |
| | | style="margin: 2px" |
| | | >{{ item }}</el-tag |
| | | > |
| | | </template> |
| | | <!-- 权限 --> |
| | | <template #column-roleName="{ scope }"> |
| | | <el-tag v-for="(item, index) in scope.row.roleNameList" |
| | | :key="index" |
| | | disable-transitions |
| | | size="small" |
| | | effect="dark" |
| | | style="margin: 2px">{{ item }}</el-tag> |
| | | </template> |
| | | |
| | | <!-- 单个转移 --> |
| | | <template #slot-move-btn="{ scope }"> |
| | | <el-button |
| | | v-permission="service.base.sys.user.permission.move" |
| | | type="text" |
| | | size="mini" |
| | | @click="toMove(scope.row)" |
| | | >转移</el-button |
| | | > |
| | | </template> |
| | | </cl-table> |
| | | </el-row> |
| | | <!-- 单个转移 --> |
| | | <template #slot-move-btn="{ scope }"> |
| | | <el-button v-permission="service.base.sys.user.permission.move" |
| | | type="text" |
| | | size="mini" |
| | | @click="toMove(scope.row)">转移</el-button> |
| | | </template> |
| | | </cl-table> |
| | | </el-row> |
| | | |
| | | <el-row type="flex"> |
| | | <cl-flex1 /> |
| | | <cl-pagination /> |
| | | </el-row> |
| | | <el-row type="flex"> |
| | | <cl-flex1 /> |
| | | <cl-pagination /> |
| | | </el-row> |
| | | |
| | | <cl-upsert |
| | | :ref="setRefs('upsert')" |
| | | v-bind="upsert" |
| | | :on-submit="onUpsertSubmit" |
| | | /> |
| | | </cl-crud> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <cl-upsert :ref="setRefs('upsert')" |
| | | v-bind="upsert" |
| | | :on-submit="onUpsertSubmit" /> |
| | | </cl-crud> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 部门移动 --> |
| | | <cl-dept-move :ref="setRefs('dept-move')" @success="refresh({ page: 1 })" /> |
| | | </div> |
| | | <!-- 部门移动 --> |
| | | <cl-dept-move :ref="setRefs('dept-move')" |
| | | @success="refresh({ page: 1 })" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | |
| | | // 刷新监听 |
| | | async function onRefresh(params: any, { next, render }: any) { |
| | | const { list } = await next(params); |
| | | console.log(list, "list"); |
| | | |
| | | render( |
| | | list.map((e: any) => { |
| | | console.log(e, "刷新打印e"); |
| | | if (e.roleName) { |
| | | e.roleNameList = e.roleName.split(","); |
| | | } |
| | |
| | | {
|
| | | label: "逻辑ID",
|
| | | prop: "logic_id",
|
| | | value: [],
|
| | | component: {
|
| | | name: "el-input"
|
| | | name: "cl-device-select",
|
| | | props: {
|
| | | props: {
|
| | | "multiple-limit": 3
|
| | | }
|
| | | }
|
| | | },
|
| | | //是否为必填项,注:接口配置字段时没有设置默认值时,都需要选择必填
|
| | | required: true
|
| | | rules: {
|
| | | required: true,
|
| | | message: "角色不能为空"
|
| | | }
|
| | | },
|
| | | {
|
| | | label: "操作人",
|
| | |
| | | label: "状态",
|
| | | prop: "status",
|
| | | component: {
|
| | | name: "el-input"
|
| | | name: "el-radio-group",
|
| | | options: [
|
| | | {
|
| | | label: "未启用",
|
| | | value: 0
|
| | | },
|
| | | {
|
| | | label: "启用",
|
| | | value: 1
|
| | | }
|
| | | ]
|
| | | }
|
| | | }
|
| | | ]
|
| | |
| | | },
|
| | | {
|
| | | label: "状态",
|
| | | prop: "status"
|
| | | prop: "status",
|
| | | dict: [
|
| | | {
|
| | | label: "停用",
|
| | | value: 0,
|
| | | type: "info" //success warning danger info可选
|
| | | },
|
| | | {
|
| | | label: "启用",
|
| | | value: 1
|
| | | }
|
| | | ],
|
| | | filters: [
|
| | | {
|
| | | text: "停用",
|
| | | value: 0
|
| | | },
|
| | | {
|
| | | text: "启用",
|
| | | value: 1
|
| | | }
|
| | | ]
|
| | | },
|
| | | {
|
| | | label: "操作",
|
| | |
| | | }
|
| | |
|
| | | async function onRefresh(params: any, { next, done, render }: any) {
|
| | | // params 是每次请求的参数
|
| | | // next(params) 是继续往下执行 page 的请求
|
| | | // done() 完成请求,关闭loading
|
| | | // render(list, pagination) 渲染列表及分页信息
|
| | |
|
| | | let { list, pagination } = await next({});
|
| | |
|
| | | list.map((_e: any) => {});
|
| | |
| | | },
|
| | | {
|
| | | label: "状态",
|
| | | prop: "status"
|
| | | prop: "status",
|
| | | dict: [
|
| | | {
|
| | | label: "未执行",
|
| | | value: 0,
|
| | | type: "info" //success warning danger info可选
|
| | | },
|
| | | {
|
| | | label: "执行中",
|
| | | value: 1
|
| | | },
|
| | | {
|
| | | label: "未执行",
|
| | | value: 2
|
| | | }
|
| | | ],
|
| | | filters: [
|
| | | {
|
| | | text: "未执行",
|
| | | value: 0
|
| | | },
|
| | | {
|
| | | text: "执行中",
|
| | | value: 1
|
| | | },
|
| | | {
|
| | | text: "已执行",
|
| | | value: 2
|
| | | }
|
| | | ]
|
| | | },
|
| | | {
|
| | | label: "操作",
|
| | |
| | | required: true
|
| | | },
|
| | | {
|
| | | label: "任务指令",
|
| | | prop: "task_command",
|
| | | component: {
|
| | | name: "el-input"
|
| | | }
|
| | | },
|
| | | {
|
| | | label: "任务内容描述",
|
| | | prop: "task_content",
|
| | | component: {
|
| | | name: "el-input"
|
| | | }
|
| | | },
|
| | | {
|
| | | prop: "task_type",
|
| | | value: 1,
|
| | | label: "任务类型",
|
| | |
| | | label: "状态",
|
| | | prop: "status",
|
| | | component: {
|
| | | name: "el-input"
|
| | | name: "el-radio-group",
|
| | | options: [
|
| | | {
|
| | | label: "未启用",
|
| | | value: 0
|
| | | },
|
| | | {
|
| | | label: "启用",
|
| | | value: 1
|
| | | }
|
| | | ]
|
| | | }
|
| | | }
|
| | | ]
|
| | |
| | | width: 100
|
| | | },
|
| | | {
|
| | | label: "任务指令",
|
| | | prop: "task_command"
|
| | | },
|
| | | {
|
| | | label: "任务内容描述",
|
| | | prop: "task_content"
|
| | | },
|
| | | {
|
| | | label: "设备分组ID",
|
| | | prop: "group_id"
|
| | | },
|
| | |
| | | },
|
| | | {
|
| | | label: "状态",
|
| | | prop: "status"
|
| | | prop: "status",
|
| | | dict: [
|
| | | {
|
| | | label: "停用",
|
| | | value: 0,
|
| | | type: "info" //success warning danger info可选
|
| | | },
|
| | | {
|
| | | label: "启用",
|
| | | value: 1
|
| | | }
|
| | | ],
|
| | | filters: [
|
| | | {
|
| | | text: "停用",
|
| | | value: 0
|
| | | },
|
| | | {
|
| | | text: "启用",
|
| | | value: 1
|
| | | }
|
| | | ]
|
| | | },
|
| | | {
|
| | | label: "操作",
|
| | |
| | | const proxy = { |
| | | "/dev": { |
| | | // target: "http://192.168.1.16:8001", |
| | | target: "http://47.92.33.19:8001", |
| | | // target: "http://127.0.0.1:8001", |
| | | // target: "http://47.92.33.19:8001", |
| | | target: "http://127.0.0.1:8001", |
| | | changeOrigin: true, |
| | | rewrite: (path: string) => path.replace(/^\/dev/, "") |
| | | }, |