Order-publish-edit.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <el-dialog v-model="state.dialogVisible" draggable title="发布修改" ref="dialogRef" width="50%" append-to-body destroy-on-close @close="close">
  3. <div class="collapse-container">
  4. <el-form label-width="100px" ref="ruleFormRef" :model="state.ruleForm" v-loading="state.loading">
  5. <el-row :gutter="10" class="w100">
  6. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.orderDetail.isProvince">
  7. <el-row :gutter="0">
  8. <el-divider content-position="left">
  9. <el-text tag="b" size="large"> 省工单发布内容 </el-text>
  10. </el-divider>
  11. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  12. <el-form-item label="是否公开">
  13. {{ state.ruleForm.proPublishState ? '公开' : '不公开' }}
  14. </el-form-item>
  15. </el-col>
  16. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  17. <el-form-item label="反馈人电话">
  18. {{ state.ruleForm.feedBackPhone }}
  19. </el-form-item>
  20. </el-col>
  21. <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24" v-if="!state.ruleForm.proPublishState">
  22. <el-form-item label="不公开原因">
  23. {{ state.ruleForm.noPubReason }}
  24. </el-form-item>
  25. </el-col>
  26. <template v-if="isZGZFW">
  27. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  28. <el-form-item label="是否联系">
  29. {{ state.ruleForm.isContact ? '是' : '否' }}
  30. </el-form-item>
  31. </el-col>
  32. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  33. <el-form-item label="是否评价">
  34. {{ state.ruleForm.isVisited ? '是' : '否' }}
  35. </el-form-item>
  36. </el-col>
  37. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  38. <el-form-item label="网民评价">
  39. {{ state.ruleForm.netizenEvaluate?.value }}
  40. </el-form-item>
  41. </el-col>
  42. <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.isVisited">
  43. <el-form-item label="评价内容">
  44. {{ state.ruleForm.evaluateContent }}
  45. </el-form-item>
  46. </el-col>
  47. <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
  48. <el-form-item label="备注">
  49. {{ state.ruleForm.remark }}
  50. </el-form-item>
  51. </el-col>
  52. </template>
  53. </el-row>
  54. </el-col>
  55. <el-divider content-position="left">
  56. <el-text tag="b" size="large"> 市工单发布内容 </el-text>
  57. </el-divider>
  58. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  59. <el-form-item label="工单标题"> {{ state.publishDetail.orderTitle }} </el-form-item>
  60. </el-col>
  61. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  62. <el-form-item label="整改后标题" prop="arrangeTitle" :rules="[{ required: false, message: '请填写整改后标题', trigger: 'blur' }]">
  63. <el-input placeholder="请填写整改后标题" v-model="state.ruleForm.arrangeTitle" clearable></el-input>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  67. <el-form-item label="工单内容"> {{ state.publishDetail.content }} </el-form-item>
  68. </el-col>
  69. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  70. <el-form-item label="整改后内容" prop="arrangeContent" :rules="[{ required: false, message: '请填写整改后内容', trigger: 'blur' }]">
  71. <el-input
  72. placeholder="请填写整改后内容"
  73. type="textarea"
  74. :autosize="{ minRows: 6, maxRows: 10 }"
  75. v-model="state.ruleForm.arrangeContent"
  76. ></el-input>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  80. <el-form-item label="办理结果">
  81. <el-text>{{ state.publishDetail.actualOpinion }} </el-text>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  85. <el-form-item label="整改后结果" prop="arrangeOpinion" :rules="[{ required: false, message: '请填写整改后内容', trigger: 'blur' }]">
  86. <el-input
  87. type="textarea"
  88. placeholder="请填写整改后办件结果"
  89. :autosize="{ minRows: 6, maxRows: 10 }"
  90. v-model="state.ruleForm.arrangeOpinion"
  91. ></el-input>
  92. </el-form-item>
  93. </el-col>
  94. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  95. <el-form-item label="门户是否公开" prop="publishState">
  96. <el-radio-group v-model="state.ruleForm.publishState">
  97. <el-radio :value="false">不公开</el-radio>
  98. <el-radio :value="true">公开</el-radio>
  99. </el-radio-group>
  100. </el-form-item>
  101. </el-col>
  102. <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  103. <el-form-item label="门户是否公开" prop="resolve" >
  104. <el-radio-group v-model="state.ruleForm.resolve" disabled>
  105. <el-radio :value="true">已得到解决</el-radio>
  106. <el-radio :value="false">未得到解决</el-radio>
  107. </el-radio-group>
  108. </el-form-item>
  109. </el-col>-->
  110. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  111. <el-form-item label="实际办理部门">
  112. {{ state.publishDetail.actualHandleOrgName?.value }}
  113. </el-form-item>
  114. </el-col>
  115. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="idNamesArray.length">
  116. <el-form-item label="需回访部门" prop="idNames">
  117. <el-checkbox-group v-model="state.ruleForm.idNames" disabled>
  118. <el-checkbox :value="item" v-for="item in idNamesArray" :key="item.key">{{ item.value }}</el-checkbox>
  119. </el-checkbox-group>
  120. </el-form-item>
  121. </el-col>
  122. </el-row>
  123. </el-form>
  124. </div>
  125. <template #footer>
  126. <span class="dialog-footer">
  127. <el-button @click="closeDialog" class="default-button">取 消</el-button>
  128. <el-button type="primary" @click="onPublish(ruleFormRef)" :loading="state.loading">提交</el-button>
  129. </span>
  130. </template>
  131. </el-dialog>
  132. </template>
  133. <script setup lang="ts" name="orderPublishEditDetail">
  134. import { computed, reactive, ref } from 'vue';
  135. import { ElMessage, FormInstance } from 'element-plus';
  136. import { baseData, publishOrderDetail, publishOrderUpdate } from '@/api/business/publish';
  137. // 定义子组件向父组件传值/事件
  138. const emit = defineEmits(['updateList']);
  139. // 定义变量内容
  140. const state = reactive<any>({
  141. dialogVisible: false, // 是否显示弹窗
  142. loading: false, // 是否显示加载
  143. ruleForm: {
  144. arrangeTitle: '', // 整改后标题
  145. arrangeContent: '', // 整改后内容
  146. arrangeOpinion: '', // 整改后结果
  147. publishState:null, // 门户是否公开
  148. },
  149. orderDetail: {}, // 工单详情
  150. publishDetail: {}, // 发布详情
  151. });
  152. const ruleFormRef = ref<RefType>(); // 表单ref
  153. const idNamesArray = ref<EmptyArrayType>([]); // 部门列表
  154. const dialogTitle = ref<string>('发布详情'); // 弹窗标题
  155. /*
  156. * @param row 工单详情
  157. * @description 打开弹窗
  158. * */
  159. const openDialog = async (row: any) => {
  160. state.loading = true;
  161. state.dialogVisible = true;
  162. try {
  163. state.orderDetail = row.order ?? {};
  164. const [res, response] = await Promise.all([baseData(row.order?.id), publishOrderDetail(row.id)]);
  165. state.ruleForm = response.result ?? {};
  166. state.publishDetail = res.result ?? {};
  167. idNamesArray.value = res.result?.idNames ?? [];
  168. state.loading = false;
  169. } catch (e) {
  170. state.loading = false;
  171. console.log(e);
  172. }
  173. };
  174. // 中国政府网特殊字段
  175. const isZGZFW = computed(() => {
  176. return state.orderDetail.provinceNo.includes('ZGZFW');
  177. });
  178. // 关闭弹窗
  179. const closeDialog = () => {
  180. state.dialogVisible = false;
  181. };
  182. const close = () => {
  183. ruleFormRef.value.clearValidate();
  184. ruleFormRef.value.resetFields();
  185. };
  186. // 发布
  187. const onPublish = (formEl: FormInstance | undefined) => {
  188. if (!formEl) return;
  189. formEl.validate((valid: boolean) => {
  190. if (!valid) return;
  191. state.loading = true;
  192. publishOrderUpdate(state.ruleForm)
  193. .then(() => {
  194. ElMessage.success('操作成功');
  195. state.loading = false;
  196. closeDialog();
  197. emit('updateList');
  198. })
  199. .catch(() => {
  200. state.loading = false;
  201. });
  202. });
  203. };
  204. defineExpose({
  205. openDialog,
  206. closeDialog,
  207. });
  208. </script>