edit.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. <template>
  2. <div class="card-edit">
  3. <a-form :model="dataModel" autocomplete="off" @finish="onFinish">
  4. <a-divider orientation="left">运营机构信息</a-divider>
  5. <a-row type="flex">
  6. <a-col :span="8">
  7. <a-form-item label="企业名称" name="companyName" :label-col="{span:8}" :rules="[{ required: true, message: '请输入企业名称!' }]">
  8. <label v-if="opCategory==3">{{dataModel.companyName }}</label>
  9. <a-input v-model:value="dataModel.companyName" placeholder=""/>
  10. </a-form-item>
  11. </a-col>
  12. <a-col :span="7">
  13. <a-form-item label="企业地址" name="companyAddress" :label-col="{span:7}" :rules="[{ required: true, message: '请输入企业地址!' }]">
  14. <label v-if="opCategory==3">{{dataModel.companyAddress }}</label>
  15. <a-input v-model:value="dataModel.companyAddress" placeholder=""/>
  16. </a-form-item>
  17. </a-col>
  18. <a-col :span="8">
  19. <a-form-item label="负责人姓名" name="fzrName" :label-col="{span:8}" :rules="[{ required: true, message: '请输入负责人姓名!' }]">
  20. <label v-if="opCategory==3">{{dataModel.fzrName}}</label>
  21. <a-input v-model:value="dataModel.fzrName" placeholder=""/>
  22. </a-form-item>
  23. </a-col>
  24. </a-row>
  25. <a-row type="flex">
  26. <a-col :span="8">
  27. <a-form-item label="负责人电话" name="fzrMobile" :label-col="{span:8}" :rules="[{ required: true, message: '请输入负责人电话!' }]">
  28. <label v-if="opCategory==3">{{dataModel.fzrMobile }}</label>
  29. <a-input v-model:value="dataModel.fzrMobile" placeholder=""/>
  30. </a-form-item>
  31. </a-col>
  32. <a-col :span="7">
  33. <a-form-item label="法人姓名" name="frName" :label-col="{span:7}" :rules="[{ required: true, message: '请输入法人姓名!' }]">
  34. <label v-if="opCategory==3">{{dataModel.frName }}</label>
  35. <a-input v-model:value="dataModel.frName" placeholder=""/>
  36. </a-form-item>
  37. </a-col>
  38. <a-col :span="8">
  39. <a-form-item label="法人电话" name="frMobile" :label-col="{span:8}" :rules="[{ required: true, message: '请输入法人电话!' }]">
  40. <label v-if="opCategory==3">{{dataModel.frMobile }}</label>
  41. <a-input v-model:value="dataModel.frMobile" placeholder=""/>
  42. </a-form-item>
  43. </a-col>
  44. </a-row>
  45. <a-row type="flex">
  46. <a-col :span="8">
  47. <a-form-item label="企业机构代码" name="companyCode" :label-col="{span:8}" :rules="[{ required: true, message: '请输入企业机构代码!' }]">
  48. <label v-if="opCategory==3">{{dataModel.companyCode }}</label>
  49. <a-input v-model:value="dataModel.companyCode" placeholder=""/>
  50. </a-form-item>
  51. </a-col>
  52. <a-col :span="7">
  53. <a-form-item
  54. label="经济类型"
  55. :label-col="{ span: 7 }"
  56. name="economicTypeID"
  57. >
  58. <a-select
  59. ref="select"
  60. style="width: 100%"
  61. v-model:value="dataModel.economicTypeID"
  62. :options="companyTypeList"
  63. :field-names="{ label: 'name', value: 'value' }"
  64. >
  65. </a-select>
  66. </a-form-item>
  67. </a-col>
  68. <a-col :span="8">
  69. <a-form-item
  70. label="注册地址行政区划"
  71. :label-col="{ span: 8 }"
  72. name="signInPoliticalArea"
  73. >
  74. <a-input v-model:value="dataModel.signInPoliticalArea"></a-input>
  75. </a-form-item>
  76. </a-col>
  77. </a-row>
  78. <a-row type="flex">
  79. <a-col :span="8">
  80. <a-form-item
  81. label="营业执照有效期"
  82. :label-col="{ span: 8 }"
  83. name="validDate"
  84. >
  85. <a-radio-group v-model:value="showPicker" name="showPicker">
  86. <a-radio value="1">至长期</a-radio>
  87. <a-radio value="2">
  88. <a-date-picker
  89. v-model:value="showDateTime"
  90. picker="date"
  91. value-format="YYYY-MM-DD"
  92. :disabled="showPicker === '1'"
  93. />
  94. </a-radio>
  95. </a-radio-group>
  96. </a-form-item>
  97. </a-col>
  98. <a-col :span="7">
  99. </a-col>
  100. <a-col :span="8">
  101. </a-col>
  102. </a-row>
  103. <a-divider orientation="left" v-if="opCategory==2">管理驿站 共计:{{manageSites.length}}</a-divider>
  104. <!-- <a-row>
  105. <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
  106. <Space>
  107. <a-button @click="addSite">
  108. <template #icon>
  109. <plus-circle-outlined/>
  110. </template>
  111. 新增
  112. </a-button>
  113. </Space>
  114. </a-col>
  115. </a-row>-->
  116. <a-row v-if="opCategory==2">
  117. <a-col style="margin-bottom: 20px;">
  118. <a-table :columns="columns" :data-source="manageSites" :pagination="pagination"
  119. :loading="formState.loading"
  120. @change="handleTableChange"
  121. :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
  122. :row-key="record=>record.siteId"
  123. bordered>
  124. <template #bodyCell="{ column ,index}">
  125. <template v-if="column.key === 'siteName'">
  126. <div>
  127. <a-input v-model:value="manageSites[index][column.key]" style="border:none;text-align: center;"></a-input>
  128. <!-- <a-select
  129. ref="select"
  130. v-model:value="manageSites[index][column.key]"
  131. :options="allSites"
  132. @change="manageSitesChange(index,manageSites[index][column.key])"
  133. :field-names="{ label: 'siteName', value: 'siteID' }" style="width: 200px" >
  134. </a-select>-->
  135. </div>
  136. </template>
  137. <template v-if="column.key === 'detailAddress'">
  138. {{manageSites[index][column.key]}}
  139. </template>
  140. <!-- <template v-if="column.key === 'operation'">
  141. <a-button type="link" size="small" @click="delSite(index)">删除</a-button>
  142. </template>-->
  143. </template>
  144. </a-table>
  145. </a-col>
  146. </a-row>
  147. <a-divider orientation="left">其他</a-divider>
  148. <a-row>
  149. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.companyDesc" :disabled="opCategory==3"
  150. placeholder="企业简介" style="text-align: left;vertical-align: middle;"/>
  151. </a-row>
  152. <a-row style="height: 10px"></a-row>
  153. <a-row>
  154. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.remark" :disabled="opCategory==3"
  155. placeholder="备注" style="text-align: left;" />
  156. </a-row>
  157. <a-form-item class="buttom-btns">
  158. <a-button @click="onClose">取消</a-button>
  159. <a-button type="primary" html-type="submit">提交</a-button>
  160. </a-form-item>
  161. </a-form>
  162. </div>
  163. </template>
  164. <script lang="ts">
  165. import {computed, defineComponent, reactive, ref, toRefs} from "vue";
  166. import {useTabsViewStore} from "@/store/modules/tabsView";
  167. import {getInstitutionByID, saveInstitution} from "@/api/baseSettings/institution";
  168. import {getSiteList,getListByInstitutionID,getSiteByID} from "@/api/baseSettings/siteInfo";
  169. import BUploadFile from "@/components/file/uploadFile.vue";
  170. import {message, type SelectProps, TableColumnsType, TableProps} from "ant-design-vue";
  171. import {getPaginationTotalTitle} from "@/utils/common";
  172. import {getSysDictionaryList} from "@/api/system/dictionary";
  173. import dayjs from "dayjs";
  174. interface InstitutionModel {
  175. dataModel: any;
  176. }
  177. export default defineComponent({
  178. name:'InstitutionEditForm',
  179. components: {BUploadFile},
  180. props: {
  181. loadData: {
  182. type: Function,
  183. default: null
  184. }
  185. },
  186. setup() {
  187. const title = ref();
  188. const opCategory = ref();
  189. const tabsViewStore = useTabsViewStore();
  190. const isAllowCommit = ref<boolean>(false);
  191. const formData = reactive<InstitutionModel>({ dataModel:{}});
  192. const pageParams = reactive({
  193. pageIndex: 1,
  194. pageSize: 10,
  195. institutionID:''
  196. });
  197. const columns: TableColumnsType = [
  198. {title: '序号', align: "center",key: 'siteID',customRender: item => `${pageParams.pageSize * (pageParams.pageIndex - 1) + item.index + 1}`},
  199. {title: '驿站名称', dataIndex: 'siteName', key: 'siteName', align: "center"},
  200. {title: '驿站地址', dataIndex: 'detailAddress', key: 'detailAddress', align: "center"},
  201. /* {title: '操作', key: 'operation', fixed: 'right',width:170, align: "center"},*/
  202. ];
  203. const pagination = computed(() => ({
  204. total: formState.total,
  205. current: pageParams.pageIndex,
  206. pageSize: pageParams.pageSize,
  207. showSizeChanger: true,
  208. showTotal: total => getPaginationTotalTitle(total)
  209. }));
  210. const onSelectChange = (selectedRowKeys: any) => {
  211. formState.selectedRowKeys = selectedRowKeys;
  212. };
  213. const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
  214. pageParams.pageIndex = pag.current;
  215. pageParams.pageSize = pag.pageSize;
  216. };
  217. const formState = reactive({
  218. total: 0,
  219. selectedRowKeys: [],
  220. loading: false
  221. });
  222. const allSites = ref<any>([]);
  223. const manageSites = ref<any>([]);
  224. const showPicker = ref('1');
  225. const showDateTime = ref<any>();
  226. const companyTypeList = ref<SelectProps['options']>();
  227. const getCompanyTypeList = async function () {
  228. const data: any = await getSysDictionaryList("CompanyType");
  229. companyTypeList.value = data;
  230. }
  231. const loadData = (institutionID: any,operateType:any) => {
  232. getAllSites();
  233. getCompanyTypeList();
  234. opCategory.value = operateType;
  235. getInstitutionByID(institutionID).then((result: any) => {
  236. formData.dataModel = result;
  237. GetManageSites(formData.dataModel.institutionID);
  238. showPicker.value = formData.dataModel.validDate == '2099-12-31T00:00:00.000+08:00' ? '1' : '2';
  239. if (showPicker.value === '1') {
  240. showDateTime.value = dayjs(new Date().toLocaleDateString().replaceAll("/", "-"));
  241. } else {
  242. showDateTime.value = formData.dataModel.validDate;
  243. }
  244. });
  245. }
  246. const getAllSites = () => {
  247. pageParams.institutionID = '';
  248. getSiteList(pageParams).then((result :any) => {
  249. allSites.value = result.list;
  250. // console.log('allSites',allSites);
  251. })
  252. }
  253. const GetManageSites = (id: string) => {
  254. pageParams.institutionID = id;
  255. getListByInstitutionID(pageParams).then((result :any)=> {
  256. manageSites.value = result.list;
  257. });
  258. }
  259. /* const addSite = () => {
  260. if(allSites.value.length >0){
  261. const newSite = allSites.value[0];
  262. (manageSites.value as any[]).push({siteID:newSite.siteID,siteName:newSite.siteName,detailAddress:newSite.detailAddress});
  263. validateSameSite();
  264. }else{
  265. message.error("未查询到站点信息!");
  266. }
  267. }
  268. const delSite = (site) =>{
  269. (manageSites.value as any[]).splice(site, 1);
  270. validateSameSite();
  271. }*/
  272. const manageSitesChange = (index:any,siteID:any) =>{
  273. getSiteByID(siteID).then((result :any)=> {
  274. manageSites.value[index]= result;
  275. // console.log("manageSites",manageSites.value);
  276. /*validateSameSite();*/
  277. });
  278. };
  279. /*const validateSameSite = ()=>{
  280. if(manageSites.value.length>1){
  281. manageSites.value.forEach(item=>{
  282. const sameData = manageSites.value.filter(x => x.siteID == item.siteID);
  283. // console.log("sameData",sameData);
  284. if (sameData.length >1){
  285. isAllowCommit.value = false;
  286. }
  287. });
  288. }
  289. };*/
  290. const mobileValidate = ()=>{
  291. isAllowCommit.value = true;
  292. const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
  293. if(!mobileReg.test(formData.dataModel.frMobile)){
  294. message.error("输入的法人电话有误!");
  295. isAllowCommit.value = false;
  296. }
  297. if(!mobileReg.test(formData.dataModel.fzrMobile)){
  298. message.error("输入的负责人电话有误!");
  299. isAllowCommit.value = false;
  300. }
  301. };
  302. const onClose = (reload: any) => {
  303. tabsViewStore.closeCurrentTabByPath('/baseSettings/institution/add');
  304. tabsViewStore.closeCurrentTabByPath('/baseSettings/institution/edit');
  305. tabsViewStore.openTab('/baseSettings/institution/index',{reload:reload});
  306. };
  307. const onFinish = () => {
  308. mobileValidate();
  309. if (showPicker.value === '1') {
  310. formData.dataModel.validDate = '2099-12-31T00:00:00.000+08:00';
  311. } else {
  312. formData.dataModel.validDate = showDateTime.value;
  313. }
  314. if (isAllowCommit.value){
  315. formData.dataModel.manageSites = manageSites.value;
  316. saveInstitution(formData.dataModel).then(result => {
  317. if (result) {
  318. onClose(1);
  319. }
  320. });
  321. }
  322. };
  323. return {
  324. ...toRefs(formData),
  325. loadData,
  326. onClose,
  327. onFinish,
  328. title,
  329. opCategory,
  330. columns,
  331. pageParams,
  332. pagination,
  333. formState,
  334. allSites,
  335. manageSites,
  336. isAllowCommit,
  337. companyTypeList,
  338. showPicker,
  339. showDateTime,
  340. getAllSites,
  341. GetManageSites,
  342. /*addSite,
  343. delSite,*/
  344. handleTableChange,
  345. onSelectChange,
  346. manageSitesChange,
  347. };
  348. },
  349. created() {
  350. const id = history.state.params?.id;
  351. const operateType = history.state.params?.op;
  352. this.loadData(id,operateType);
  353. },
  354. })
  355. </script>