zhouwx
2025-09-30 3a0d59f4e98862499162e500172b9e4944e9f0ff
src/views/work/financialMng/qualityFinancialAnalysis/components/editDialog.vue
@@ -49,20 +49,20 @@
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="一 、基本情况:" prop="method" >
              <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
            <el-form-item label="一 、基本情况:" prop="basic" >
              <el-input :disabled="title === '查看'" v-model="state.form.basic" :rows="4" type="textarea" placeholder=""/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="二 、综合分析:" v-if="showEditor"  required>
              <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.form.policy" ></t-editor>
            <el-form-item label="二 、综合分析:" v-if="showEditor"  required prop="synthesize">
              <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.form.synthesize" ></t-editor>
            </el-form-item>
            <el-form-item label="二 、综合分析:" v-else>
            <el-form-item label="二 、综合分析:" v-else prop="synthesize">
              <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;" >
                <div class="ql-editor">
                  <div class="reviewTable" v-html="state.form.policy"  @click="showFile($event)"></div>
                  <div class="reviewTable" :disabled="title === '查看'" v-html="state.form.synthesize"  ></div>
                </div>
              </div>
            </el-form-item>
@@ -70,52 +70,53 @@
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="三 、内外部损失:" prop="method" >
              <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
            <el-form-item label="三 、内外部损失:" prop="damage" >
              <el-input :disabled="title === '查看'" v-model="state.form.damage" :rows="4" type="textarea" placeholder=""/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="四 、纠正措施:" prop="method" >
              <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
            <el-form-item label="四 、纠正措施:" prop="measure" >
              <el-input :disabled="title === '查看'" v-model="state.form.measure" :rows="4" type="textarea" placeholder=""/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="五 、分析的结果:" prop="method" >
              <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
            <el-form-item label="五 、分析的结果:" prop="analysis" >
              <el-input :disabled="title === '查看'" v-model="state.form.analysis" :rows="4" type="textarea" placeholder=""/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="六 、改进建议:" prop="method" >
              <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder=""/>
            <el-form-item label="六 、改进建议:" prop="suggest" >
              <el-input :disabled="title === '查看'" v-model="state.form.suggest" :rows="4" type="textarea" placeholder=""/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
          <el-col :span="12">
            <el-form-item label="部门:" prop="leadId" >
              <el-select clearable v-model="state.form.leadId" :disabled="title =='查看'" filterable  style="width: 100%">
            <el-form-item label="部门:" prop="dutyId" >
              <el-select clearable v-model="state.form.dutyId" :disabled="title =='查看'" filterable  style="width: 100%">
                <el-option
                    v-for="item in state.userList"
                    :key="item.id"
                    :label="item.name"
                    :value="item.id"
                    v-for="item in state.deptList"
                    :key="item.deptId"
                    :label="item.deptName"
                    :value="item.deptId"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="日期:" prop="leadTime" >
            <el-form-item label="日期:" prop="dutyTime" >
              <el-date-picker
                  :disabled="title === '查看'"
                  v-model="state.form.leadTime"
                  v-model="state.form.dutyTime"
                  type="date"
                  placeholder="请选择日期"
                  value-format="YYYY-MM-DD"
              />
            </el-form-item>
          </el-col>
