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