6 files modified
3 files added
| New file |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | export function getSales(params) { |
| | | return request({ |
| | | url: '/market/sales/list', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function addSales(data) { |
| | | return request({ |
| | | url: '/market/sales/insert', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function editSales(params) { |
| | | return request({ |
| | | url: `/market/sales/update`, |
| | | method: 'post', |
| | | data: params |
| | | }) |
| | | } |
| | | |
| | | export function delSales(data) { |
| | | return request({ |
| | | url: `/market/sales/deleted?salesId=${data}`, |
| | | method: 'get' |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | export function getContractReview(params) { |
| | | return request({ |
| | | url: '/market/review/list', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function addContractReview(data) { |
| | | return request({ |
| | | url: '/market/review/insert', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function editContractReview(params) { |
| | | return request({ |
| | | url: `/market/review/update`, |
| | | method: 'post', |
| | | data: params |
| | | }) |
| | | } |
| | | |
| | | export function delContractReview(data) { |
| | | return request({ |
| | | url: `/market/review/deleted?reviewId=${data}`, |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="记录名称:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="记录名称"></el-input> |
| | | <el-form-item label="记录名称:" prop="recordName" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.recordName" placeholder="记录名称"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="编号:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="编号"></el-input> |
| | | <el-form-item label="编号:" prop="number" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.number" placeholder="编号"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="客户名称:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="客户单位/姓名"></el-input> |
| | | <el-form-item label="客户名称:" prop="clientName" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.clientName" placeholder="客户名称"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="服务时间:" prop="year" > |
| | | <el-form-item label="服务时间:" prop="serverTime" > |
| | | <el-date-picker |
| | | v-model="state.form.fictionTime" |
| | | v-model="state.form.serverTime" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="请选择服务时间" |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="地址:" prop="year" > |
| | | <el-input :disabled="title === '查看'" type="textarea" v-model="state.form.name" placeholder="地址"></el-input> |
| | | <el-form-item label="地址:" prop="addr" > |
| | | <el-input :disabled="title === '查看'" type="textarea" v-model="state.form.addr" placeholder="地址"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系人:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="联系人"></el-input> |
| | | <el-form-item label="联系人:" prop="person" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.person" placeholder="联系人"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系电话:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="联系电话"></el-input> |
| | | <el-form-item label="联系电话:" prop="phone" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.phone" placeholder="联系电话"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="本次服务内容:" prop="year" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="本次服务内容:" prop="serverMess" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.serverMess" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="对客户的使用建议:" prop="year" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="对客户的使用建议:" prop="suggest" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.suggest" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24" style="margin-top: 10px"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="服务人员:" prop="year" > |
| | | <el-select clearable v-model="state.form.fictionId" :disabled="state.title =='查看'" filterable placeholder="" style="width: 100%"> |
| | | <el-form-item label="服务人员:" prop="personId" > |
| | | <el-select clearable v-model="state.form.personId" :disabled="state.title =='查看'" filterable placeholder="" style="width: 100%"> |
| | | <el-option |
| | | v-for="item in state.peopleList" |
| | | :key="item.id" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系电话:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="联系电话"></el-input> |
| | | <el-form-item label="联系电话:" prop="serverPhone" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.serverPhone" placeholder="联系电话"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="您对本次服务的评价:" prop="year" > |
| | | <el-radio-group v-model="state.form.type"> |
| | | <el-form-item label="您对本次服务的评价:" prop="serverEvlauate" > |
| | | <el-radio-group v-model="state.form.serverEvlauate"> |
| | | <el-radio :label="1">非常满意</el-radio> |
| | | <el-radio :label="2">满意</el-radio> |
| | | <el-radio :label="3">不满意</el-radio> |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="您对本公司产品质量的意见:" prop="year" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="您对本公司产品质量的意见:" prop="opinion" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.opinion" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="客户:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="客户:" prop="custom" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.custom" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object"; |
| | | import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table"; |
| | | import {addNeedDiscren, editNeedDiscren} from "@/api/need/need"; |
| | | import {addSales, editSales} from "@/api/afterSales"; |
| | | import {verifyPhone} from "@/utils/validate"; |
| | | |
| | | const dialogVisible = ref(false); |
| | | const title = ref(""); |
| | |
| | | const selectPopperClass = "max-width-select"; |
| | | const emit = defineEmits(["getList"]); |
| | | const dataRef = ref(); |
| | | const validatePhone = (rule, value, callback)=>{ |
| | | if(value === ''){ |
| | | callback(new Error('请输入手机号')) |
| | | }else{ |
| | | if(!verifyPhone(value)){ |
| | | callback(new Error('手机号格式有误')) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | const state = reactive({ |
| | | form: { |
| | | id: '', |
| | | companyId: null, |
| | | deptId: null, |
| | | year: '', |
| | | fictionId: null, |
| | | checkId: null, |
| | | ratifyId: null, |
| | | fictionTime: null, |
| | | frequency: '', |
| | | expectContents:[], |
| | | recordName: "", |
| | | number: "", |
| | | clientName: "", |
| | | serverTime: "", |
| | | addr: "", |
| | | person: "", |
| | | phone: "", |
| | | serverMess: "", |
| | | suggest: "", |
| | | personId: null, |
| | | serverPhone: "", |
| | | serverEvlauate: null, |
| | | opinion: "", |
| | | custom: "" |
| | | }, |
| | | rules: { |
| | | companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], |
| | | deptId: [{ required: true, message: '请选择部门', trigger: 'blur' }], |
| | | year: [{ required: true, message: '请选择年份', trigger: 'blur' }], |
| | | fictionId: [{ required: true, message: '请选择编制人', trigger: 'blur' }], |
| | | ratifyId: [{ required: true, message: '请选择批准人', trigger: 'blur' }], |
| | | checkId: [{ required: true, message: '请选择审核人', trigger: 'blur' }], |
| | | fictionTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], |
| | | frequency: [{ required: true, message: '请输入监测频率', trigger: 'blur' }], |
| | | stakeholder: [{required: true, message: "", trigger: "blur"}], |
| | | expectation: [{required: true, message: "", trigger: "blur"}], |
| | | solutions: [{required: true, message: "", trigger: "blur"}], |
| | | expectContents:[{ required: true, message: '请填写相关方期望或要求识别表', trigger: 'blur' }], |
| | | recordName: [{ required: true, message: '请输入记录名称', trigger: 'blur' }], |
| | | number: [{ required: true, message: '请输入编号', trigger: 'blur' }], |
| | | clientName: [{ required: true, message: '请输入客户名称', trigger: 'blur' }], |
| | | serverTime: [{ required: true, message: '请选择服务时间', trigger: 'blur' }], |
| | | addr: [{ required: true, message: '请输入地址', trigger: 'blur' }], |
| | | person: [{ required: true, message: '请输入联系人', trigger: 'blur' }], |
| | | phone: [{ required: true, validator: validatePhone, trigger: 'blur' }], |
| | | serverMess: [{ required: true, message: '请输入服务内容', trigger: 'blur' }], |
| | | suggest: [{ required: true, message: '请输入客户建议', trigger: 'blur' }], |
| | | personId: [{ required: true, message: '请选择服务人员', trigger: 'blur' }], |
| | | serverPhone: [{ required: true, validator: validatePhone, trigger: 'blur' }], |
| | | serverEvlauate: [{ required: true, message: '请选择服务评价', trigger: 'blur' }], |
| | | opinion: [{ required: true, message: '请输入意见', trigger: 'blur' }], |
| | | custom: [{ required: true, message: '请输客户入', trigger: 'blur' }], |
| | | }, |
| | | peopleList: [], |
| | | isAdmin: false, |
| | | companyList: [], |
| | | deptList: [], |
| | | checkMethodList: [], |
| | | methodsList: [ |
| | | { |
| | | id: 1, |
| | | name: '面谈' |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '面谈' |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '信函' |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '邮件' |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '其他:' |
| | | }, |
| | | ], |
| | | checkTypeList: [], |
| | | typeList: [ |
| | | { |
| | | id: 1, |
| | | name: '建议' |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '咨询' |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '反馈' |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '抱怨' |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '其他:' |
| | | }, |
| | | ] |
| | | }) |
| | | |
| | | onMounted(() => { |
| | |
| | | state.form.companyId = value.companyId |
| | | state.form.companyName = value.companyName |
| | | } |
| | | state.form.serverEvlauate = Number(state.form.serverEvlauate) |
| | | } |
| | | await getDeptList() |
| | | await getPeopleList() |
| | | dialogVisible.value = true; |
| | | } |
| | |
| | | const valid = await busRef.value.validate(); |
| | | if(valid){ |
| | | if(title.value === '新增'){ |
| | | // console.log('sta',state.form) |
| | | // const {id, ...data} = JSON.parse(JSON.stringify(state.form)) |
| | | // const res = await addNeedDiscren(data) |
| | | // if(res.code === 200){ |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // message: '新增成功' |
| | | // }); |
| | | // }else{ |
| | | // ElMessage.warning(res.message) |
| | | // } |
| | | // emit("getList") |
| | | // busRef.value.clearValidate(); |
| | | // reset(); |
| | | // dialogVisible.value = false; |
| | | console.log('sta',state.form) |
| | | const {id, ...data} = JSON.parse(JSON.stringify(state.form)) |
| | | const res = await addSales(data) |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | }); |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | emit("getList") |
| | | busRef.value.clearValidate(); |
| | | reset(); |
| | | dialogVisible.value = false; |
| | | }else if(title.value === '编辑'){ |
| | | const {...data} = JSON.parse(JSON.stringify(state.form)) |
| | | const res = await editNeedDiscren(data) |
| | | const res = await editSales(data) |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | |
| | | } |
| | | } |
| | | } |
| | | const getDeptList = async () => { |
| | | if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ |
| | | return |
| | | } |
| | | const param = { |
| | | pageNum: 1, |
| | | pageSize: 999, |
| | | companyId: state.form.companyId |
| | | } |
| | | const res = await getDept(param) |
| | | if(res.code === 200){ |
| | | state.deptList = res.data |
| | | } |
| | | } |
| | | |
| | | const getPeopleList = async ()=> { |
| | | if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ |
| | | return |
| | |
| | | state.form = { |
| | | id: '', |
| | | companyId: null, |
| | | deptId: null, |
| | | year: '', |
| | | fictionId: null, |
| | | checkId: null, |
| | | ratifyId: null, |
| | | fictionTime: null, |
| | | frequency: '', |
| | | expectContents:[], |
| | | recordName: "", |
| | | number: "", |
| | | clientName: "", |
| | | serverTime: "", |
| | | addr: "", |
| | | person: "", |
| | | phone: "", |
| | | serverMess: "", |
| | | suggest: "", |
| | | personId: null, |
| | | serverPhone: "", |
| | | serverEvlauate: null, |
| | | opinion: "", |
| | | custom: "" |
| | | } |
| | | state.companyList = [] |
| | | } |
| | | |
| | | |
| | | const changeCheck = (type) => { |
| | | switch (type) { |
| | | case 'type': state.form.qualification = state.checkTypeList.join(','); if(!state.checkTypeList.includes(8))state.form.otherQualifi = '' ;break; |
| | | case 'method': state.form.product = state.checkMethodList.join(',');if(!state.checkMethodList.includes(5))state.form.otherProduct = ''; break; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | const selectValueCom = (val) => { |
| | | state.form.fictionId = null |
| | | state.form.checkId = null |
| | | state.form.ratifyId = null |
| | | state.form.deptId = null |
| | | state.form.personId = null |
| | | state.companyList.forEach(item => { |
| | | if(item.name === val){ |
| | | state.form.companyId = item.id |
| | | } |
| | | }) |
| | | getDeptList() |
| | | getPeopleList() |
| | | } |
| | | |
| | | |
| | | const addTableData = () => { |
| | | state.form.expectContents.push({expectContentMesses: [{}]}) |
| | | } |
| | | const addObject = (val,itemIndex) => { |
| | | state.form.expectContents.forEach((item,index) => { |
| | | if(index == itemIndex){ |
| | | item.expectContentMesses.push({}) |
| | | } |
| | | }) |
| | | } |
| | | const delObject = (val,itemIndex) => { |
| | | state.form.expectContents.forEach((item,index) => { |
| | | if(index == itemIndex){ |
| | | if(item.expectContentMesses.length == 1){ |
| | | state.form.expectContents.splice(index,1) |
| | | }else { |
| | | item.expectContentMesses.pop() |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | defineExpose({ |
| | | openDialog |
| | | }); |
| | |
| | | <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" /> |
| | | <el-table-column type="index" label="序号" width="80" align="center"></el-table-column> |
| | | <el-table-column label="售后服务记录" prop="name" align="center"> |
| | | </el-table-column> |
| | | <el-table-column label="售后服务记录" prop="recordName" align="center"></el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button> |
| | |
| | | import {generateWordDocument} from "@/utils/exportWord"; |
| | | import {delTable, getTable} from "@/api/qualityObjectives/table"; |
| | | import {delNeedDiscren, getNeedDiscren} from "@/api/need/need"; |
| | | import {delSales, getSales} from "@/api/afterSales"; |
| | | import moment from "moment"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const loading = ref(false); |
| | | const noticeRef = ref(); |
| | |
| | | } |
| | | }); |
| | | const getList = async () => { |
| | | // loading.value = true; |
| | | // const res = await getNeedDiscren(data.queryParams); |
| | | // if(res.code === 200){ |
| | | // dataList.value = res.data.list |
| | | // total.value = res.data.total |
| | | // }else{ |
| | | // ElMessage.warning(res.message) |
| | | // } |
| | | // loading.value = false; |
| | | dataList.value = [{}] |
| | | loading.value = true; |
| | | const res = await getSales(data.queryParams); |
| | | if(res.code === 200){ |
| | | dataList.value = res.data.list |
| | | total.value = res.data.total |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | loading.value = false; |
| | | } |
| | | |
| | | const searchClick = () => { |
| | |
| | | const startGeneration = async () => { |
| | | const data = JSON.parse(JSON.stringify(choosedData.value)) |
| | | data.forEach(item => { |
| | | const momentDate = moment(item.serverTime, "YYYY-M-D"); |
| | | item.serverTime = momentDate.format("YYYY年MM月DD日") |
| | | item.typeList = [ |
| | | { |
| | | id:1, |
| | | name: '非常满意', |
| | | checked: item.serverEvlauate == 1 |
| | | }, |
| | | { |
| | | id:2, |
| | | name: '满意', |
| | | checked: item.serverEvlauate == 2 |
| | | }, |
| | | { |
| | | id:3, |
| | | name: '不满意', |
| | | checked: item.serverEvlauate == 3 |
| | | }, |
| | | ] |
| | | |
| | | |
| | | console.log('xxx',item.tableData) |
| | | try { |
| | | generateWordDocument(templatePath.value, item, item.companyName + `_售后服务卡.docx`); |
| | | } catch (error){ |
| | |
| | | type: 'warning', |
| | | }) |
| | | .then( async() => { |
| | | const res = await delNeedDiscren(val.id); |
| | | const res = await delSales(val.id); |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="评审类型:" prop="year" > |
| | | <el-form-item label="评审类型:" prop="type" > |
| | | <el-select clearable v-model="state.form.type" :disabled="title =='查看'" filterable> |
| | | <el-option |
| | | v-for="item in state.typeList" |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="合同:" prop="year" > |
| | | <el-form-item label="合同:" prop="contractId" > |
| | | <el-select clearable v-model="state.form.contractId" :disabled="title =='查看'" filterable> |
| | | <el-option |
| | | v-for="item in state.contractList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :label="item.contractName" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="记录日期:" prop="year" > |
| | | <el-form-item label="记录日期:" prop="recordTime" > |
| | | <el-date-picker |
| | | v-model="state.form.fictionTime" |
| | | :disabled="title =='查看'" |
| | | v-model="state.form.recordTime" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="请选择记录日期" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="记录人:" prop="year"> |
| | | <el-select clearable v-model="state.form.personId" :disabled="title =='查看'" filterable style="width: 240px;margin-bottom: 5px"> |
| | | <el-form-item label="记录人:" prop="registrantId"> |
| | | <el-select clearable v-model="state.form.registrantId" :disabled="title =='查看'" filterable style="width: 240px;margin-bottom: 5px"> |
| | | <el-option |
| | | v-for="item in state.peopleList" |
| | | :key="item.id" |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="8"> |
| | | <el-form-item label="名称:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="名称"></el-input> |
| | | <el-form-item label="名称:" prop="customerName" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.customerName" placeholder="名称"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="联系人:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="联系人"></el-input> |
| | | <el-form-item label="联系人:" prop="customerUser" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.customerUser" placeholder="联系人"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="电话:" prop="year" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="电话"></el-input> |
| | | <el-form-item label="电话:" prop="costomerPhone" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.costomerPhone" placeholder="电话"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="顾客明示的要求及用途(订货产品信息):" prop="expectContents" > |
| | | <el-form-item label="顾客明示的要求及用途(订货产品信息):" prop="contractReviewRequires" > |
| | | <el-button |
| | | :disabled="title === '查看'" |
| | | type="primary" |
| | |
| | | style="margin-left: 10px;margin-bottom: 10px" |
| | | >新增</el-button> |
| | | <div style="display: flex;width: 100%;"> |
| | | <el-table :data="state.form.expectContents" :border="true" > |
| | | <el-table :data="state.form.contractReviewRequires" :border="true" > |
| | | <el-table-column type="index" label="序号" align="center"></el-table-column> |
| | | <el-table-column label="产品名称" prop="name" align="center" width="150"> |
| | | <el-table-column label="产品名称" prop="name" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'productName'" :rules="state.rules.productName"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.productName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="规格型号" prop="name" align="center" width="150"> |
| | | <el-table-column label="规格型号" prop="specification" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'specification'" :rules="state.rules.specification"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.specification" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="数量" prop="name" align="center" width="150"> |
| | | <el-table-column label="数量" prop="amount" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'amount'" :rules="state.rules.amount"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" @input="row.amount = row.amount.replace(/[^0-9]/g,'')" type="textarea" :rows="2" v-model="row.amount" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="单价" prop="name" align="center" width="150"> |
| | | <el-table-column label="单价" prop="price" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'price'" :rules="state.rules.price"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" @input="row.price= row.price.replace(/[^\d.]/g, '') .replace(/\.+/g, '.').replace(/^\./, '0.').replace(/^(\d*\.?\d{0,2}).*/, '$1')" v-model="row.price" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="其他" prop="name" align="center" width="150"> |
| | | <el-table-column label="其他" prop="remark" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'remark'" :rules="state.rules.remark"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.remark" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="交货期限:" prop="expectContents" > |
| | | <el-form-item label="交货期限:" prop="deliveryTime" > |
| | | <el-date-picker |
| | | v-model="state.form.fictionTime" |
| | | :disabled="title =='查看'" |
| | | v-model="state.form.deliveryTime" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="请选择记录日期" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="交付方式:" prop="expectContents" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="交付方式"></el-input> |
| | | <el-form-item label="交付方式:" prop="deliveryType" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.deliveryType" placeholder="交付方式"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="交货地址:" prop="expectContents" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="交货地址"></el-input> |
| | | <el-form-item label="交货地址:" prop="deliveryAddr" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.deliveryAddr" placeholder="交货地址"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款方式:" prop="expectContents" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.name" placeholder="付款方式"></el-input> |
| | | <el-form-item label="付款方式:" prop="payType" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.payType" placeholder="付款方式"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="产品和服务要求及其他要求:(或变更内容):" prop="expectContents" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="产品和服务要求及其他要求:(或变更内容):" prop="productMess" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.productMess" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="风险识别:" prop="expectContents" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="风险识别:" prop="riskMess" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.riskMess" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item :label="state.form.type == 1 ? '评审内容' :'变更内容' " prop="expectContentsX" > |
| | | <el-form-item :label="state.form.type == 1 ? '评审内容' :state.form.type == 2?'变更内容':'内容' " prop="reviewMesses" > |
| | | <el-button |
| | | :disabled="title === '查看'" |
| | | type="primary" |
| | |
| | | style="margin-left: 10px;margin-bottom: 10px" |
| | | >新增</el-button> |
| | | <div style="display: flex;width: 100%;"> |
| | | <el-table :data="state.form.expectContentsX" :border="true" > |
| | | <el-table :data="state.form.reviewMesses" :border="true" > |
| | | <el-table-column type="index" label="序号" align="center"></el-table-column> |
| | | <el-table-column :label="state.form.type == 1 ? '评审部门' :'变更部门' " prop="name" align="center" width="150"> |
| | | <el-table-column :label="state.form.type == 1 ? '评审部门' :'变更部门' " prop="deptName" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'expectContentsX.' + '[' + $index + ']' + 'name'" :rules="state.rules.name"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.name" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'reviewMesses.' + '[' + $index + ']' + 'deptName'" :rules="state.rules.deptName"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.deptName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column :label="state.form.type == 1 ? '评审内容(含风险)' :'变更内容(含风险)' " prop="need" align="center" width="150"> |
| | | <el-table-column :label="state.form.type == 1 ? '评审内容(含风险)' :'变更内容(含风险)' " prop="reviewMess" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.expectContentMessesX" :key="index"> |
| | | <el-form-item :prop="'expectContentsX.' + '[' + $index + '].' +'expectContentMessesX.' + '[' + index + ']' + '.need'" :rules="state.rules.need"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.need" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contractReviewMessbs" :key="index"> |
| | | <el-form-item :prop="'reviewMesses.' + '[' + $index + '].' +'contractReviewMessbs.' + '[' + index + ']' + '.reviewMess'" :rules="state.rules.reviewMess"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.reviewMess" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column :label="state.form.type == 1 ? '评审意见' :'变更意见' " prop="need" align="center" width="150"> |
| | | <el-table-column :label="state.form.type == 1 ? '评审意见' :'变更意见' " prop="reviewOpinion" align="center"> |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.expectContentMessesX" :key="index"> |
| | | <el-form-item :prop="'expectContentsX.' + '[' + $index + '].' +'expectContentMessesX.' + '[' + index + ']' + '.need'" :rules="state.rules.need"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.need" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contractReviewMessbs" :key="index"> |
| | | <el-form-item :prop="'reviewMesses.' + '[' + $index + '].' +'contractReviewMessbs.' + '[' + index + ']' + '.reviewOpinion'" :rules="state.rules.reviewOpinion"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.reviewOpinion" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="签字" prop="need" align="center" width="150"> |
| | | <el-table-column label="签字" prop="reviewSign" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.expectContentMessesX" :key="index"> |
| | | <el-form-item :prop="'expectContentsX.' + '[' + $index + '].' +'expectContentMessesX.' + '[' + index + ']' + '.need'" :rules="state.rules.need"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.need" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contractReviewMessbs" :key="index"> |
| | | <el-form-item :prop="'reviewMesses.' + '[' + $index + '].' +'contractReviewMessbs.' + '[' + index + ']' + '.reviewSign'" :rules="state.rules.reviewSign"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.reviewSign" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="审批意见:" prop="expectContents" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.name" placeholder=""></el-input> |
| | | <el-form-item label="审批意见:" prop="suggest" > |
| | | <el-input :disabled="title === '查看'" type="textarea" :rows="4" v-model="state.form.suggest" placeholder=""></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="法人/委托代理人签字:" prop="expectContents" > |
| | | <el-select clearable v-model="state.form.personId" :disabled="title =='查看'" filterable style="width: 240px;margin-bottom: 5px"> |
| | | <el-form-item label="法人/委托代理人签字:" prop="legalPerson" > |
| | | <el-select clearable v-model="state.form.legalPerson" :disabled="title =='查看'" filterable style="width: 240px;margin-bottom: 5px"> |
| | | <el-option |
| | | v-for="item in state.peopleList" |
| | | :key="item.id" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="日期:" prop="expectContents" > |
| | | <el-form-item label="日期:" prop="legalTime" > |
| | | <el-date-picker |
| | | v-model="state.form.fictionTime" |
| | | :disabled="title =='查看'" |
| | | v-model="state.form.legalTime" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="请选择记录日期" |
| | |
| | | import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object"; |
| | | import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table"; |
| | | import {addNeedDiscren, editNeedDiscren} from "@/api/need/need"; |
| | | import {addContractReview, editContractReview} from "@/api/contractChange"; |
| | | import {getCustomer} from "@/api/customerList"; |
| | | import {getLedger} from "@/api/contractLedger"; |
| | | import {verifyPhone} from "@/utils/validate"; |
| | | |
| | | const dialogVisible = ref(false); |
| | | const title = ref(""); |
| | |
| | | const selectPopperClass = "max-width-select"; |
| | | const emit = defineEmits(["getList"]); |
| | | const dataRef = ref(); |
| | | const validatePhone = (rule, value, callback)=>{ |
| | | if(value === ''){ |
| | | callback(new Error('请输入手机号')) |
| | | }else{ |
| | | if(!verifyPhone(value)){ |
| | | callback(new Error('手机号格式有误')) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | const state = reactive({ |
| | | form: { |
| | | id: '', |
| | | companyId: null, |
| | | deptId: null, |
| | | year: '', |
| | | fictionId: null, |
| | | checkId: null, |
| | | ratifyId: null, |
| | | fictionTime: null, |
| | | frequency: '', |
| | | expectContents:[], |
| | | expectContentsX: [] |
| | | type: null, |
| | | contractId: null, |
| | | recordTime: "", |
| | | registrantId: null, |
| | | customerName: "", |
| | | customerUser: "", |
| | | costomerPhone: "", |
| | | deliveryTime: "", |
| | | deliveryAddr: "", |
| | | deliveryType: "", |
| | | payType: "", |
| | | productMess: "", |
| | | riskMess: "", |
| | | legalPerson: null, |
| | | legalTime: "", |
| | | suggest: '', |
| | | contractReviewRequires: [], |
| | | reviewMesses: [] |
| | | }, |
| | | rules: { |
| | | companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], |
| | | deptId: [{ required: true, message: '请选择部门', trigger: 'blur' }], |
| | | year: [{ required: true, message: '请选择年份', trigger: 'blur' }], |
| | | fictionId: [{ required: true, message: '请选择编制人', trigger: 'blur' }], |
| | | ratifyId: [{ required: true, message: '请选择批准人', trigger: 'blur' }], |
| | | checkId: [{ required: true, message: '请选择审核人', trigger: 'blur' }], |
| | | fictionTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], |
| | | frequency: [{ required: true, message: '请输入监测频率', trigger: 'blur' }], |
| | | stakeholder: [{required: true, message: "", trigger: "blur"}], |
| | | expectation: [{required: true, message: "", trigger: "blur"}], |
| | | solutions: [{required: true, message: "", trigger: "blur"}], |
| | | expectContents:[{ required: true, message: '请填写相关方期望或要求识别表', trigger: 'blur' }], |
| | | type: [{ required: true, message: '请选择评审类型', trigger: 'blur' }], |
| | | contractId: [{ required: true, message: '请选择合同', trigger: 'blur' }], |
| | | recordTime: [{ required: true, message: '请选择记录日期', trigger: 'blur' }], |
| | | registrantId: [{ required: true, message: '请选择记录人', trigger: 'blur' }], |
| | | customerName: [{ required: true, message: '请输入顾客名称', trigger: 'blur' }], |
| | | customerUser: [{ required: true, message: '请输入联系人', trigger: 'blur' }], |
| | | costomerPhone: [{ required: true, validator: validatePhone, trigger: 'blur' }], |
| | | deliveryTime: [{ required: true, message: '请选择交货期限', trigger: 'blur' }], |
| | | deliveryAddr: [{ required: true, message: '请输入交货地址', trigger: 'blur' }], |
| | | deliveryType: [{ required: true, message: '请输入交付方式', trigger: 'blur' }], |
| | | payType: [{ required: true, message: '请输入付款方式', trigger: 'blur' }], |
| | | productMess: [{ required: true, message: '请输入产品和服务要求内容', trigger: 'blur' }], |
| | | riskMess: [{ required: true, message: '请输入风险识别', trigger: 'blur' }], |
| | | legalPerson: [{ required: true, message: '请选择法人', trigger: 'blur' }], |
| | | legalTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], |
| | | suggest: [{ required: true, message: '请输入评审意见', trigger: 'blur' }], |
| | | productName: [{required: true, message: "", trigger: "blur"}], |
| | | pecification: [{required: true, message: "", trigger: "blur"}], |
| | | amount: [{required: true, message: "", trigger: "blur"}], |
| | | price: [{required: true, message: "", trigger: "blur"}], |
| | | // remark: [{required: true, message: "", trigger: "blur"}], |
| | | deptName:[{required: true, message: "", trigger: "blur"}], |
| | | reviewMess:[{required: true, message: "", trigger: "blur"}], |
| | | reviewOpinion:[{required: true, message: "", trigger: "blur"}], |
| | | reviewSign:[{required: true, message: "", trigger: "blur"}], |
| | | contractReviewRequires:[{ required: true, message: '请填写顾客明示的要求及用途表', trigger: 'blur' }], |
| | | reviewMesses:[{ required: true, message: '请填写评审/变更内容表', trigger: 'blur' }], |
| | | }, |
| | | peopleList: [], |
| | | isAdmin: false, |
| | |
| | | state.form.companyName = value.companyName |
| | | } |
| | | } |
| | | await getDeptList() |
| | | await getContractList() |
| | | await getPeopleList() |
| | | dialogVisible.value = true; |
| | | } |
| | | const onSubmit = async () => { |
| | | console.log('state.form',state.form) |
| | | |
| | | const valid = await busRef.value.validate(); |
| | | if(valid){ |
| | | if(title.value === '新增'){ |
| | | // console.log('sta',state.form) |
| | | // const {id, ...data} = JSON.parse(JSON.stringify(state.form)) |
| | | // const res = await addNeedDiscren(data) |
| | | // if(res.code === 200){ |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // message: '新增成功' |
| | | // }); |
| | | // }else{ |
| | | // ElMessage.warning(res.message) |
| | | // } |
| | | // emit("getList") |
| | | // busRef.value.clearValidate(); |
| | | // reset(); |
| | | // dialogVisible.value = false; |
| | | console.log('sta',state.form) |
| | | const {id, ...data} = JSON.parse(JSON.stringify(state.form)) |
| | | const res = await addContractReview(data) |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | }); |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | emit("getList") |
| | | busRef.value.clearValidate(); |
| | | reset(); |
| | | dialogVisible.value = false; |
| | | }else if(title.value === '编辑'){ |
| | | const {...data} = JSON.parse(JSON.stringify(state.form)) |
| | | const res = await editNeedDiscren(data) |
| | | data.reviewMesses.forEach(item => { |
| | | item.reviewId = state.form.id |
| | | }) |
| | | const res = await editContractReview(data) |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | |
| | | } |
| | | } |
| | | } |
| | | const getDeptList = async () => { |
| | | const getContractList = async () => { |
| | | if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ |
| | | return |
| | | } |
| | |
| | | pageSize: 999, |
| | | companyId: state.form.companyId |
| | | } |
| | | const res = await getDept(param) |
| | | const res = await getLedger(param) |
| | | if(res.code === 200){ |
| | | state.deptList = res.data |
| | | state.contractList = res.data.list |
| | | } |
| | | } |
| | | const getPeopleList = async ()=> { |
| | |
| | | state.form = { |
| | | id: '', |
| | | companyId: null, |
| | | deptId: null, |
| | | year: '', |
| | | fictionId: null, |
| | | checkId: null, |
| | | ratifyId: null, |
| | | fictionTime: null, |
| | | frequency: '', |
| | | expectContents:[], |
| | | type: null, |
| | | contractId: null, |
| | | recordTime: "", |
| | | registrantId: null, |
| | | customerName: "", |
| | | customerUser: "", |
| | | costomerPhone: "", |
| | | deliveryTime: "", |
| | | deliveryAddr: "", |
| | | deliveryType: "", |
| | | payType: "", |
| | | productMess: "", |
| | | riskMess: "", |
| | | legalPerson: null, |
| | | legalTime: "", |
| | | suggest: '', |
| | | contractReviewRequires: [], |
| | | reviewMesses: [] |
| | | } |
| | | state.companyList = [] |
| | | state.contractList = [] |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | const selectValueCom = (val) => { |
| | | state.form.fictionId = null |
| | | state.form.checkId = null |
| | | state.form.ratifyId = null |
| | | state.form.deptId = null |
| | | state.form.contractId = null |
| | | state.companyList.forEach(item => { |
| | | if(item.name === val){ |
| | | state.form.companyId = item.id |
| | | } |
| | | }) |
| | | getDeptList() |
| | | getContractList() |
| | | getPeopleList() |
| | | } |
| | | |
| | | |
| | | const addProductTable = () => { |
| | | state.form.expectContents.push({expectContentMesses: [{}]}) |
| | | state.form.contractReviewRequires.push({}) |
| | | } |
| | | const addContentTable = () => { |
| | | state.form.expectContentsX.push({expectContentMessesX: [{}]}) |
| | | state.form.reviewMesses.push({contractReviewMessbs: [{}]}) |
| | | } |
| | | const addObject = (val,itemIndex) => { |
| | | state.form.expectContentsX.forEach((item,index) => { |
| | | state.form.reviewMesses.forEach((item,index) => { |
| | | if(index == itemIndex){ |
| | | item.expectContentMessesX.push({}) |
| | | item.contractReviewMessbs.push({}) |
| | | } |
| | | }) |
| | | } |
| | | const delProduct = (val,itemIndex) => { |
| | | state.form.expectContents.forEach((item,index) => { |
| | | state.form.contractReviewRequires.forEach((item,index) => { |
| | | if(index == itemIndex){ |
| | | if(item.expectContentMesses.length == 1){ |
| | | state.form.expectContents.splice(index,1) |
| | | }else { |
| | | item.expectContentMesses.pop() |
| | | } |
| | | state.form.contractReviewRequires.splice(index,1) |
| | | } |
| | | }) |
| | | } |
| | | const delContent = (val,itemIndex) => { |
| | | state.form.expectContentsX.forEach((item,index) => { |
| | | state.form.reviewMesses.forEach((item,index) => { |
| | | if(index == itemIndex){ |
| | | if(item.expectContentMessesX.length == 1){ |
| | | state.form.expectContentsX.splice(index,1) |
| | | if(item.contractReviewMessbs.length == 1){ |
| | | state.form.reviewMesses.splice(index,1) |
| | | }else { |
| | | item.expectContentMessesX.pop() |
| | | item.contractReviewMessbs.pop() |
| | | } |
| | | } |
| | | }) |
| | |
| | | <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" /> |
| | | <el-table-column type="index" label="序号" width="80" align="center" /> |
| | | <el-table-column label="合同编号" prop="num" align="center" /> |
| | | <el-table-column label="合同名称" prop="num" align="center" /> |
| | | <el-table-column label="签订日期" prop="num" align="center" /> |
| | | <el-table-column label="评审类型" prop="num" align="center" > |
| | | <el-table-column label="合同编号" prop="number" align="center" /> |
| | | <el-table-column label="合同名称" prop="contractName" align="center" /> |
| | | <el-table-column label="签订日期" prop="signDate" align="center" /> |
| | | <el-table-column label="评审类型" prop="type" align="center" > |
| | | <template #default="scope"> |
| | | |
| | | <span>{{scope.row.type == 1 ?'评审':scope.row.type == 2 ?'变更':''}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160"> |
| | |
| | | import {generateWordDocument} from "@/utils/exportWord"; |
| | | import {delTable, getTable} from "@/api/qualityObjectives/table"; |
| | | import {delNeedDiscren, getNeedDiscren} from "@/api/need/need"; |
| | | import {delContractReview, getContractReview} from "@/api/contractChange"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const loading = ref(false); |
| | | const noticeRef = ref(); |
| | |
| | | } |
| | | }); |
| | | const getList = async () => { |
| | | // loading.value = true; |
| | | // const res = await getNeedDiscren(data.queryParams); |
| | | // if(res.code === 200){ |
| | | // dataList.value = res.data.list |
| | | // total.value = res.data.total |
| | | // }else{ |
| | | // ElMessage.warning(res.message) |
| | | // } |
| | | // loading.value = false; |
| | | dataList.value = [{}] |
| | | loading.value = true; |
| | | const res = await getContractReview(data.queryParams); |
| | | if(res.code === 200){ |
| | | dataList.value = res.data.list |
| | | total.value = res.data.total |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | loading.value = false; |
| | | } |
| | | |
| | | const searchClick = () => { |
| | |
| | | startGeneration() |
| | | } |
| | | } |
| | | const templatePath = ref('/contractChangeExample.docx') |
| | | const templatePath = ref() |
| | | const startGeneration = async () => { |
| | | const data = JSON.parse(JSON.stringify(choosedData.value)) |
| | | data.forEach(item => { |
| | | item.expectContents = [ |
| | | { |
| | | name: '张三', |
| | | expectContentMesses: [ |
| | | { |
| | | need: 'xxx', |
| | | personName: 'x', |
| | | visit:true, |
| | | network: true, |
| | | other: false |
| | | |
| | | }, |
| | | { |
| | | need: '22', |
| | | personName: '2', |
| | | visit:false, |
| | | network: false, |
| | | other: true |
| | | |
| | | }, |
| | | ] |
| | | } |
| | | ] |
| | | item.tableData = item.expectContents.map((i,index) => { |
| | | const msg = item.type == 1 ? '评审' : '变更' |
| | | templatePath.value = item.type == 1 ? '/contractReviewExample.docx' : '/contractChangeExample.docx' |
| | | item.reviewMesses = item.reviewMesses.map((i,index) => { |
| | | return{ |
| | | ...i, |
| | | expectContentMesses: i.expectContentMesses.map((q,qindex) => { |
| | | contractReviewMessbs: i.contractReviewMessbs.map((q,qindex) => { |
| | | return{ |
| | | ...q, |
| | | first: qindex == 0, |
| | |
| | | }) |
| | | } |
| | | }) |
| | | console.log('xxx',item.tableData) |
| | | item.contractReviewRequires = item.contractReviewRequires.map((item,index) => { |
| | | return { |
| | | ...item, |
| | | num: index+1, |
| | | remark: item.remark ? item.remark : ' ' |
| | | } |
| | | }) |
| | | try { |
| | | generateWordDocument(templatePath.value, item, item.companyName + `_合同评审变更表.docx`); |
| | | generateWordDocument(templatePath.value, item, item.contractName + `_合同${msg}表.docx`); |
| | | } catch (error){ |
| | | ElMessage({ |
| | | type: 'warning', |
| | |
| | | type: 'warning', |
| | | }) |
| | | .then( async() => { |
| | | const res = await delNeedDiscren(val.id); |
| | | const res = await delContractReview(val.id); |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |