소스 검색

feat(质检工单): 新增实验报告功能,支持受托单和任务单的质检报工

yusheng 7 달 전
부모
커밋
b663ee0e9c

+ 103 - 0
api/inspectionWork/index.js

@@ -28,6 +28,22 @@ export async function getById(id) {
 	return Promise.reject(new Error(res.message));
 }
 
+// 获取详情 受托单
+export async function getRequestentrustById(id) {
+	const res = await get(Vue.prototype.apiUrl + `/qms/requestentrust/getById/${id}`);
+	if (res.code == 0) {
+		return res.data;
+	}
+	return Promise.reject(new Error(res.message));
+}
+// 获取详情 任务单
+export async function getTaskmonadById(id) {
+	const res = await get(Vue.prototype.apiUrl + `/qms/taskmonad/getById/${id}`);
+	if (res.code == 0) {
+		return res.data;
+	}
+	return Promise.reject(new Error(res.message));
+}
 // 编辑
 export async function update(data) {
 	const res = await postJ(Vue.prototype.apiUrl + `/qms/quality_work_order/update`, data);
@@ -46,3 +62,90 @@ export async function exeReportWorkBySingleTemplate(data) {
 	return Promise.reject(new Error(res.message));
 }
 
+
+//单个质检项保存 任务
+export async function exeReportWorkBySingleTaskmonad(data) {
+	const res = await postJ(Vue.prototype.apiUrl + `/qms/taskmonad/exeReportWorkBySingleTemplate`, data);
+	if (res.code == 0) {
+		return res.message;
+	}
+	return Promise.reject(new Error(res.message));
+}
+
+//单个质检项保存 s受托
+export async function exeReportWorkBySingleRequestentrust(data) {
+	const res = await postJ(Vue.prototype.apiUrl + `/qms/requestentrust/exeReportWorkBySingleTemplate`, data);
+	if (res.code == 0) {
+		return res.message;
+	}
+	return Promise.reject(new Error(res.message));
+}
+// 查询工厂列表-分页
+export async function getFactoryarea(params) {
+	const res = await get(Vue.prototype.apiUrl + `/main/factoryarea/page`, params);
+
+	if (res.code == 0) {
+		return res.data;
+	}
+	return Promise.reject(new Error(res.message));
+}
+
+
+
+// 受托单列表
+export async function getRequestentrustList(params) {
+
+	const res = await get(Vue.prototype.apiUrl + `/qms/requestentrust/page`, params);
+
+	if (res.code == 0) {
+		return res.data;
+	}
+	return Promise.reject(new Error(res.message));
+}
+
+// 任务单列表
+
+export async function getTaskmonadList(params) {
+	const res = await get(Vue.prototype.apiUrl + `/qms/taskmonad/page`, params);
+
+	if (res.code == 0) {
+		return res.data;
+	}
+	return Promise.reject(new Error(res.message));
+}
+
+// 报工校验
+export async function verificationQualityInspector(id) {
+
+	const res = await postJ(Vue.prototype.apiUrl + `/qms/quality_work_order/verificationQualityInspector/${id}`);
+	return res.code
+
+}
+
+
+//实验
+// 获取详情
+export async function getByIdExperiment(id) {
+
+	const res = await get(Vue.prototype.apiUrl + `/qms/experiment/getById/${id}`);
+	if (res.code == 0) {
+		return res.data;
+	}
+	return Promise.reject(new Error(res.message));
+}
+// 保存
+export async function saveExperiment(data) {
+	const res = await postJ(Vue.prototype.apiUrl + `/qms/experiment/save`, data);
+	if (res.code == 0) {
+		return res.message;
+	}
+	return Promise.reject(new Error(res.message));
+}
+// 修改
+export async function updateExperiment(data) {
+	const res = await putJ(Vue.prototype.apiUrl + `/qms/experiment/update`, data);
+	if (res.code == 0) {
+		return res.message;
+	}
+	return Promise.reject(new Error(res.message));
+}

+ 24 - 0
pages.json

@@ -2414,6 +2414,30 @@
 				"navigationStyle": "custom",
 				"navigationBarTextStyle": "white"
 			}
