From 03dee8a7d70884ddd1ce9bf94f67143ffa02d549 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 03 Feb 2026 10:01:45 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web
---
applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue | 56 +-
applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue | 1
uniapps/work-wx/src/subPackages/deviceRegistration/add.vue | 1
applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue | 1
applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue | 1
applications/task-work-order/src/views/orderView/appConfiguration/process/DeployDialog.vue | 143 ++++++
applications/task-work-order/src/views/orderView/appConfiguration/process/IframeFlowDialog.vue | 60 ++
applications/task-work-order/src/views/orderView/appConfiguration/process/FlowConfigDialog.vue | 139 ++++++
applications/drone-command/src/views/permissionManage/permissionDept/index.vue | 8
/dev/null | 538 -------------------------
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue | 5
applications/task-work-order/src/styles/common/cockpit.scss | 25 -
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue | 1
applications/task-work-order/src/views/orderView/appConfiguration/process/index.vue | 257 ++++++++++++
14 files changed, 641 insertions(+), 595 deletions(-)
diff --git a/applications/drone-command/src/views/permissionManage/permissionDept/index.vue b/applications/drone-command/src/views/permissionManage/permissionDept/index.vue
index aabb8f2..0255304 100644
--- a/applications/drone-command/src/views/permissionManage/permissionDept/index.vue
+++ b/applications/drone-command/src/views/permissionManage/permissionDept/index.vue
@@ -69,7 +69,7 @@
<el-link @click="handleEdit(row)">编辑</el-link>
<el-link @click="handleAddChild(row)">新增子项</el-link>
<el-link type="danger" @click="handleDelete(row)">删除</el-link>
- <el-link type="danger" @click="handleShare(row)">共享</el-link>
+ <el-link type="danger" @click="handleShare(row)" v-if="hasSharing">共享</el-link>
</template>
</el-table-column>
</el-table>
@@ -103,7 +103,13 @@
import ShareDiaLog from './ShareDiaLog.vue'
import { saveOperationLog } from '@ztzf/apis'
import { useRoute } from 'vue-router'
+import { useStore } from 'vuex'
+const store = useStore()
+const permission = computed(() => store.state.user.permission)
+const ancestors = computed(() => store.state.user.userInfo?.detail?.ancestors)
+// 市级部门并且有权限才能看到共享按钮
+const hasSharing = computed(() => permission.value.department_share && ancestors.value.split(',')?.length === 2)
const initSearchParams = () => ({
deptName: '',
fullName: '',
diff --git a/applications/task-work-order/src/styles/common/cockpit.scss b/applications/task-work-order/src/styles/common/cockpit.scss
index 875068c..ecb4468 100644
--- a/applications/task-work-order/src/styles/common/cockpit.scss
+++ b/applications/task-work-order/src/styles/common/cockpit.scss
@@ -556,13 +556,6 @@
}
}
}
-
- .el-upload {
- button {
- background: #4C34FF;
- border: none;
- }
- }
}
.el-dialog__footer {
@@ -1195,22 +1188,6 @@
}
.gd-dialog-form {
- // 最后一排不需要设置 margin-bottom
- // border: 1px solid red;
- // 倒数第二个也设置为0
- // .el-col:nth-last-child(2) {
- // margin-bottom: 0;
- // }
- // .el-col:nth-last-child(1) {
- // margin-bottom: 0;
- // }
-
- // .el-form-item:nth-last-child(2) {
- // margin-bottom: 0;
- // }
- // .el-form-item:nth-last-child(1) {
- // margin-bottom: 0;
- // }
.el-input,
.el-input-number {
min-width: 200px;
@@ -1228,4 +1205,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/applications/task-work-order/src/views/orderView/appConfiguration/Process/index.vue b/applications/task-work-order/src/views/orderView/appConfiguration/Process/index.vue
deleted file mode 100644
index c7871fc..0000000
--- a/applications/task-work-order/src/views/orderView/appConfiguration/Process/index.vue
+++ /dev/null
@@ -1,538 +0,0 @@
-<template>
- <basic-container>
- <avue-crud
- :option="option"
- :table-loading="loading"
- :data="data"
- ref="crud"
- v-model="form"
- v-model:page="page"
- @search-change="searchChange"
- @search-reset="searchReset"
- @selection-change="selectionChange"
- @current-change="currentChange"
- @size-change="sizeChange"
- @refresh-change="refreshChange"
- @on-load="onLoad"
- >
- <template #menu-left>
- <el-button
- type="primary"
- size="default"
- icon="el-icon-circle-plus"
- v-if="permission.flow_model_create"
- plain
- @click="handleCreate"
- >创 建
- </el-button>
- <el-button
- type="danger"
- size="default"
- icon="el-icon-delete"
- v-if="permission.flow_model_delete"
- plain
- @click="handleDelete"
- >删 除
- </el-button>
- </template>
- <template #menu="scope">
- <el-button
- type="primary"
- text
- size="default"
- icon="el-icon-setting"
- v-if="permission.flow_model_update"
- @click.stop="handleUpdate(scope.row, scope.index)"
- >配置
- </el-button>
- <el-button
- type="primary"
- text
- size="default"
- icon="el-icon-upload"
- v-if="permission.flow_model_deploy"
- @click.stop="handleDeploy(scope.row, scope.index)"
- >部署
- </el-button>
- <el-button
- type="primary"
- text
- size="default"
- icon="el-icon-delete"
- v-if="permission.flow_model_delete"
- @click.stop="handleSlotDelete(scope.row, scope.index)"
- >删除
- </el-button>
- </template>
- <template #version="{ row }">
- <el-tag>v{{ row.version }}</el-tag>
- </template>
- </avue-crud>
- <el-dialog
- v-if="this.website.design.designMode"
- title="流程配置"
- append-to-body
- destroy-on-close
- v-model="flowBox"
- :close-on-press-escape="false"
- :fullscreen="true"
- :before-close="handleNutflowClose"
- class="nf-dialog"
- >
- <nf-design-base
- v-if="nutflowOption.step === 1"
- class="animated fadeIn"
- style="height: calc(100vh - 108px)"
- ref="nf-design"
- :options="nutflowOption.step1"
- ></nf-design-base>
- <nf-design-base
- v-if="nutflowOption.step === 2"
- class="animated fadeIn"
- style="height: calc(100vh - 108px)"
- ref="nf-design-view"
- :options="nutflowOption.step2"
- ></nf-design-base>
- <template #footer>
- <span class="avue-dialog__footer">
- <el-button @click="handleNutflowClose(() => {}, true)">取 消</el-button>
- <el-button v-if="nutflowOption.step === 1" type="success" @click="handleStep(1)"
- >下 一 步</el-button
- >
- <el-button v-if="nutflowOption.step === 2" type="success" @click="handleStep(-1)"
- >上 一 步</el-button
- >
- <el-button v-if="nutflowOption.step === 2" type="primary" @click="handleSubmitModel"
- >确 定</el-button
- >
- </span>
- </template>
- </el-dialog>
- <el-dialog v-else title="流程配置" append-to-body v-model="flowBox" :fullscreen="true">
- <iframe
- :src="flowUrl"
- width="100%"
- height="700"
- title="流程设计器"
- frameBorder="no"
- border="0"
- marginWidth="0"
- marginHeight="0"
- scrolling="no"
- allowTransparency="yes"
- >
- </iframe>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="flowBox = false">取 消</el-button>
- <el-button type="primary" @click="handleRefresh">确 定</el-button>
- </span>
- </template>
- </el-dialog>
- <el-dialog title="流程部署" append-to-body v-model="deployBox" width="20%">
- <avue-form ref="form" :option="optionDeploy" v-model="form" @submit="handleSubmit" />
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="deployBox = false">取 消</el-button>
- <el-button type="primary" @click="handleDoDeploy" :loading="deployLoading"
- >确 定</el-button
- >
- </span>
- </template>
- </el-dialog>
- </basic-container>
-</template>
-
-<script>
-import { mapGetters } from 'vuex';
-import { modelList, removeModel, deployModel, submitModel, detail } from '@/api/flow/flow';
-import { flowCategory } from '@/utils/flow';
-
-export default {
- data() {
- return {
- form: {},
- optionDeploy: {
- menuBtn: false,
- column: [
- {
- label: '流程类型',
- type: 'select',
- dicUrl: '/blade-system/dict/dictionary?code=flow',
- props: {
- label: 'dictValue',
- value: 'dictKey',
- },
- dataType: 'number',
- slot: true,
- prop: 'categoryValue',
- search: true,
- span: 24,
- rules: [
- {
- required: true,
- message: '请选择流程类型',
- trigger: 'blur',
- },
- ],
- },
- {
- label: '流程模式',
- prop: 'flowMode',
- type: 'radio',
- dicData: [
- {
- label: '通用流程',
- value: 1,
- },
- {
- label: '定制流程',
- value: 2,
- },
- ],
- value: 1,
- span: 24,
- rules: [
- {
- required: true,
- message: '请选择流程模式',
- trigger: 'blur',
- },
- ],
- },
- {
- label: '所属租户',
- prop: 'tenantId',
- type: 'tree',
- multiple: true,
- dicUrl: '/blade-system/tenant/select',
- props: {
- label: 'tenantName',
- value: 'tenantId',
- },
- display: false,
- span: 24,
- rules: [
- {
- required: true,
- message: '请选择所属租户',
- trigger: 'blur',
- },
- ],
- },
- ],
- },
- selectionId: '',
- selectionList: [],
- query: {},
- loading: true,
- deployLoading: false,
- page: {
- pageSize: 10,
- currentPage: 1,
- total: 0,
- },
- deployBox: false,
- flowBox: false,
- flowUrl: '',
- option: {
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- selection: true,
- editBtn: false,
- addBtn: false,
- viewBtn: false,
- delBtn: false,
- dialogWidth: 900,
- menuWidth: 220,
- dialogClickModal: false,
- size: 'default',
- searchSize: 'default',
- column: [
- {
- label: '模型主键',
- prop: 'id',
- },
- {
- label: '模型标识',
- prop: 'modelKey',
- search: true,
- overHidden: true,
- },
- {
- label: '模型名称',
- prop: 'name',
- search: true,
- overHidden: true,
- },
- {
- label: '流程版本',
- prop: 'version',
- slot: true,
- overHidden: true,
- },
- {
- label: '创建时间',
- prop: 'created',
- overHidden: true,
- },
- {
- label: '更新时间',
- prop: 'lastUpdated',
- overHidden: true,
- },
- ],
- },
- data: [],
- nutflowOption: {
- process: {},
- step: 1,
- step1: {
- toolbar: [
- 'open',
- 'create',
- 'fit',
- 'zoom-in',
- 'zoom-out',
- 'undo',
- 'redo',
- 'import',
- 'preview',
- ],
- },
- step2: {
- mode: 'view',
- simulation: true,
- minimap: true,
- },
- },
- };
- },
- watch: {
- 'form.flowMode'() {
- this.$refs.form.option.column.filter(item => {
- if (item.prop === 'tenantId') {
- item.display = this.form.flowMode === 2;
- }
- });
- },
- },
- computed: {
- ...mapGetters(['permission']),
- ids() {
- let ids = [];
- this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(',');
- },
- },
- methods: {
- handleSubmitModel() {
- const registry = this.$refs['nf-design-view'].getElementRegistry().getAll();
- const { businessObject } = registry[0];
- const { id, name, documentation } = businessObject;
- const description = documentation && documentation.length > 0 ? documentation[0].text : null;
- const params = {
- ...this.nutflowOption.process,
- modelKey: id,
- name,
- description,
- modelEditorXml: this.nutflowOption.process.xml,
- };
- submitModel(params).then(() => {
- this.$message.success('操作成功');
- this.handleNutflowClose();
- this.onLoad(this.page, this.query);
- });
- },
- handleStep(step) {
- if (step === 1) {
- // 下一步
- this.$refs['nf-design'].getData('xml').then(data => {
- this.nutflowOption.step1.xml = data;
- this.nutflowOption.step2.xml = data;
- this.nutflowOption.process.xml = data;
- this.nutflowOption.step = 2;
- });
- } else this.nutflowOption.step = 1;
- },
- handleNutflowClose(done, flag) {
- const initOption = {
- process: {},
- step: 1,
- step1: {
- toolbar: [
- 'open',
- 'create',
- 'fit',
- 'zoom-in',
- 'zoom-out',
- 'undo',
- 'redo',
- 'import',
- 'preview',
- ],
- },
- step2: {
- mode: 'view',
- simulation: true,
- minimap: true,
- },
- };
- if (done || flag) {
- this.$confirm('确定要关闭吗?关闭未保存的修改都会丢失。', '警告', {
- type: 'warning',
- })
- .then(() => {
- this.nutflowOption = initOption;
- if (typeof done == 'function') done();
- this.flowBox = false;
- })
- .catch(() => {});
- } else {
- this.nutflowOption = initOption;
- this.flowBox = false;
- }
- },
- handleSubmit(form, done) {
- this.deployLoading = true;
- deployModel({
- modelId: this.selectionId,
- category: flowCategory(form.categoryValue),
- tenantIds: form.tenantId ? form.tenantId.join(',') : '',
- }).then(res => {
- const data = res.data;
- if (data.success) {
- this.$message({
- type: 'success',
- message: data.msg,
- });
- done();
- this.$refs.form.resetForm();
- this.deployBox = false;
- this.deployLoading = false;
- } else {
- done();
- this.deployLoading = false;
- this.$message({
- type: 'warn',
- message: data.msg,
- });
- }
- });
- },
- searchReset() {
- this.query = {};
- this.onLoad(this.page);
- },
- searchChange(params, done) {
- this.query = params;
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
- done();
- },
- selectionChange(list) {
- this.selectionList = list;
- },
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
- },
- handleDelete() {
- if (this.selectionList.length === 0) {
- this.$message.warning('请选择至少一条数据');
- return;
- }
- this.$confirm('确定将选择数据删除?', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- })
- .then(() => {
- return removeModel(this.ids);
- })
- .then(() => {
- this.$message({
- type: 'success',
- message: '操作成功!',
- });
- this.$refs.crud.toggleSelection();
- this.onLoad(this.page);
- });
- },
- handleCreate() {
- if (!this.website.design.designMode) {
- this.flowUrl = `${this.website.design.designUrl}/index.html`;
- }
- this.flowBox = true;
- },
- handleRefresh() {
- this.flowBox = false;
- this.onLoad(this.page);
- },
- handleUpdate(row) {
- if (this.website.design.designMode) {
- detail({ id: row.id }).then(res => {
- const data = res.data.data;
- const { modelEditorXml } = data;
- this.nutflowOption.step1.xml = modelEditorXml;
- this.nutflowOption.process = data;
- });
- } else {
- this.flowUrl = `${this.website.design.designUrl}/index.html#/editor/${row.id}`;
- }
- this.flowBox = true;
- },
- handleDeploy(row) {
- this.deployBox = true;
- this.selectionId = row.id;
- },
- handleDoDeploy() {
- this.$refs.form.submit();
- },
- handleSlotDelete(row) {
- this.$confirm('确定将选择数据删除?', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- })
- .then(() => {
- return removeModel(row.id);
- })
- .then(() => {
- this.$message({
- type: 'success',
- message: '操作成功!',
- });
- this.$refs.crud.toggleSelection();
- this.onLoad(this.page);
- });
- },
- currentChange(currentPage) {
- this.page.currentPage = currentPage;
- },
- sizeChange(pageSize) {
- this.page.pageSize = pageSize;
- },
- refreshChange() {
- this.onLoad(this.page, this.query);
- },
- onLoad(page, params = {}) {
- this.loading = true;
- modelList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
- });
- },
- },
-};
-</script>
-
-<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue b/applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue
index 0ebf579..0eafb91 100644
--- a/applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue
+++ b/applications/task-work-order/src/views/orderView/appConfiguration/inventory/index.vue
@@ -1,33 +1,6 @@
<template>
<basic-container>
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
- <el-form-item label="事项名称" prop="matterName">
- <el-input
- class="gd-input gray"
- v-model="searchParams.matterName"
- placeholder="请输入"
- clearable
- @clear="handleSearch"
- />
- </el-form-item>
- <el-form-item label="实施清单名称" prop="implementName">
- <el-input
- class="gd-input gray"
- v-model="searchParams.implementName"
- placeholder="请输入"
- clearable
- @clear="handleSearch"
- />
- </el-form-item>
- <el-form-item label="目录编码" prop="catalogCode">
- <el-input
- class="gd-input gray"
- v-model="searchParams.catalogCode"
- placeholder="请输入"
- clearable
- @clear="handleSearch"
- />
- </el-form-item>
<el-form-item label="所属区划" prop="areaCode">
<el-tree-select
class="gd-select gray"
@@ -45,6 +18,35 @@
:render-after-expand="false"
/>
</el-form-item>
+ <el-form-item label="实施清单名称" prop="implementName">
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.implementName"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+ <el-form-item label="事项名称" prop="matterName">
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.matterName"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+
+ <el-form-item label="目录编码" prop="catalogCode">
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.catalogCode"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+
<el-form-item class="gd-search-actions">
<el-button :icon="RefreshRight" @click="resetForm"></el-button>
diff --git a/applications/task-work-order/src/views/orderView/appConfiguration/process/DeployDialog.vue b/applications/task-work-order/src/views/orderView/appConfiguration/process/DeployDialog.vue
new file mode 100644
index 0000000..48bad80
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/appConfiguration/process/DeployDialog.vue
@@ -0,0 +1,143 @@
+<template>
+ <el-dialog class="gd-dialog" v-model="visible" title="流程部署" append-to-body width="20%" @closed="visible = false">
+ <avue-form ref="form" :option="optionDeploy" v-model="form" @submit="handleSubmit" />
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="visible = false">取 消</el-button>
+ <el-button type="primary" @click="handleDoDeploy" :loading="deployLoading">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+import { deployModel } from '@/api/flow/flow'
+import { flowCategory } from '@/utils/flow'
+import { ElMessage } from 'element-plus'
+
+export default {
+ data() {
+ return {
+ visible: false,
+ form: {},
+ selectionId: '',
+ deployLoading: false,
+ optionDeploy: {
+ menuBtn: false,
+ column: [
+ {
+ label: '流程类型',
+ type: 'select',
+ dicUrl: '/blade-system/dict/dictionary?code=flow',
+ props: {
+ label: 'dictValue',
+ value: 'dictKey',
+ },
+ dataType: 'number',
+ slot: true,
+ prop: 'categoryValue',
+ search: true,
+ span: 24,
+ rules: [
+ {
+ required: true,
+ message: '请选择流程类型',
+ trigger: 'blur',
+ },
+ ],
+ },
+ {
+ label: '流程模式',
+ prop: 'flowMode',
+ type: 'radio',
+ dicData: [
+ {
+ label: '通用流程',
+ value: 1,
+ },
+ {
+ label: '定制流程',
+ value: 2,
+ },
+ ],
+ value: 1,
+ span: 24,
+ rules: [
+ {
+ required: true,
+ message: '请选择流程模式',
+ trigger: 'blur',
+ },
+ ],
+ },
+ {
+ label: '所属租户',
+ prop: 'tenantId',
+ type: 'tree',
+ multiple: true,
+ dicUrl: '/blade-system/tenant/select',
+ props: {
+ label: 'tenantName',
+ value: 'tenantId',
+ },
+ display: false,
+ span: 24,
+ rules: [
+ {
+ required: true,
+ message: '请选择所属租户',
+ trigger: 'blur',
+ },
+ ],
+ },
+ ],
+ },
+ }
+ },
+ watch: {
+ 'form.flowMode'() {
+ this.$refs.form.option.column.filter(item => {
+ if (item.prop === 'tenantId') {
+ item.display = this.form.flowMode === 2
+ }
+ })
+ },
+ },
+ methods: {
+ // 打开弹框
+ open(row) {
+ this.visible = true
+ this.selectionId = row.id
+ },
+ // 表单提交处理
+ handleSubmit(form, done) {
+ this.deployLoading = true
+ deployModel({
+ modelId: this.selectionId,
+ category: flowCategory(form.categoryValue),
+ tenantIds: form.tenantId ? form.tenantId.join(',') : '',
+ }).then(res => {
+ const data = res.data
+ if (data.success) {
+ ElMessage.success(data.msg)
+ done()
+ this.$refs.form.resetForm()
+ this.visible = false
+ this.deployLoading = false
+ this.$emit('success')
+ } else {
+ done()
+ this.deployLoading = false
+ ElMessage.warning(data.msg)
+ }
+ })
+ },
+ // 触发表单提交
+ handleDoDeploy() {
+ this.$refs.form.submit()
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/appConfiguration/process/FlowConfigDialog.vue b/applications/task-work-order/src/views/orderView/appConfiguration/process/FlowConfigDialog.vue
new file mode 100644
index 0000000..911d3b7
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/appConfiguration/process/FlowConfigDialog.vue
@@ -0,0 +1,139 @@
+<template>
+ <el-dialog
+ class=" nf-dialog"
+ v-model="visible"
+ title="流程配置"
+ append-to-body
+ destroy-on-close
+ :close-on-press-escape="false"
+ :fullscreen="true"
+ :before-close="handleNutflowClose"
+ @closed="visible = false"
+ >
+ <nf-design-base
+ v-if="nutflowOption.step === 1"
+ class="animated fadeIn"
+ style="height: calc(100vh - 108px)"
+ ref="nfDesignRef"
+ :options="nutflowOption.step1"
+ ></nf-design-base>
+ <nf-design-base
+ v-if="nutflowOption.step === 2"
+ class="animated fadeIn"
+ style="height: calc(100vh - 108px)"
+ ref="nfDesignViewRef"
+ :options="nutflowOption.step2"
+ ></nf-design-base>
+ <template #footer>
+ <span class="avue-dialog__footer">
+ <el-button @click="handleNutflowClose(() => {}, true)">取 消</el-button>
+ <el-button v-if="nutflowOption.step === 1" type="success" @click="handleStep(1)">下 一 步</el-button>
+ <el-button v-if="nutflowOption.step === 2" type="success" @click="handleStep(-1)">上 一 步</el-button>
+ <el-button v-if="nutflowOption.step === 2" type="primary" @click="handleSubmitModel">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+import { submitModel, detail } from '@/api/flow/flow'
+import { ElMessageBox, ElMessage } from 'element-plus'
+
+export default {
+ data() {
+ return {
+ visible: false,
+ nutflowOption: {
+ process: {},
+ step: 1,
+ step1: {
+ toolbar: ['open', 'create', 'fit', 'zoom-in', 'zoom-out', 'undo', 'redo', 'import', 'preview'],
+ },
+ step2: {
+ mode: 'view',
+ simulation: true,
+ minimap: true,
+ },
+ },
+ }
+ },
+ methods: {
+ // 打开弹框
+ open(row) {
+ this.visible = true
+ if (row) {
+ detail({ id: row.id }).then(res => {
+ const data = res.data.data
+ const { modelEditorXml } = data
+ this.nutflowOption.step1.xml = modelEditorXml
+ this.nutflowOption.process = data
+ })
+ }
+ },
+ // 提交流程模型
+ handleSubmitModel() {
+ const registry = this.$refs['nfDesignViewRef'].getElementRegistry().getAll()
+ const { businessObject } = registry[0]
+ const { id, name, documentation } = businessObject
+ const description = documentation && documentation.length > 0 ? documentation[0].text : null
+ const params = {
+ ...this.nutflowOption.process,
+ modelKey: id,
+ name,
+ description,
+ modelEditorXml: this.nutflowOption.process.xml,
+ }
+ submitModel(params).then(() => {
+ ElMessage.success('操作成功')
+ this.handleNutflowClose()
+ this.$emit('success')
+ })
+ },
+ // 步骤切换
+ handleStep(step) {
+ if (step === 1) {
+ // 下一步
+ this.$refs['nfDesignRef'].getData('xml').then(data => {
+ this.nutflowOption.step1.xml = data
+ this.nutflowOption.step2.xml = data
+ this.nutflowOption.process.xml = data
+ this.nutflowOption.step = 2
+ })
+ } else {
+ this.nutflowOption.step = 1
+ }
+ },
+ // 关闭弹框处理
+ handleNutflowClose(done, flag) {
+ const initOption = {
+ process: {},
+ step: 1,
+ step1: {
+ toolbar: ['open', 'create', 'fit', 'zoom-in', 'zoom-out', 'undo', 'redo', 'import', 'preview'],
+ },
+ step2: {
+ mode: 'view',
+ simulation: true,
+ minimap: true,
+ },
+ }
+ if (done || flag) {
+ ElMessageBox.confirm('确定要关闭吗?关闭未保存的修改都会丢失。', '警告', {
+ type: 'warning',
+ })
+ .then(() => {
+ this.nutflowOption = initOption
+ if (typeof done === 'function') done()
+ this.visible = false
+ })
+ .catch(() => {})
+ } else {
+ this.nutflowOption = initOption
+ this.visible = false
+ }
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/appConfiguration/process/IframeFlowDialog.vue b/applications/task-work-order/src/views/orderView/appConfiguration/process/IframeFlowDialog.vue
new file mode 100644
index 0000000..11a0561
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/appConfiguration/process/IframeFlowDialog.vue
@@ -0,0 +1,60 @@
+<template>
+ <el-dialog
+ class="gd-dialog"
+ v-model="visible"
+ title="流程配置"
+ append-to-body
+ :fullscreen="true"
+ @closed="visible = false"
+ >
+ <iframe
+ :src="flowUrl"
+ width="100%"
+ height="700"
+ title="流程设计器"
+ frameBorder="no"
+ border="0"
+ marginWidth="0"
+ marginHeight="0"
+ scrolling="no"
+ allowTransparency="yes"
+ ></iframe>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="visible = false">取 消</el-button>
+ <el-button type="primary" @click="handleRefresh">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+export default {
+ inject: ['website'],
+ data() {
+ return {
+ visible: false,
+ flowUrl: '',
+ }
+ },
+ methods: {
+ // 打开弹框 - 创建模式
+ openCreate() {
+ this.flowUrl = `${this.website.design.designUrl}/index.html`
+ this.visible = true
+ },
+ // 打开弹框 - 编辑模式
+ openEdit(row) {
+ this.flowUrl = `${this.website.design.designUrl}/index.html#/editor/${row.id}`
+ this.visible = true
+ },
+ // 确定并刷新
+ handleRefresh() {
+ this.visible = false
+ this.$emit('success')
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/appConfiguration/process/index.vue b/applications/task-work-order/src/views/orderView/appConfiguration/process/index.vue
new file mode 100644
index 0000000..5899df8
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/appConfiguration/process/index.vue
@@ -0,0 +1,257 @@
+<template>
+ <basic-container>
+ <el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
+ <el-form-item label="模型标识" prop="modelKey">
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.modelKey"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+
+ <el-form-item label="模型名称" prop="name">
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.name"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
+ </el-form-item>
+
+ <el-form-item class="gd-search-actions">
+ <el-button :icon="RefreshRight" @click="resetForm"></el-button>
+ <el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button>
+ </el-form-item>
+ </el-form>
+
+ <div class="gd-table-toolbar">
+ <el-button :icon="Plus" color="#4C34FF" type="primary" v-if="permission.flow_model_create" @click="handleCreate">
+ 创建
+ </el-button>
+ <el-button
+ :icon="Delete"
+ v-if="permission.flow_model_delete"
+ @click="handleBatchDelete"
+ >
+ 删除
+ </el-button>
+ </div>
+
+ <div class="gd-table-container" v-loading="loading">
+ <div class="gd-table-content gd-table-content-bg">
+ <el-table class="gd-table" :data="list" @selection-change="selectionChange">
+ <el-table-column type="selection" width="55" />
+ <el-table-column label="序号" width="80">
+ <template v-slot="{ $index }">
+ {{ $index + 1 }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="id" show-overflow-tooltip label="模型主键" />
+ <el-table-column prop="modelKey" show-overflow-tooltip label="模型标识" />
+ <el-table-column prop="name" show-overflow-tooltip label="模型名称" />
+ <el-table-column prop="version" show-overflow-tooltip label="流程版本">
+ <template v-slot="{ row }">
+ <el-tag>v{{ row.version }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="created" show-overflow-tooltip label="创建时间" />
+ <el-table-column prop="lastUpdated" show-overflow-tooltip label="更新时间" />
+ <el-table-column label="操作" class-name="operation-btns" width="200">
+ <template v-slot="{ row }">
+ <el-link type="primary" v-if="permission.flow_model_update" @click="handleUpdate(row)">配置</el-link>
+ <el-link type="primary" v-if="permission.flow_model_deploy" @click="handleDeploy(row)">部署</el-link>
+ <el-link type="primary" v-if="permission.flow_model_delete" @click="handleDelete(row)">删除</el-link>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+
+ <div class="gd-pagination-parent">
+ <el-pagination
+ popper-class="gd-select-popper"
+ v-model:current-page="searchParams.current"
+ v-model:page-size="searchParams.size"
+ layout="total, prev, pager, next, sizes"
+ :total="total"
+ @change="getList"
+ />
+ </div>
+ </div>
+
+ <!-- 流程配置弹框 - designMode -->
+ <FlowConfigDialog
+ v-if="flowConfigDialogVisible && website.design.designMode"
+ v-model="flowConfigDialogVisible"
+ ref="flowConfigDialogRef"
+ @success="getList"
+ />
+
+ <!-- 流程配置弹框 - iframe模式 -->
+ <IframeFlowDialog
+ v-if="iframeFlowDialogVisible && !website.design.designMode"
+ v-model="iframeFlowDialogVisible"
+ ref="iframeFlowDialogRef"
+ @success="getList"
+ />
+
+ <!-- 流程部署弹框 -->
+ <DeployDialog v-if="deployDialogVisible" v-model="deployDialogVisible" ref="deployDialogRef" />
+ </basic-container>
+</template>
+
+<script setup>
+import { Search, RefreshRight, Plus, Delete } from '@element-plus/icons-vue'
+import { onMounted, ref, computed, nextTick, getCurrentInstance } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { useStore } from 'vuex'
+import { modelList, removeModel } from '@/api/flow/flow'
+import FlowConfigDialog from './FlowConfigDialog.vue'
+import IframeFlowDialog from './IframeFlowDialog.vue'
+import DeployDialog from './DeployDialog.vue'
+
+const store = useStore()
+const { proxy } = getCurrentInstance()
+const website = proxy.website
+
+// 权限
+const permission = computed(() => store.getters.permission)
+
+// 初始化查询参数
+const initSearchParams = () => ({
+ modelKey: '', // 模型标识
+ name: '', // 模型名称
+ current: 1, // 当前页
+ size: 10, // 每页大小
+})
+const searchParams = ref(initSearchParams())
+const total = ref(0)
+const loading = ref(true)
+const list = ref([])
+const queryParamsRef = ref(null)
+const selectionList = ref([])
+
+// 弹框控制
+const flowConfigDialogRef = ref(null)
+const iframeFlowDialogRef = ref(null)
+const deployDialogRef = ref(null)
+const flowConfigDialogVisible = ref(false)
+const iframeFlowDialogVisible = ref(false)
+const deployDialogVisible = ref(false)
+
+// 计算选中的ids
+const ids = computed(() => selectionList.value.map(item => item.id).join(','))
+
+// 获取列表数据
+async function getList() {
+ loading.value = true
+ try {
+ const res = await modelList(searchParams.value.current, searchParams.value.size, {
+ modelKey: searchParams.value.modelKey,
+ name: searchParams.value.name,
+ })
+ list.value = res?.data?.data?.records ?? []
+ total.value = res?.data?.data?.total ?? 0
+ } finally {
+ loading.value = false
+ }
+}
+
+// 查询
+function handleSearch() {
+ searchParams.value.current = 1
+ getList()
+}
+
+// 重置查询
+function resetForm() {
+ queryParamsRef.value?.resetFields()
+ searchParams.value = initSearchParams()
+ getList()
+}
+
+// 选择变化
+function selectionChange(list) {
+ selectionList.value = list
+}
+
+// 创建流程
+function handleCreate() {
+ if (website.design.designMode) {
+ flowConfigDialogVisible.value = true
+ nextTick(() => {
+ flowConfigDialogRef.value?.open()
+ })
+ } else {
+ iframeFlowDialogVisible.value = true
+ nextTick(() => {
+ iframeFlowDialogRef.value?.openCreate()
+ })
+ }
+}
+
+// 配置流程
+function handleUpdate(row) {
+ if (website.design.designMode) {
+ flowConfigDialogVisible.value = true
+ nextTick(() => {
+ flowConfigDialogRef.value?.open(row)
+ })
+ } else {
+ iframeFlowDialogVisible.value = true
+ nextTick(() => {
+ iframeFlowDialogRef.value?.openEdit(row)
+ })
+ }
+}
+
+// 部署流程
+function handleDeploy(row) {
+ deployDialogVisible.value = true
+ nextTick(() => {
+ deployDialogRef.value?.open(row)
+ })
+}
+
+// 单行删除
+async function handleDelete(row) {
+ await ElMessageBox.confirm('确定将选择数据删除?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ customClass: 'gd-confirm-custom',
+ confirmButtonClass: 'gd-confirm-button',
+ cancelButtonClass: 'gd-confirm-cancel-button',
+ })
+ await removeModel(row.id)
+ ElMessage.success('操作成功!')
+ getList()
+}
+
+// 批量删除
+async function handleBatchDelete() {
+ if (selectionList.value.length === 0) {
+ ElMessage.warning('请选择至少一条数据')
+ return
+ }
+ await ElMessageBox.confirm('确定将选择数据删除?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ customClass: 'gd-confirm-custom',
+ confirmButtonClass: 'gd-confirm-button',
+ cancelButtonClass: 'gd-confirm-cancel-button',
+ })
+ await removeModel(ids.value)
+ ElMessage.success('操作成功!')
+ getList()
+}
+
+onMounted(() => {
+ getList()
+})
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue
index 61a5900..f400d47 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue
@@ -19,6 +19,7 @@
placeholder="请选择"
clearable
@change="handleSearch"
+ :disabled="permission.yycx_shtg"
>
<el-option
v-for="item in dictObj.appInnovationStatus"
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue
index 58066d9..405710e 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue
@@ -19,6 +19,7 @@
placeholder="请选择"
clearable
@change="handleSearch"
+ :disabled="permission.sjyy_shtg"
>
<el-option v-for="item in isResolvedOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
index 9935c07..dd242dd 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
@@ -67,7 +67,7 @@
:model="formData"
:rules="rules"
:disabled="dialogReadonly"
- label-width="190px"
+ :label-width="pxToRem(190)"
>
<el-row>
<el-col :span="12">
@@ -245,6 +245,7 @@
gdSupplyDemandDetailApi,
gdSupplyDemandSubmitApi,
} from '@/views/orderView/orderDataManage/supplyAdd/supplyAddApi'
+import { pxToRem } from '@/utils/rem'
// 初始化表单数据
const initForm = () => ({
@@ -407,4 +408,4 @@
width: 120px !important;
}
}
-</style>
\ No newline at end of file
+</style>
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
index 928c5eb..8830de9 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
@@ -123,7 +123,6 @@
<el-form-item label="任务执行时间" prop="executeTime">
<el-date-picker
class="gd-date-picker"
- popper-class="gd-date-picker-popper"
v-model="formData.executeTime"
type="datetime"
placeholder="请选择"
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue
index 7a07a85..2645760 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue
@@ -149,7 +149,6 @@
const activeName = ref('all')
const permission = computed(() => store.state.user.permission)
-console.log(permission.value, 'permission')
// 初始化查询参数
const initSearchParams = () => ({
diff --git a/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue b/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
index 0b30f36..6541906 100644
--- a/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
+++ b/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
@@ -303,7 +303,6 @@
value-key="code"
label-key="name"
children-key="children"
- :auto-close="true"
@confirm="onRegionConfirm"
@close="isShowRegion = false"
></u-cascader>
--
Gitblit v1.9.3