edit.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <template>
  2. <a-modal
  3. :width="1200"
  4. v-model:visible="visible"
  5. :title="title"
  6. :confirm-loading="confirmLoading"
  7. @ok="handleOk"
  8. ok-text="提交"
  9. @cancel="handleCancel"
  10. cancel-text="取消"
  11. :keyboard="false"
  12. :mask-closable="false" >
  13. <a-form autocomplete="off" >
  14. <a-divider orientation="left">基础信息管理</a-divider>
  15. <a-row type="flex">
  16. <a-col :span="7">
  17. <a-form-item label="企业名称" name="CompanyName" :label-col="{span:7}">
  18. <label v-if="isDetail">{{dataModel.companyName}}</label>
  19. <a-input v-model:value="dataModel.companyName" placeholder=""/>
  20. </a-form-item>
  21. </a-col>
  22. <a-col :span="7">
  23. <a-form-item label="企业地址" name="CompanyAddress" :label-col="{span:7}">
  24. <label v-if="isDetail">{{dataModel.companyAddress }}</label>
  25. <a-input v-model:value="dataModel.companyAddress" placeholder=""/>
  26. </a-form-item>
  27. </a-col>
  28. <a-col :span="10">
  29. <a-form-item label="负责人姓名" name="DutyUserName" :label-col="{span:10}" >
  30. <label v-if="isDetail">{{dataModel.fzrName}}</label>
  31. <a-input v-model:value="dataModel.fzrName" placeholder=""/>
  32. <!-- <a-date-picker name="feedbackDate2" v-model:value="dataModel.feedbackDate" value-format="YYYY-MM-DD" picker="date"
  33. placeholder="请选择问题反馈日期" v-if="!isDetail" />
  34. <a-select ref="select" v-model:value="dataModel.problemCharacteristics"
  35. :options="problemAttrList" :field-names="{label:'name',value:'value'}"
  36. @change="loadData" :allow-clear="true" v-if="!isDetail">
  37. </a-select>-->
  38. </a-form-item>
  39. </a-col>
  40. </a-row>
  41. <a-row type="flex">
  42. <a-col :span="7">
  43. <a-form-item label="负责人电话" name="DutyUserMobile" :label-col="{span:7}">
  44. <label v-if="isDetail">{{dataModel.fzrMobile }}</label>
  45. <a-input v-model:value="dataModel.fzrMobile" placeholder=""/>
  46. </a-form-item>
  47. </a-col>
  48. <a-col :span="7">
  49. <a-form-item label="法人姓名" name="LegalerName" :label-col="{span:7}">
  50. <label v-if="isDetail">{{dataModel.frName }}</label>
  51. <a-input v-model:value="dataModel.frName" placeholder=""/>
  52. </a-form-item>
  53. </a-col>
  54. <a-col :span="10">
  55. <a-form-item label="法人电话" name="LegalerMobile" :label-col="{span:10}">
  56. <label v-if="isDetail">{{dataModel.frMobile }}</label>
  57. <a-input v-model:value="dataModel.frMobile" placeholder=""/>
  58. </a-form-item>
  59. </a-col>
  60. </a-row>
  61. <a-row type="flex">
  62. <a-col :span="7">
  63. <a-form-item label="企业机构代码" name="CompanyCode" :label-col="{span:7}">
  64. <label v-if="isDetail">{{dataModel.companyCode }}</label>
  65. <a-input v-model:value="dataModel.companyCode" placeholder=""/>
  66. </a-form-item>
  67. </a-col>
  68. <a-col :span="7"></a-col>
  69. <a-col :span="10"></a-col>
  70. </a-row>
  71. <a-divider orientation="left">管理驿站 共计:{{manageSites.length}}</a-divider>
  72. <a-row>
  73. <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
  74. <Space>
  75. <a-button @click="addSite">
  76. <template #icon>
  77. <plus-circle-outlined/>
  78. </template>
  79. 新增
  80. </a-button>
  81. </Space>
  82. </a-col>
  83. </a-row>
  84. <a-row>
  85. <a-col style="margin-bottom: 20px;">
  86. <a-table :columns="columns" :data-source="manageSites" :pagination="pagination"
  87. :loading="formState.loading"
  88. @change="handleTableChange"
  89. :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
  90. :row-key="record=>record.siteId"
  91. bordered>
  92. <template #bodyCell="{ column ,index}">
  93. <template v-if="column.key === 'siteName'">
  94. <div>
  95. <a-select
  96. ref="select"
  97. v-model:value="manageSites[index][column.key]"
  98. :options="allSites"
  99. @change="manageSitesChange(index,manageSites[index][column.key])"
  100. :field-names="{ label: 'siteName', value: 'siteID' }"
  101. :allow-clear="true" style="width: 200px" >
  102. </a-select>
  103. </div>
  104. </template>
  105. <template v-if="column.key === 'detailAddress'">
  106. {{manageSites[index][column.key]}}
  107. </template>
  108. <template v-if="column.key === 'operation'">
  109. <a-button type="link" size="small" @click="delSite(index)">删除</a-button>
  110. </template>
  111. </template>
  112. </a-table>
  113. </a-col>
  114. </a-row>
  115. <a-divider orientation="left">其他</a-divider>
  116. <a-row>
  117. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.companyDesc" :disabled="isDetail"
  118. placeholder="企业简介" style="text-align: center;" />
  119. </a-row>
  120. <a-row style="height: 10px"></a-row>
  121. <a-row>
  122. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.remarkDesc" :disabled="isDetail"
  123. placeholder="备注" style="text-align: center;" />
  124. </a-row>
  125. </a-form>
  126. </a-modal>
  127. </template>
  128. <script lang="ts">
  129. import {computed, defineComponent, reactive, ref, toRefs} from "vue";
  130. import {getInstitutionByID, saveInstitution} from "@/api/baseSettings/institution";
  131. import {getSiteList,getListByInstitutionID,getSiteByID} from "@/api/baseSettings/siteInfo";
  132. import BUploadFile from "@/components/file/uploadFile.vue";
  133. import {message, TableColumnsType, TableProps} from "ant-design-vue";
  134. import {getPaginationTotalTitle} from "@/utils/common";
  135. /*import dayjs from "dayjs";*/
  136. interface InstitutionModel {
  137. dataModel: any;
  138. }
  139. export default defineComponent({
  140. name:'InstitutionEditForm',
  141. components: {BUploadFile},
  142. props: {
  143. loadData: {
  144. type: Function,
  145. default: null
  146. }
  147. },
  148. setup(props) {
  149. /*const feedbackDateDetail = ref();
  150. const resolveDateDetail = ref();*/
  151. const formData = reactive<InstitutionModel>({ dataModel:{}});
  152. const visible = ref<boolean>(false);
  153. const confirmLoading = ref<boolean>(false);
  154. const title = ref();
  155. const isAllowCommit = ref<boolean>(false);
  156. const isDetail = ref<boolean>(false);
  157. const pageParams = reactive({
  158. pageIndex: 1,
  159. pageSize: 10,
  160. institutionID:''
  161. });
  162. const columns: TableColumnsType = [
  163. {title: '序号', align: "center",key: 'siteID',customRender: item => `${pageParams.pageSize * (pageParams.pageIndex - 1) + item.index + 1}`},
  164. {title: '驿站名称', dataIndex: 'siteName', key: 'siteName', align: "center"},
  165. {title: '驿站地址', dataIndex: 'detailAddress', key: 'detailAddress', align: "center"},
  166. {title: '操作', key: 'operation', fixed: 'right',width:170, align: "center"},
  167. ];
  168. const pagination = computed(() => ({
  169. total: formState.total,
  170. current: pageParams.pageIndex,
  171. pageSize: pageParams.pageSize,
  172. showSizeChanger: true,
  173. showTotal: total => getPaginationTotalTitle(total)
  174. }));
  175. const formState = reactive({
  176. total: 0,
  177. selectedRowKeys: [],
  178. loading: false
  179. });
  180. const allSites = ref([]);
  181. const manageSites = ref<any>([]);
  182. const loadData = (id: string) => {
  183. getInstitutionByID(id).then((result: any) => {
  184. formData.dataModel = result;
  185. console.log('dataModel',formData.dataModel);
  186. GetManageSites(formData.dataModel.institutionID);
  187. /*feedbackDateDetail.value = dayjs(formState.dataModel.feedbackDate).format('YYYY-MM-DD');
  188. resolveDateDetail.value = formState.dataModel.resolveDate == null?"": dayjs(formState.dataModel.resolveDate).format('YYYY-MM-DD');*/
  189. });
  190. }
  191. const show = (id: any,method:string,ifDetail:boolean) => {
  192. title.value ="运营机构管理-"+method;
  193. isDetail.value = ifDetail;
  194. loadData(id);
  195. visible.value = true;
  196. };
  197. const getAllSites = () => {
  198. pageParams.institutionID = '';
  199. getSiteList(pageParams).then((result :any) => {
  200. allSites.value = result.list;
  201. console.log('allSites',allSites);
  202. })
  203. }
  204. const GetManageSites = (id: string) => {
  205. pageParams.institutionID = id;
  206. getListByInstitutionID(pageParams).then((result :any)=> {
  207. manageSites.value = result.list;
  208. console.log('manageSites',manageSites);
  209. });
  210. }
  211. const addSite = () => {
  212. (manageSites.value as any[]).push({siteID: null,siteName: '', detailAddress:''});
  213. }
  214. const delSite = (site) =>{
  215. (manageSites.value as any[]).splice(site, 1);
  216. }
  217. const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
  218. pageParams.pageIndex = pag.current;
  219. pageParams.pageSize = pag.pageSize;
  220. };
  221. const onSelectChange = (selectedRowKeys: any) => {
  222. formState.selectedRowKeys = selectedRowKeys;
  223. };
  224. const manageSitesChange = (index:any,siteID:any) =>{
  225. const isAllowAdd = ref<boolean>(true);
  226. manageSites.value.forEach(item=>{
  227. if (item.siteID == siteID){
  228. isAllowAdd.value = false;
  229. return;
  230. }
  231. });
  232. if (isAllowAdd.value){
  233. getSiteByID(siteID).then((result :any)=> {
  234. manageSites.value[index]= result;
  235. });
  236. console.log('manageSites',manageSites.value);
  237. }else{
  238. (manageSites.value as any[]).splice(index, 1);
  239. message.error("不允许添加相同的站点!");
  240. }
  241. }
  242. const validate = () =>{
  243. console.log('dataModel',formData.dataModel);
  244. if (formData.dataModel.companyName==null) {
  245. message.error("请输入企业名称!");
  246. return;
  247. }else if (formData.dataModel.companyAddress==null) {
  248. message.error("请输入企业地址!");
  249. return;
  250. }else if (formData.dataModel.fzrName==null) {
  251. message.error("请输入负责人名称!");
  252. return;
  253. }else if (formData.dataModel.fzrMobile==null) {
  254. message.error("请填写负责人电话!");
  255. return;
  256. }else if (formData.dataModel.frName==null) {
  257. message.error("请填写法人姓名!");
  258. return;
  259. }else if (formData.dataModel.frMobile==null) {
  260. message.error("请填写法人电话!");
  261. return;
  262. }else if (formData.dataModel.companyCode==null) {
  263. message.error("请填写企业机构代码!");
  264. return;
  265. }
  266. isAllowCommit.value = true;
  267. };
  268. const handleOk = () => {
  269. validate();
  270. if (isAllowCommit.value){
  271. formData.dataModel.manageSites = manageSites.value;
  272. saveInstitution(formData.dataModel).then(result => {
  273. if (result) {
  274. visible.value = false;
  275. props.loadData();
  276. }
  277. });
  278. }
  279. };
  280. const handleCancel = () => {
  281. visible.value = false;
  282. };
  283. return {
  284. ...toRefs(formData),
  285. pageParams,
  286. columns,
  287. pagination,
  288. formState,
  289. allSites,
  290. manageSites,
  291. /*feedbackDateDetail,
  292. resolveDateDetail,*/
  293. isAllowCommit,
  294. isDetail,
  295. visible,
  296. title,
  297. confirmLoading,
  298. show,
  299. getAllSites,
  300. GetManageSites,
  301. addSite,
  302. delSite,
  303. handleTableChange,
  304. onSelectChange,
  305. manageSitesChange,
  306. handleOk,
  307. handleCancel,
  308. validate
  309. };
  310. },
  311. created() {
  312. this.getAllSites();
  313. },
  314. })
  315. </script>