+		},
+		{
+			"path": "pages/qms/inspectionWork/myList",
+			"style": {
+				"navigationBarTitleText": "我的质检工单",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/qms/inspectionWork/myInspectionProjectTask",
+			"style": {
+				"navigationBarTitleText": "我的质检任务工单",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/qms/inspectionWork/myInspectionProjectEntrusted",
+			"style": {
+				"navigationBarTitleText": "我的质检受托工单",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
 		}
 	],
 	"tabBar": {

+ 0 - 1
pages/purchasingManage/components/produceList.vue

@@ -626,7 +626,6 @@
 			add() {
 				this.currentIndex = -1;
 				this.current = {};
-				this.c
 				if (this.isTemporary) {
 					this.show = true
 				} else {

+ 672 - 0
pages/qms/inspectionWork/experimentReport.vue

@@ -0,0 +1,672 @@
+<template>
+	<u-popup :show="show" @close="cancel" :closeable="false">
+		<view class="mainBox">
+			<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="实验" @clickLeft="cancel">
+
+			</uni-nav-bar>
+			<view class="wrapper">
+				<view class="herder_item">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验时间
+					</view>
+				</view>
+				<view class="marginTop20">
+					<uni-datetime-picker v-if="type=='edit'" type="datetime"
+						v-model="form.experimentalTime"></uni-datetime-picker>
+					<u-input v-else :disabled="true" placeholder=" " border="surround"
+						:value="form.experimentalTime"></u-input>
+				</view>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						执行标准
+					</view>
+				</view>
+				<u--input suffixIcon="arrow-right" style="background-color:#fff ;" :disabledColor="'#ffffff'"
+					:disabled="true" class="marginTop20" placeholder=" " border="surround"
+					:value="getDictValue('质检标准类型', projectData.qualityStandardType+'')">
+
+				</u--input>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验室
+					</view>
+				</view>
+				<view class="marginTop20">
+					<uni-data-picker v-if="type=='edit'" :disabled='type=="view"' v-model="form.workshopName"
+						placeholder="请选择" :localdata="laboratoryList" @change="getWorkshopId">
+					</uni-data-picker>
+					<u-input v-else :disabled="true" placeholder=" " border="surround"
+						:value="form.workshopName"></u-input>
+				</view>
+				<!-- 		<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验设备
+					</view>
+				</view> -->
+				<view v-for="(item, index) in form.experimentEquipmentList">
+					<view class="herder_item marginTop20" @click="delEquipmentList(index)">
+						<view class="herder_text"></view>
+						<view class="herder_view">
+							实验设备{{(index + 1)}}
+						</view>
+						<u-icon name="trash-fill" style="margin-ledt: 10rpx;" color="red" v-if="type=='edit'"></u-icon>
+					</view>
+					<u--input class="marginTop20" readonly placeholder="请选择" border="surround" :disabled="type=='view'"
+						@click.native="add(index,'experimentEquipmentList',2)" v-model="item.equipmentName">
+
+					</u--input>
+					<view class="herder_item marginTop20">
+						<view class="herder_text"></view>
+						<view class="herder_view">
+							开始时间
+						</view>
+					</view>
+
+
+					<uni-datetime-picker v-if="type=='edit'" type="datetime" class="marginTop20"
+						v-model="item.startTime"></uni-datetime-picker>
+					<u-input v-else :disabled="true" placeholder=" " border="surround" class="marginTop20"
+						:value="item.startTime"></u-input>
+					<view class="herder_item marginTop20">
+						<view class="herder_text"></view>
+						<view class="herder_view">
+							结束时间
+						</view>
+					</view>
+					<uni-datetime-picker v-if="type=='edit'" type="datetime" class="marginTop20"
+						v-model="item.endTime"></uni-datetime-picker>
+					<u-input v-else :disabled="true" placeholder=" " border="surround" class="marginTop20"
+						:value="item.endTime"></u-input>
+					<view class="herder_item marginTop20">
+						<view class="herder_text"></view>
+						<view class="herder_view">
+							运行参数
+						</view>
+					</view>
+					<u-input class="marginTop20" placeholder="请输入内容" border="surround" :disabled="type=='view'"
+						v-model="item.operatingParameters">
+
+					</u-input>
+				</view>
+
+				<view class="marginTop20" v-if="type=='edit'">
+					<view class="experimentP" @click="addExperimentEquipmentList"><u-icon name="plus-circle"
+							style="margin-right: 10rpx;"></u-icon>添加实验设备
+					</view>
+				</view>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						工艺要求
+					</view>
+				</view>
+				<u--textarea class="marginTop20" disabled placeholder=" " border="surround" autoHeight
+					v-model="form.processRequirementsJson"></u--textarea>
+
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验工具
+
+					</view>
+					<u-badge max="99" :value="form.toolJson.length"></u-badge>
+				</view>
+				<view class="marginTop20">
+					<view class="experimentP" @click="addTool('toolJson')"><u-icon name="plus-circle"
+							style="margin-right: 10rpx;"></u-icon> {{type=='view'?'查看实验工具':'添加实验工具'}}
+					</view>
+				</view>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验耗材
+					</view>
+					<u-badge max="99" :value="form.consumablesJson.length"></u-badge>
+				</view>
+				<view class="marginTop20">
+					<view class="experimentP" @click="addTool('consumablesJson')"><u-icon name="plus-circle"
+							style="margin-right: 10rpx;"></u-icon> {{type=='view'?'查看实验耗材':'添加实验耗材'}}
+					</view>
+				</view>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验结果
+					</view>
+				</view>
+				<u--textarea class="marginTop20" placeholder="请输入内容" border="surround" autoHeight
+					:disabled="type=='view'" v-model="form.resultsDescription"></u--textarea>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验结论
+					</view>
+				</view>
+				<uni-data-picker v-if="type!='view'" class="marginTop20" v-model="form.results" placeholder="请选择" :localdata="[{
+					text:'合格',value:1
+				},{
+					text:'不合格',value:2
+				}]">
+				</uni-data-picker>
+				<u-input disabled v-else class="marginTop20" placeholder="请输入内容" border="surround"
+					:value="form.results==2?'不合格':'合格'">
+				</u-input>
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						实验图片
+					</view>
+				</view>
+				<view v-if="type!='view'" class="marginTop20 imgAdd" @click="chooseImage('imgUrl')">
+					<u-icon name="camera"></u-icon>
+				</view>
+				<PreviewPhoto :type="type" @imagedelete="imagedelete" :imageList="imgUrl" />
+				<view class="herder_item marginTop20">
+					<view class="herder_text"></view>
+					<view class="herder_view">
+						附件图片
+					</view>
+				</view>
+				<view v-if="type!='view'" class="marginTop20 imgAdd" @click="chooseImage('attachmentUrl')">
+					<u-icon name="camera"></u-icon>
+				</view>
+				<PreviewPhoto :type="type" @imagedelete="imagedelete1" :imageList="attachmentUrl" />
+			</view>
+			<view style="height: 84rpx;"></view>
+			<view class="footerButton">
+				<u-button @click="cancel" type="default" text="返回"></u-button>
+				<u-button v-if="type!='view'" type="primary" @click="save" text="保存"></u-button>
+			</view>
+
+		</view>
+		<u-popup :show="toolJsonShow" :closeable="false" v-if="toolJsonShow">
+			<view style="min-height:400rpx;position:relative">
+				<uni-nav-bar fixed="true" statusBar="true" left-icon="back" :title="toolKey=='toolJson'?'实验工具':'实验耗材'"
+					@clickLeft="toolJsonShow=false">
+
+				</uni-nav-bar>
+				<view v-for="(item, index) in form[toolKey]" :key="index" style="position: relative;">
+					<myCard :item="item" :index="index+1" :btnList="[{
+					name: '删除',
+					apiName: 'del',
+					btnType: 'error ',
+					type: '2',
+					pageUrl: '',
+					judge: [{
+						fn: isBtn
+					}],
+				}]" :columns="columns()" @del="del(index)">
+
+						<u-input slot="batchNo" placeholder="请输入" border="surround" :disabled="type=='view'"
+							v-model="item.batchNo">
+						</u-input>
+						<u--textarea slot="remark" placeholder="请输入内容" border="surround" autoHeight
+							:disabled="type=='view'" v-model="item.remark"></u--textarea>
+					</myCard>
+				</view>
+				<view class="add" @click="add(-1,toolKey,1)" v-if="type=='edit'">
+					<u-icon name="plus" color="#fff"></u-icon>
+				</view>
+			</view>
+
+
+		</u-popup>
+	</u-popup>
+</template>
+
+<script>
+	const defForm = {
+		experimentalTime: '',
+		qualityStandardType: '',
+		workshopId: '',
+		workshopName: '',
+		processRequirementsJson: '',
+		resultsDescription: '',
+		results: 1,
+		experimentEquipmentList: [],
+		imgUrl: [],
+		attachmentUrl: [],
+		toolJson: [],
+		consumablesJson: [],
+		correlationId: '',
+		qualityStandardName: '',
+		qualityStandardId: '',
+		qualityWorkOrderId: '',
+	}
+	import dictMixns from '@/mixins/dictMixins'
+	import {
+		getFactoryarea,
+		getByIdExperiment,
+		saveExperiment,
+		updateExperiment
+	} from '@/api/inspectionWork/index.js'
+	import PreviewPhoto from '@/pages/maintenance/check/components/PreviewPhoto.vue'
+	import myCard from '@/pages/saleManage/components/myCard.vue'
+	export default {
+		mixins: [dictMixns],
+		components: {
+			PreviewPhoto,
+			myCard
+		},
+		props: {
+			type: {
+				type: String,
+				default: 'view'
+			},
+		},
+		computed: {
+			imgUrl() {
+				return this.form.imgUrl.map(item => {
+					return this.getFileUrl(item)
+				})
+			},
+			attachmentUrl() {
+				return this.form.attachmentUrl.map(item => {
+					return this.getFileUrl(item)
+				})
+			}
+		},
+
+		data() {
+			return {
+				dateShow: false,
+				toolJsonShow: false,
+				form: {
+					...defForm
+				},
+				laboratoryList: [],
+				show: false,
+				currentIndex: '',
+				currentKey: '',
+				toolKey: '',
+				projectData: {}
+
+			}
+		},
+		created() {
+			uni.$off('setProduceList')
+			uni.$on('setProduceList', (data) => {
+				if (this.currentKey == 'experimentEquipmentList') {
+					this.$set(
+						this.form[this.currentKey][this.currentIndex],
+						'equipmentId',
+						data[0].id
+					);
+					this.$set(
+						this.form[this.currentKey][this.currentIndex],
+						'equipmentName',
+						data[0].name
+					);
+				} else {
+					this.form[this.currentKey].push(...data)
+				}
+
+			})
+		},
+		onUnload() {
+			uni.$off('setProduceList')
+
+		},
+		methods: {
+			isBtn() {
+				return this.type == 'edit'
+			},
+			columns() {
+				console.log(this.toolKey, 'this.toolKey')
+				if (this.toolKey == 'toolJson') {
+					return [
+						[{
+							label: '工具名称:',
+							prop: 'name',
+							type: 'title',
+						}],
+						[{
+							label: '型号:',
+							prop: 'modelType'
+						}],
+						[{
+							label: '编号:',
+							prop: 'code'
+						}],
+						[{
+							label: '操作:',
+							prop: 'action',
+							type: 'action',
+							className: 'perce100',
+						}],
+					]
+				} else {
+					return [
+						[{
+							label: '耗材名称:',
+							prop: 'name',
+							type: 'title',
+						}],
+						[{
+							label: '编号:',
+							prop: 'code'
+						}],
+						[{
+							label: '批次号:',
+							prop: 'batchNo',
+							slot: 'batchNo',
+						}],
+						[{
+							label: '浓度:',
+							prop: 'specification',
+						}],
+						[{
+							label: '来源:',
+							prop: 'gys',
+						}],
+						[{
+							label: '过程:',
+							prop: 'remark',
+							slot: 'remark',
+						}],
+						[{
+							label: '操作:',
+							prop: 'action',
+							type: 'action',
+							className: 'perce100',
+						}],
+					]
+				}
+			},
+			getFileUrl(item) {
+				let fileNames = item.storePath.split('/')
+				let url = this.apiUrl +
+					'/main/file/getFile?objectName=' + item.storePath +
+					'&fullfilename=' + fileNames[fileNames.length -
+						1]
+				return url
+			},
+
+			getWorkshopId({
+				detail
+			}) {
+				if (detail.value[0]) {
+					this.form.workshopId = detail.value[0].value
+				} else {
+					this.form.workshopId = ''
+				}
+
+			},
+			add(index, key, type) {
+				this.currentIndex = index;
+				this.currentKey = key
+				uni.navigateTo({
+					url: '/pages/purchasingManage/components/selectProduce?isAll=' + type
+				})
+			},
+			imagedelete(index) {
+				this.form.imgUrl.splice(index, 1);
+			},
+			imagedelete1(index) {
+				this.form.attachmentUrl.splice(index, 1);
+			},
+			addTool(key) {
+				this.toolKey = key
+				this.toolJsonShow = true
+			},
+			del(index) {
+				this.form[this.toolKey].splice(index, 1);
+			},
+			delEquipmentList(index) {
+				if (this.view == 'view') {
+					return
+				}
+				this.form.experimentEquipmentList.splice(index, 1);
+
+			},
+			async open(row, type) {
+				this.projectData = row
+				if (row.experimentId) {
+					this.$set(this, 'form', await getByIdExperiment(row.experimentId));
+				} else {
+					this.form.correlationId = row.id;
+					this.form.qualityStandardName = row.qualityStandardName;
+					this.form.qualityStandardId = row.qualityStandardId;
+					this.form.qualityWorkOrderId = row.qualityWorkOrderId;
+					if (row.symbol) {
+						this.form.processRequirementsJson += row.symbol;
+					}
+					if (row.textType == 3) {
+						this.form.processRequirementsJson +=
+							row.minValue + '-' + row.maxValue;
+					} else {
+						this.form.processRequirementsJson += row.defaultValue;
+					}
+					if (row.unitName) {
+						this.form.processRequirementsJson += row.unitName;
+					}
+				}
+				getFactoryarea({
+					pageNum: 1,
+					size: 1000,
+					type: 3
+				}).then(res => {
+					this.laboratoryList = res.list.map(item => {
+						return {
+							text: item.workshopName,
+							value: item.workshopId
+						}
+					})
+				})
+				this.show = true
+
+
+				// this.init()
+			},
+
+			chooseImage(key) {
+				const _this = this
+				uni.chooseImage({
+					count: 9, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['camera'], //从相册选择
+					success: function(res) {
+						uni.showLoading({
+							title: '加载中'
+						})
+
+						_this.uploadFile(res.tempFilePaths).then(res => {
+							_this.form[key].push(...res)
+							console.log(this.form)
+							// res.forEach(item => {
+							// 	let fileNames = item.storePath.split('/')
+							// 	let url = _this.apiUrl +
+							// 		'/main/file/getFile?objectName=' + item.storePath +
+							// 		'&fullfilename=' + fileNames[fileNames.length -
+							// 			1]
+							// 	_this.imgs.push(url)
+							// })
+							uni.hideLoading()
+
+						})
+
+					}
+				});
+			},
+			uploadFile(list) {
+				let PromiseAll = []
+				const apiUrl = this.apiUrl
+				const token = uni.getStorageSync("token"); //取存本地的token
+				list.forEach(item => {
+					PromiseAll.push(
+						new Promise((resolve, reject) => {
+							uni.uploadFile({
+								url: apiUrl + '/main/file/upload',
+								filePath: item,
+								name: 'multiPartFile',
+								header: {
+									authorization: token
+								},
+								success: (uploadFileRes) => {
+									let data = JSON.parse(uploadFileRes.data)
+									resolve(data.data)
+								}
+							});
+						}),
+					)
+				})
+
+				return Promise.all(PromiseAll)
+
+			},
+			cancel() {
+				this.form = {
+					...defForm
+				}
+				this.show = false;
+			},
+
+			addExperimentEquipmentList() {
+				this.form.experimentEquipmentList.push({});
+			},
+			save() {
+				// if (!this.form.qualityResultContent) {
+				// 	this.$refs.uToast.show({
+				// 		type: "error",
+				// 		icon: false,
+				// 		message: "请填写质检内容!",
+				// 	}, )
+				// 	return
+				// }
+				// if (!this.form.sampleQuantity) {
+				// 	this.$refs.uToast.show({
+				// 		type: "error",
+				// 		icon: false,
+				// 		message: "请填写样品数!",
+				// 	}, )
+				// 	return
+				// }
+				let api = this.form.id ? updateExperiment : saveExperiment
+				api(this.form)
+					.then((msg) => {
+						this.$emit('experimentReportSuccess', {
+							workId: this.form.qualityWorkOrderId,
+							projectId: this.projectData.id,
+						})
+						this.cancel()
+					})
+					.catch((e) => {
+						this.cancel()
+					});
+			},
+
+
+
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mainBox {
+		background-color: #f3f8fb;
+		height: 100vh;
+		font-size: 27rpx;
+		overflow-y: auto;
+	}
+
+	.footerButton {
+		width: 100%;
+		height: 84rpx;
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		z-index: 10;
+		background-color: #fff;
+
+		/deep/.u-button {
+			height: 100%;
+		}
+
+		>view {
+			flex: 1;
+		}
+	}
+
+	/deep/.uni-textarea {
+		padding: 0
+	}
+
+	/deep/.input-value {
+		font-size: 28rpx !important;
+		height: 70rpx
+	}
+
+	.defValue {
+		color: #c1353c;
+		text-indent: 2ch;
+	}
+
+	.marginTop20 {
+		margin-top: 30rpx;
+	}
+
+
+	.herder_item {
+		display: flex;
+
+		font-weight: bold;
+		// font-size: 26rpx;
+
+		.herder_text {
+
+			min-width: 10rpx;
+			height: 32rpx;
+			border-radius: 10rpx;
+			background: #00c0a1;
+			margin-right: 12rpx;
+			margin-top: 5rpx;
+		}
+	}
+
+	.wrapper {
+		width: 720rpx;
+		background: #fff;
+		margin: 20rpx auto 0;
+		border-radius: 30rpx;
+		padding: 26rpx;
+	}
+
+	.experimentP {
+		width: 100%;
+		background-color: #f7f8fa;
+		border-radius: 20rpx;
+		height: 80rpx;
+		justify-content: center;
+		align-items: center;
+		display: flex;
+		font-weight: 800;
+	}
+
+	.imgAdd {
+		width: 160rpx;
+		height: 160rpx;
+		background-color: #f7f8fa;
+		border-radius: 20rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.add {
+		width: 96rpx;
+		height: 96rpx;
+		border-radius: 48rpx;
+		background: #3c9cff;
+		position: absolute;
+		bottom: 50rpx;
+		right: 24rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 26 - 202
pages/qms/inspectionWork/index.vue

@@ -1,233 +1,57 @@
 <template>
-	<view class="mainBox">
-		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="质检工单" @clickLeft="back">
-		</uni-nav-bar>
+	<view>
 
-		<view class="top-wrapper">
-			<uni-section>
-				<uni-easyinput prefixIcon="search" style="width: 460rpx" v-model="searchVal" placeholder="名称、批次号">
-				</uni-easyinput>
-			</uni-section>
-			<button class="search_btn" @click="doSearch">搜索</button>
-		</view>
-		<div style="height:100rpx;width: 475rpx;"></div>
-		<view class="wrapper">
-			<u-list @scrolltolower="scrolltolower" class="listContent">
-				<view v-for="(item, index) in tableList" :key="index+item.id" style="position: relative;">
-					<view class="item">
-						<view class="herder_item">
-							<view class="herder_text"></view>
-							<view class="herder_view">
-								{{ getDictValue('质检计划类型', item.qualityType+'')}}/{{item.code}}/{{item.productCode}}/{{item.productName}}
-							</view>
-						</view>
-						<view class="text">检验项目:</view>
-						<view class="item_value">
-							<view @click="goTo(item.id,row.id)" v-for="(row,_index) in item.templateList"
-								:key="item.inspectionName+index+'_'+_index"
-								:style="{background:row.status==1?'#19be6b':row.status==2?'#ff9900':row.status==3?'#ff9900':'#909399'}">
-								{{row.inspectionName}}
-							</view>
-						</view>
-					</view>
-				</view>
-				<view style="width:100%;height:40rpx"></view>
-				<view style='margin-top: 20vh;' v-if="tableList.length==0">
-					<u-empty iconSize='150' textSize='32' text='暂无数据'>
-					</u-empty>
-				</view>
-			</u-list>
 
-		</view>
-
-
-
-
-		<u-toast ref="uToast"></u-toast>
+		<list ref="listRef"></list>
 
 	</view>
 </template>
 
 <script>
-	import dictMixns from '@/mixins/dictMixins'
-	import {
-		getList,
-	} from '@/api/inspectionWork/index.js'
+	import list from './list.vue'
+
 	export default {
-		components: {},
-		mixins: [dictMixns],
+		components: {
+			list
+		},
+		mixins: [],
 		data() {
 			return {
 
 
-				tableList: [],
-				page: 1,
-				size: 10,
-				isEnd: false,
-				searchVal: ''
+
 
 			}
 		},
 		computed: {
 
 		},
-		onLoad() {
-			this.requestDict('质检计划类型')
-			this.getList()
+		created() {
+			uni.$off('successInit')
+			uni.$on('successInit', (data) => {
+				this.$nextTick(() => {
+					this.$refs.listRef.successInit()
+				})
+			})
 		},
-
-		onShow() {
-			this.isEnd = false
-			this.page = 1
-			this.getList()
+		onUnload() {
+		
+			uni.$off('successInit')
+		
+		},
+		onLoad() {
+			this.$nextTick(() => {
+				this.$refs.listRef.getList()
+			})
 		},
-		methods: {
-			doSearch() {
-				this.isEnd = false
-				this.page = 1
-				this.getList()
-			},
-			//获取列表信息
-			getList() {
-				if (this.isEnd) {
-					return
-				}
-				uni.showLoading({
-					title: '加载中'
-				})
 
-				let data = {
-					pageNum: this.page,
-					size: this.size,
-					partaName: this.searchVal,
-					recordingMethod: 1
-				}
-				getList(data).then(res => {
-					if (this.page === 1) {
-						this.tableList = res.list
-					} else {
-						this.tableList.push(...res.list)
-					}
-					this.page += 1
-					this.isEnd = this.tableList.length >= res.count
-				}).then(() => {
-					uni.hideLoading()
-				})
-			},
-			goTo(workId, projectId) {
 
-				uni.navigateTo({
-					url: '/pages/qms/inspectionWork/inspectionProjectReport?workId='+workId+'&projectId='+projectId
-				})
-			},
+		methods: {
 
-			scrolltolower() {
-				if (this.isEnd) {
-					return
-				}
-				this.getList();
-			},
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
-	.mainBox {
-		background-color: #f3f8fb
-	}
-
-	// .wrapper{
-
-	// }
-	.top-wrapper {
-		background-color: #fff;
-		display: flex;
-		width: 750rpx;
-		height: 88rpx;
-		padding: 16rpx 32rpx;
-		align-items: center;
-		gap: 16rpx;
-		position: fixed;
-		z-index: 999;
-
-		/deep/.uni-section {
-			margin-top: 0px;
-		}
-
-		/deep/.uni-section-header {
-			padding: 0px;
 
-		}
-
-		.search_btn {
-			width: 120rpx;
-			height: 70rpx;
-			line-height: 70rpx;
-			padding: 0 24rpx;
-			background: $theme-color;
-			font-size: 32rpx;
-			color: #fff;
-			margin: 0;
-			margin-left: 26rpx;
-		}
-
-		.menu_icon {
-			width: 44rpx;
-			height: 44rpx;
-			margin-left: 14rpx;
-		}
-	}
-
-	.item {
-		width: 720rpx;
-		// height:400rpx;
-		margin: 20rpx auto 0;
-		padding: 26rpx;
-		border-radius: 30rpx;
-
-		.text {
-			margin-top: 20rpx;
-		}
-
-		background: #fff;
-	}
-
-	.item_value {
-		width: 100%;
-		display: flex;
-		flex-wrap: wrap;
-		margin-left: -10rpx;
-
-		>view {
-			font-size: 24rpx;
-			color: #fff;
-			padding: 12rpx;
-			border-radius: 10rpx;
-			background: #979797;
-			margin-left: 10rpx;
-			margin-top: 20rpx;
-		}
-	}
-
-	.herder_item {
-		display: flex;
-		// align-items: center;
-		font-size: 28rpx;
-		font-weight: bold;
-
-		.herder_view {
-			width: calc(100% - 20rpx);
-			word-break: break-all;
-
-		}
-
-		.herder_text {
-			min-width: 10rpx;
-			height: 32rpx;
-			border-radius: 10rpx;
-			background: #00c0a1;
-			margin-right: 12rpx;
-			margin-top: 5rpx;
-		}
-	}
 </style>

+ 121 - 35
pages/qms/inspectionWork/inspectionProjectReport.vue

@@ -33,15 +33,36 @@
 				</view>
 			</view>
 			<view class="marginTop20 defValue">
-				{{form.defaultValue}}
+				<text>{{ form.symbol }}</text>
+				<text v-if="form.textType == 3">
+					{{ form.minValue }}-{{ form.maxValue }}
+				</text>
+
+				<text v-else>
+					<text>{{ form.defaultValue }}</text>
+				</text>
+
+				{{ form.unitName }}
 			</view>
-			<view class="herder_item marginTop20">
+			<view class="herder_item marginTop20" v-if="form.executionMethod==2">
+				<view class="herder_text"></view>
+				<view class="herder_view">
+					实验数据
+				</view>
+			</view>
+			<view class="marginTop20" v-if="form.executionMethod==2">
+				<view style="width:150rpx">
+					<u-button style="width:100rpx" type="primary" @click="open"
+						:text="type=='edit'?'编辑':'查看'"></u-button>
+				</view>
+			</view>
+			<view class="herder_item marginTop20" v-if="type=='edit'">
 				<view class="herder_text"></view>
 				<view class="herder_view">
 					工单剩余样品数
 				</view>
 			</view>
-			<view class="marginTop20 ">
+			<view class="marginTop20 " v-if="type=='edit'">
 				<u-input disabled class="marginTop20" placeholder=" " border="surround"
 					v-model="workData.remainingSampleCount">
 					<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}
@@ -54,8 +75,8 @@
 					质检内容
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' @change="handleInput(form, form.qualityResultContent)"
-				class="marginTop20" placeholder="请输入内容" border="surround" v-model="form.qualityResultContent">
+			<u-input :disabled='type=="view"' @change="handleInput(form, form.qualityResultContent)" class="marginTop20"
+				placeholder="请输入内容" border="surround" v-model="form.qualityResultContent">
 				<template slot="suffix" v-if="form.unitName">{{form.unitName}}</template>
 			</u-input>
 			<view class="herder_item marginTop20">
@@ -64,7 +85,7 @@
 					样品数
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' @change="inputValue('sampleQuantity')" type="number" class="marginTop20"
+			<u-input :disabled='type=="view"' @change="inputValue('sampleQuantity')" type="number" class="marginTop20"
 				placeholder="请输入内容" border="surround" v-model="form.sampleQuantity">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -74,7 +95,7 @@
 					合格数
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' type="number" @change="inputValue('qualifiedQuantity')"
+			<u-input :disabled='type=="view"' type="number" @change="inputValue('qualifiedQuantity')"
 				class="marginTop20" placeholder="请输入内容" border="surround" v-model="form.qualifiedQuantity">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -84,7 +105,7 @@
 					不合格数
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' type="number" @change="inputValue('noQualifiedQuantity')"
+			<u-input :disabled='type=="view"' type="number" @change="inputValue('noQualifiedQuantity')"
 				class="marginTop20" placeholder="请输入内容" border="surround" v-model="form.noQualifiedQuantity">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -94,7 +115,7 @@
 					损耗数(合格品)
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' @change="inputValue('lossNumber')" type="number" class="marginTop20"
+			<u-input :disabled='type=="view"' @change="inputValue('lossNumber')" type="number" class="marginTop20"
 				placeholder="请输入内容" border="surround" v-model="form.lossNumber">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -104,7 +125,7 @@
 					损耗数(不合格品)
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' @change="inputValue('lossNumberUnqualified')" type="number"
+			<u-input :disabled='type=="view"' @change="inputValue('lossNumberUnqualified')" type="number"
 				class="marginTop20" placeholder="请输入内容" border="surround" v-model="form.lossNumberUnqualified">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -114,7 +135,7 @@
 					留样数(合格品)
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' @change="inputValue('retainedSampleQuantity')" type="number"
+			<u-input :disabled='type=="view"' @change="inputValue('retainedSampleQuantity')" type="number"
 				class="marginTop20" placeholder="请输入内容" border="surround" v-model="form.retainedSampleQuantity">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -124,7 +145,7 @@
 					留样数(不合格品)
 				</view>
 			</view>
-			<u-input :disabled='form.status==1' type="number" @change="inputValue('retainedSampleUnqualified')"
+			<u-input :disabled='type=="view"' type="number" @change="inputValue('retainedSampleUnqualified')"
 				class="marginTop20" placeholder="请输入内容" border="surround" v-model="form.retainedSampleUnqualified">
 				<template slot="suffix" v-if="form.measureUnit">{{form.measureUnit}}</template>
 			</u-input>
@@ -134,50 +155,61 @@
 					质检结果
 				</view>
 			</view>
-			<uni-data-picker v-if='form.status!=1' class="marginTop20" v-model="form.qualityResults" placeholder="请选择"
+			<uni-data-picker v-if="type=='edit'" class="marginTop20" v-model="form.qualityResults" placeholder="请选择"
 				:localdata="acceptUnpackList">
 			</uni-data-picker>
 			<u-input disabled v-else class="marginTop20" placeholder="请输入内容" border="surround"
-				:value="acceptUnpackList.find(item=>item.value==form.qualityResults).text">
+				:value="form.qualityResults&&acceptUnpackList.find(item=>item.value==form.qualityResults).text">
 			</u-input>
 
 		</view>
 
 		<view class="footerButton">
 			<u-button type="default" text="返回" @click="back"></u-button>
-			<u-button v-if="form.status!=1" type="primary" @click="exeReportWorkBySingleTemplate" text="保存"></u-button>
+			<u-button v-if="type=='edit'" type="primary" @click="exeReportWorkBySingleTemplate" text="保存"></u-button>
 		</view>
 		<view style="width:100%;height: 100rpx;"></view>
 		<u-toast ref="uToast"></u-toast>
+		<experimentReport ref="experimentReportRef" @success="experimentReportSuccess" :type="type"></experimentReport>
 
 	</view>
 </template>
 
 <script>
 	import dictMixns from '@/mixins/dictMixins'
+	import experimentReport from './experimentReport.vue'
 	import {
 		getById,
-		exeReportWorkBySingleTemplate
+		exeReportWorkBySingleTemplate,
+		exeReportWorkBySingleTaskmonad,
+		exeReportWorkBySingleRequestentrust,
+		getRequestentrustById,
+		getTaskmonadById,
+		verificationQualityInspector
 	} from '@/api/inspectionWork/index.js'
 	import {
 		handleInput
 	} from './unit.js';
 
 	export default {
-		components: {},
+		components: {
+			experimentReport
+		},
 		mixins: [dictMixns],
 		data() {
 			return {
 				handleInput,
 				show: false,
+				type: 'edit',
 				form: {
 					lossNumber: '',
 					lossNumberUnqualified: '',
 					retainedSampleQuantity: '',
 					retainedSampleUnqualified: '',
-					qualifiedQuantity:'',
-					noQualifiedQuantity:'',
-					sampleQuantity:'',
+					qualifiedQuantity: '',
+					noQualifiedQuantity: '',
+					sampleQuantity: '',
+					experimentId: ''
 				},
 				acceptUnpackList: [{
 						text: "合格",
@@ -191,6 +223,7 @@
 						value: 3
 					},
 				],
+				pageName: '',
 
 				workData: {}
 			}
@@ -202,13 +235,9 @@
 			this.requestDict('质检计划类型');
 			this.requestDict('取样类型');
 			this.requestDict('质检标准类型');
+			this.pageName = data.pageName
 			if (data) {
-				getById(data.workId).then(res => {
-					this.workData = res
-					this.$set(this,'form',res.templateList.find(item => item.id == data.projectId))
-					this.form.measureUnit = res.qualitySampleList[0]?.measureUnit
-
-				})
+				this.init(data)
 			}
 
 		},
@@ -217,12 +246,51 @@
 
 		},
 		methods: {
+			init(data) {
+				let api = this.pageName == 'myInspectionProjectTask' ? getTaskmonadById : this.pageName ==
+					'myInspectionProjectEntrusted' ? getRequestentrustById : getById
+				api(data.workId).then(res => {
+					this.workData = res
+					this.$set(this, 'form', res.templateList.find(item => item.id == data.projectId))
+					if (this.pageName == 'myInspectionProjectTask' && this.form.status == 2) {
+						this.type = 'edit'
+					}
+					if (this.pageName == 'myInspectionProjectEntrusted' && this.form.status == 3) {
+						this.type = 'edit'
+					}
+					if (this.form.status == 0) {
+						this.type = 'edit'
+					}
+
+					this.form.measureUnit = data.sampleMeasureUnit || res.qualitySampleList[0]?.measureUnit
+
+				})
+			},
+			experimentReportSuccess(data) {
+				let api = this.pageName == 'myInspectionProjectTask' ? getTaskmonadById : this.pageName ==
+					'myInspectionProjectEntrusted' ? getRequestentrustById : getById
+				api(data.workId).then(res => {
+
+					this.$set(this.form, 'experimentId', res.templateList.find(item => item.id == data.projectId)
+						?.experimentId)
+
+				})
+			},
+			open() {
+				this.$refs.experimentReportRef.open({
+					...this.form,
+					qualityWorkOrderId: this.workData.id
+				}, 'add')
+			},
+
+			async exeReportWorkBySingleTemplate() {
+				if (!this.pageName) {
+					const code = await verificationQualityInspector(this.workData.id);
+					if (code == '-1') {
+						return;
+					}
+				}
 
-			exeReportWorkBySingleTemplate() {
-				// let params = JSON.parse(JSON.stringify(this.workData))
-				// let index = params.templateList.findIndex(item => item.id == this.form.id)
-				// params.templateList[index] = this.form
-				// params.
 				if (!this.form.qualityResultContent) {
 					this.$refs.uToast.show({
 						type: "error",
@@ -240,11 +308,26 @@
 					return
 				}
 				this.form.status = 1
-				exeReportWorkBySingleTemplate({
-						id: this.workData.id,
-						planTemplateList: [this.form]
-					})
+				let data = {
+					id: this.workData.id,
+
+				}
+				let api = exeReportWorkBySingleTemplate
+
+				if (this.pageName == 'myInspectionProjectTask') {
+					api = exeReportWorkBySingleTaskmonad
+					data.templateList = [this.form]
+				} else if (this.pageName == "myInspectionProjectEntrusted") {
+					api = exeReportWorkBySingleRequestentrust
+					data.templateList = [this.form]
+				} else {
+					data.planTemplateList = [this.form]
+				}
+
+
+				api(data)
 					.then((msg) => {
+						uni.$emit('successInit')
 						this.back()
 					})
 					.catch((e) => {
@@ -259,6 +342,9 @@
 			},
 
 			inputValue(type) {
+				if (this.type == 'view') {
+					return
+				}
 				let data = JSON.parse(JSON.stringify((this.form)))
 				if (data[type] < 0) {
 					data[type] = '';

+ 284 - 0
pages/qms/inspectionWork/list.vue

@@ -0,0 +1,284 @@
+<template>
+	<view class="mainBox">
+
+
+		<view class="wrapper">
+
+
+			<u-list @scrolltolower="scrolltolower" class="listContent">
+				<uni-nav-bar fixed="true" statusBar="true" left-icon="back"
+					:title="pageName=='myList'?'我的质检工单':pageName=='myInspectionProjectTask'?'我的质检任务单':pageName=='myInspectionProjectEntrusted'?'我的质检受托单':'质检工单'"
+					@clickLeft="back">
+				</uni-nav-bar>
+				<view class="top-wrapper">
+
+					<uni-section>
+						<uni-easyinput prefixIcon="search" style="width: 460rpx" v-model="keyWord" placeholder="名称、批次号">
+						</uni-easyinput>
+					</uni-section>
+					<button class="search_btn" @click="doSearch">搜索</button>
+				</view>
+				<div style="height:100rpx;width: 475rpx;"></div>
+				<view v-for="(item, index) in tableList" :key="index+item.id" style="position: relative;">
+					<view class="item">
+						<view class="herder_item">
+							<view class="herder_text"></view>
+							<view class="herder_view">
+								{{ getDictValue('质检计划类型', item.qualityType+'')}}/{{item.code}}/{{item.productCode}}/{{item.productName}}
+							</view>
+						</view>
+						<view class="text">检验项目:</view>
+						<view class="item_value">
+							<view @click="goTo(item.id,row.id,item.sampleMeasureUnit)"
+								v-for="(row,_index) in item.templateList" :key="item.inspectionName+index+'_'+_index"
+								:style="{background:row.status==1?'#19be6b':row.status==2?'#ff9900':row.status==3?'#ff9900':'#909399'}">
+								{{row.inspectionName}}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view style="width:100%;height:40rpx"></view>
+				<view style='margin-top: 20vh;' v-if="tableList.length==0">
+					<u-empty iconSize='150' textSize='32' text='暂无数据'>
+					</u-empty>
+				</view>
+			</u-list>
+
+		</view>
+
+
+
+
+		<u-toast ref="uToast"></u-toast>
+
+	</view>
+</template>
+
+<script>
+	import dictMixns from '@/mixins/dictMixins'
+	import {
+		getList,
+		getRequestentrustList,
+		getTaskmonadList
+	} from '@/api/inspectionWork/index.js'
+	export default {
+		components: {},
+		mixins: [dictMixns],
+		props: {
+			pageName: {
+				default: ""
+			}
+		},
+		data() {
+			return {
+
+
+				tableList: [],
+				page: 1,
+				size: 10,
+				isEnd: false,
+				keyWord: '',
+				userInfo: {}
+
+			}
+		},
+		computed: {
+
+		},
+		created() {
+			this.requestDict('质检计划类型')
+		
+		},
+	
+		methods: {
+			successInit() {
+				uni.showLoading({
+					title: '加载中'
+				})
+
+				let data = {
+					pageNum: 1,
+					size: this.tableList.length,
+					keyWord: this.keyWord,
+					recordingMethod: 1,
+				}
+				if (this.pageName) {
+					data.currentLoginUserId = this.userInfo.userId
+				}
+				if (this.pageName == 'myInspectionProjectEntrusted') {
+					data.approvalStatus = 2
+				}
+				let api = this.pageName == 'myInspectionProjectTask' ? getTaskmonadList : this.pageName ==
+					'myInspectionProjectEntrusted' ? getRequestentrustList : getList
+				api(data).then(res => {
+					this.tableList = res.list
+				}).then(() => {
+					uni.hideLoading()
+				})
+
+			},
+			doSearch() {
+				this.isEnd = false
+				this.page = 1
+				this.getList()
+			},
+			//获取列表信息
+			getList() {
+				this.userInfo = uni.getStorageSync('userInfo')
+				if (this.isEnd || !this.userInfo.userId) {
+					return
+				}
+				uni.showLoading({
+					title: '加载中'
+				})
+
+				let data = {
+					pageNum: this.page,
+					size: this.size,
+					keyWord: this.keyWord,
+					recordingMethod: 1,
+
+				}
+				if (this.pageName) {
+					data.currentLoginUserId = this.userInfo.userId
+				}
+				if (this.pageName == 'myInspectionProjectEntrusted') {
+					data.approvalStatus = 2
+				}
+				let api = this.pageName == 'myInspectionProjectTask' ? getTaskmonadList : this.pageName ==
+					'myInspectionProjectEntrusted' ? getRequestentrustList : getList
+
+				api(data).then(res => {
+					if (this.page === 1) {
+						this.tableList = res.list
+					} else {
+						this.tableList.push(...res.list)
+					}
+					this.page += 1
+					this.isEnd = this.tableList.length >= res.count
+				}).then(() => {
+					uni.hideLoading()
+				})
+			},
+			goTo(workId, projectId, sampleMeasureUnit) {
+
+				uni.navigateTo({
+					url: '/pages/qms/inspectionWork/inspectionProjectReport?workId=' + workId + '&projectId=' +
+						projectId + '&pageName=' + this.pageName + '&sampleMeasureUnit=' + sampleMeasureUnit
+				})
+			},
+
+			scrolltolower() {
+				if (this.isEnd) {
+					return
+				}
+				this.getList();
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mainBox {
+		background-color: #f3f8fb
+	}
+
+	// .wrapper{
+
+	// }
+	.top-wrapper {
+		background-color: #fff;
+		display: flex;
+		width: 750rpx;
+		height: 88rpx;
+		padding: 16rpx 32rpx;
+		align-items: center;
+		// gap: 16rpx;
+		position: fixed;
+		z-index: 999;
+		top: 88rpx;
+		// #ifdef APP-PLUS
+		top: 140rpx;
+
+		// #endif
+		/deep/.uni-section {
+			margin-top: 0px;
+		}
+
+		/deep/.uni-section-header {
+			padding: 0px;
+
+		}
+
+		.search_btn {
+			width: 120rpx;
+			height: 70rpx;
+			line-height: 70rpx;
+			padding: 0 24rpx;
+			background: $theme-color;
+			font-size: 32rpx;
+			color: #fff;
+			margin: 0;
+			margin-left: 26rpx;
+		}
+
+		.menu_icon {
+			width: 44rpx;
+			height: 44rpx;
+			margin-left: 14rpx;
+		}
+	}
+
+	.item {
+		width: 720rpx;
+		// height:400rpx;
+		margin: 20rpx auto 0;
+		padding: 26rpx;
+		border-radius: 30rpx;
+
+		.text {
+			margin-top: 20rpx;
+		}
+
+		background: #fff;
+	}
+
+	.item_value {
+		width: 100%;
+		display: flex;
+		flex-wrap: wrap;
+		margin-left: -10rpx;
+
+		>view {
+			font-size: 24rpx;
+			color: #fff;
+			padding: 12rpx;
+			border-radius: 10rpx;
+			background: #979797;
+			margin-left: 10rpx;
+			margin-top: 20rpx;
+		}
+	}
+
+	.herder_item {
+		display: flex;
+		// align-items: center;
+		font-size: 28rpx;
+		font-weight: bold;
+
+		.herder_view {
+			width: calc(100% - 20rpx);
+			word-break: break-all;
+
+		}
+
+		.herder_text {
+			min-width: 10rpx;
+			height: 32rpx;
+			border-radius: 10rpx;
+			background: #00c0a1;
+			margin-right: 12rpx;
+			margin-top: 5rpx;
+		}
+	}
+</style>

+ 57 - 0
pages/qms/inspectionWork/myInspectionProjectEntrusted.vue

@@ -0,0 +1,57 @@
+<template>
+	<view>
+
+
+		<list pageName="myInspectionProjectEntrusted" ref="listRef"></list>
+
+	</view>
+</template>
+
+<script>
+	import list from './list.vue'
+
+	export default {
+		components: {
+			list
+		},
+		mixins: [],
+		data() {
+			return {
+
+
+
+
+			}
+		},
+		computed: {
+
+		},
+		created() {
+			uni.$off('successInit')
+			uni.$on('successInit', (data) => {
+				this.$nextTick(() => {
+					this.$refs.listRef.successInit()
+				})
+			})
+		},
+		onUnload() {
+
+			uni.$off('successInit')
+
+		},
+		onLoad() {
+			this.$nextTick(() => {
+				this.$refs.listRef.getList()
+			})
+		},
+
+
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 59 - 0
pages/qms/inspectionWork/myInspectionProjectTask.vue

@@ -0,0 +1,59 @@
+<template>
+	<view>
+
+
+		<list pageName="myInspectionProjectTask" ref="listRef"></list>
+
+	</view>
+</template>
+
+<script>
+	import list from './list.vue'
+
+	export default {
+		components: {
+			list
+		},
+		mixins: [],
+		data() {
+			return {
+
+
+
+
+			}
+		},
+		computed: {
+
+		},
+		created() {
+			uni.$off('successInit')
+			uni.$on('successInit', (data) => {
+				this.$nextTick(() => {
+					this.$refs.listRef.successInit()
+				})
+			})
+		},
+		onUnload() {
+		
+			uni.$off('successInit')
+		
+		},
+		onLoad(data) {
+			this.$nextTick(() => {
+				this.$refs.listRef.getList()
+
+			})
+		},
+
+
+
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 58 - 0
pages/qms/inspectionWork/myList.vue

@@ -0,0 +1,58 @@
+<template>
+	<view>
+
+
+		<list pageName="myList" ref="listRef"></list>
+
+	</view>
+</template>
+
+<script>
+	import list from './list.vue'
+
+	export default {
+		components: {
+			list
+		},
+		mixins: [],
+		data() {
+			return {
+
+
+
+
+			}
+		},
+		computed: {
+
+		},
+		created() {
+			uni.$off('successInit')
+			uni.$on('successInit', (data) => {
+				this.$nextTick(() => {
+					this.$refs.listRef.successInit()
+				})
+			})
+		},
+		onUnload() {
+
+			uni.$off('successInit')
+
+		},
+		onLoad() {
+			this.$nextTick(() => {
+				this.$refs.listRef.getList()
+			})
+		},
+		onShow() {
+
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>