@@ -141,6 +142,7 @@
import TEditor from "@/components/Tinymce/Tinymce.vue";
import axios from "axios";
import {getToken} from "@/utils/auth";
import {addEconomy, editEconomy} from "@/api/qualityFinancialAnalysis";
const dialogVisible = ref(false);
const title = ref("");
@@ -154,34 +156,28 @@
const state = reactive({
  form: {
    id: '',
    year: '',
    num: '',
    type: '',
    departId: '',
    method: '',
    compilationId:'',
    compilationTime:'',
    qualityId: '',
    qualityTime:'',
    leadId:'',
    leadTime: '',
    qualityTargets:[],
    companyId: null,
    year: "",
    basic: "",
    synthesize: "",
    damage: "",
    measure: "",
    analysis: "",
    suggest: "",
    dutyId: null,
    dutyTime: ""
  },
  rules: {
    companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
    year: [{ required: true, message: '请输入年份', trigger: 'blur' }],
    num: [{ required: true, message: '请输入序号', trigger: 'blur' }],
    type: [{ required: true, message: '请选择级别', trigger: 'blur' }],
    method: [{ required: true, message: '请输入目标测量方法', trigger: 'blur' }],
    compilationId: [{ required: true, message: '请选择编制人员', trigger: 'blur' }],
    compilationTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
    qualityId: [{ required: true, message: '请选择质量管理部人员', trigger: 'blur' }],
    qualityTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
    leadId: [{ required: true, message: '请选择公司分管领导', trigger: 'blur' }],
    leadTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
    departId: [{ required: true, message: '请选择部门', trigger: 'blur' }],
    objName: [{required: true, message: "质量目标不能为空", trigger: "blur"}],
    basic: [{ required: true, message: '请输入基本情况', trigger: 'blur' }],
    synthesize: [{ required: true, message: '请输入综合分析', trigger: 'blur' }],
    damage: [{ required: true, message: '请输入内外部损失', trigger: 'blur' }],
    measure: [{ required: true, message: '请输入纠正措施', trigger: 'blur' }],
    analysis: [{ required: true, message: '请输入分析结果', trigger: 'blur' }],
    suggest: [{ required: true, message: '请输入改进建议', trigger: 'blur' }],
    dutyId: [{ required: true, message: '请选择部门', trigger: 'blur' }],
    dutyTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
  },
  isAdmin: false,
  companyList: [],
@@ -209,16 +205,6 @@
      label: '2021'
    },
  ],
  levelList: [
    {
      value: 1,
      label: '公司级'
    },
    {
      value: 2,
      label: '部门级'
    },
  ]
})
const openDialog = async (type, value,companyList) => {
@@ -234,10 +220,6 @@
  title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
  if(type === 'edit' || type === 'review') {
    state.form = JSON.parse(JSON.stringify(value));
    state.form.compilationBy = state.form.compilationId
    state.form.leadBy = state.form.leadId
    state.form.qualityBy = state.form.qualityId
    if(state.isAdmin){
      state.form.companyId = value.companyId
      state.form.companyName = value.companyName
@@ -250,13 +232,13 @@
    showEditor.value = true;
  }
  await getDeptList()
  await   getPeopleList()
  // await   getPeopleList()
  dialogVisible.value = true;
}
const addObject = () => {
  state.form.qualityTargets.push({})
}
const getDeptList = async () => {
  if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
    return
  }
  const param = {
    pageNum: 1,
    pageSize: 999,
@@ -268,46 +250,42 @@
  }
}
const onSubmit = async () => {
  state.form.policy = tinyMCE.activeEditor.getContent();
console.log('1',state.form.policy)
  state.form.synthesize = tinyMCE.activeEditor.getContent();
console.log('1',state.form.synthesize)
  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 addObjective(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))
    //   if(data.qualityTargets && data.qualityTargets.length == 0){
    //     ElMessage.warning('请填写质量目标')
    //     return
    //   }
    //   const res = await editObject(data)
    //   if(res.code === 200){
    //     ElMessage({
    //       type: 'success',
    //       message: '编辑成功'
    //     });
    //   }else{
    //     ElMessage.warning(res.message)
    //   }
    //   emit("getList")
    //   busRef.value.clearValidate();
    //   reset();
    //   dialogVisible.value = false;
    // }
    if(title.value === '新增'){
      console.log('sta',state.form)
      const {id, ...data} = JSON.parse(JSON.stringify(state.form))
      const res = await addEconomy(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 editEconomy(data)
      if(res.code === 200){
        ElMessage({
          type: 'success',
          message: '编辑成功'
        });
      }else{
        ElMessage.warning(res.message)
      }
      emit("getList")
      busRef.value.clearValidate();
      reset();
      dialogVisible.value = false;
    }
  }
}
@@ -321,52 +299,39 @@
const reset = () => {
  state.form = {
    id: '',
    year: '',
    num: '',
    type: '',
    departId: '',
    method: '',
    compilationBy:'',
    compilationTime:'',
    qualityBy: '',
    qualityTime:'',
    leadBy:'',
    leadTime: '',
    qualityTargets:[],
    companyId: null,
    year: "",
    basic: "",
    synthesize: "",
    damage: "",
    measure: "",
    analysis: "",
    suggest: "",
    dutyId: null,
    dutyTime: ""
  }
  state.peopleList = []
  state.companyList = []
}
const handleDelete = (val) => {
  state.form.qualityTargets = state.form.qualityTargets.filter(item=> item != val)
}
const getPeopleList = async ()=> {
  if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
    return
  }
  const queryParams = {
    pageNum: 1,
    pageSize: 9999,
    companyId: state.form.companyId
  }
  const res = await getUser(queryParams)
  if(res.code == 200){
    state.userList = res.data.list?res.data.list:[]
  }else{
    ElMessage.warning(res.message)
  }
};
const selectValue = (val) => {
  state.peopleList.forEach(item => {
    if(item.name === val){
      state.form.compilationBy = item.id
    }
  })
}
// const getPeopleList = async ()=> {
//   if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
//     return
//   }
//   const queryParams = {
//     pageNum: 1,
//     pageSize: 9999,
//     companyId: state.form.companyId
//   }
//   const res = await getUser(queryParams)
//   if(res.code == 200){
//     state.userList = res.data.list?res.data.list:[]
//   }else{
//     ElMessage.warning(res.message)
//   }
// };
const handleChangeNum = (value) => {
  if (!/^\d+$/.test(value)) { // 验证是否为数字
@@ -377,83 +342,17 @@
  }
}
const selectValueCom = (val) => {
  state.form.leadId = null
  state.form.qualityId = null
  state.form.compilationId = null
  state.form.leadName = null
  state.form.qualityName = null
  state.form.compilationName = null
  state.form.departId = null
  state.form.dutyId = null
  state.companyList.forEach(item => {
    if(item.id === val){
      state.form.companyName = item.name
    }
  })
  getDeptList()
  getPeopleList()
  // getPeopleList()
}
const changeLevel = () => {
  // state.form.companyName = ''
  state.form.departId = null
}
const getCompanyList = async (val)=>{
  if(val){
    const queryParams = {
      name: val
    }
    const res = await getCompany(queryParams)
    if (res.code == 200) {
      state.companyList = res.data.list
    } else {
      ElMessage.warning(res.message)
    }
  }else {
    const queryParams = {
      pageSize: 999,
      pageNum: 1,
    }
    const res = await getCompany(queryParams)
    if (res.code == 200) {
      state.companyList = res.data.list
    } else {
      ElMessage.warning(res.message)
    }
  }
}
const showFile = (e) => {
  if(e.target.nodeName === 'A'){
    console.log("e",e)
    e.preventDefault();
    const file = {
      fileUrl: e.target.href,
      fileName: e.target.innerHTML
    }
    axios.get( file.fileUrl,{
          headers:
              {
                'Content-Type': 'application/json',
                'Authorization':getToken(),
              },
          responseType: 'blob'
        }
    ).then(res=>{
      if (res) {
        const link = document.createElement('a')
        let blob = new Blob([res.data],{type: res.data.type})
        link.style.display = "none";
        link.href = URL.createObjectURL(blob); // 创建URL
        link.setAttribute("download", file.fileName);
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      } else {
        this.$message.error('获取文件失败')
      }
      // handleClose();
    })
  }
}
defineExpose({
  openDialog
});