index.vue 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413
  1. <template xmlns:el-col="http://www.w3.org/1999/html">
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="店铺名称" prop="storeName">
  5. <el-input
  6. v-model="queryParams.storeName"
  7. placeholder="请输入店铺名称"
  8. clearable
  9. size="small"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item label="地址" prop="address">
  14. <el-input
  15. v-model="queryParams.address"
  16. placeholder="请输入地址"
  17. clearable
  18. size="small"
  19. @keyup.enter.native="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item label="店铺电话" prop="phone">
  23. <el-input
  24. v-model="queryParams.phone"
  25. placeholder="请输入店铺电话"
  26. clearable
  27. size="small"
  28. @keyup.enter.native="handleQuery"
  29. />
  30. </el-form-item>
  31. <el-form-item label="状态" prop="status">
  32. <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
  33. <el-option
  34. v-for="dict in statusOptions"
  35. :key="dict.dictValue"
  36. :label="dict.dictLabel"
  37. :value="dict.dictValue"
  38. />
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="审核状态" prop="isAudit">
  42. <el-select v-model="queryParams.isAudit" placeholder="请选择审核状态" clearable size="small">
  43. <el-option
  44. v-for="dict in isAuditOptions"
  45. :key="dict.dictValue"
  46. :label="dict.dictLabel"
  47. :value="dict.dictValue"
  48. />
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item label="登录帐号" prop="account">
  52. <el-input
  53. v-model="queryParams.account"
  54. placeholder="请输入登录帐号"
  55. clearable
  56. size="small"
  57. @keyup.enter.native="handleQuery"
  58. />
  59. </el-form-item>
  60. <el-form-item label="店铺Id" prop="storeSeq">
  61. <el-input
  62. v-model="queryParams.storeSeq"
  63. placeholder="请输入店铺Id"
  64. clearable
  65. size="small"
  66. @keyup.enter.native="handleQuery"
  67. />
  68. </el-form-item>
  69. <el-form-item label="商家Id" prop="merchantId">
  70. <el-input
  71. v-model="queryParams.merchantId"
  72. placeholder="请输入商家Id"
  73. clearable
  74. size="small"
  75. @keyup.enter.native="handleQuery"
  76. />
  77. </el-form-item>
  78. <el-form-item>
  79. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  80. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  81. </el-form-item>
  82. </el-form>
  83. <el-row :gutter="10" class="mb8">
  84. <el-col :span="1.5">
  85. <el-button
  86. type="primary"
  87. plain
  88. icon="el-icon-plus"
  89. size="mini"
  90. @click="handleAdd"
  91. v-hasPermi="['his:store:add']"
  92. >新增</el-button>
  93. </el-col>
  94. <el-col :span="1.5">
  95. <el-button
  96. type="success"
  97. plain
  98. icon="el-icon-edit"
  99. size="mini"
  100. :disabled="single"
  101. @click="handleUpdate"
  102. v-hasPermi="['his:store:edit']"
  103. >修改</el-button>
  104. </el-col>
  105. <el-col :span="1.5">
  106. <el-button
  107. type="danger"
  108. plain
  109. icon="el-icon-delete"
  110. size="mini"
  111. :disabled="multiple"
  112. @click="handleDelete"
  113. v-hasPermi="['his:store:remove']"
  114. >删除</el-button>
  115. </el-col>
  116. <el-col :span="1.5">
  117. <el-button
  118. type="warning"
  119. plain
  120. icon="el-icon-download"
  121. size="mini"
  122. :loading="exportLoading"
  123. @click="handleExport"
  124. v-hasPermi="['his:store:export']"
  125. >导出</el-button>
  126. </el-col>
  127. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  128. </el-row>
  129. <el-table v-loading="loading" border :data="storeList" @selection-change="handleSelectionChange">
  130. <el-table-column type="selection" width="55" align="center" />
  131. <!-- <el-table-column label="店铺id" align="center" prop="storeId" width="120px"/>-->
  132. <el-table-column label="商家Id" align="center" prop="merchantId" width="150px"/>
  133. <el-table-column label="店铺Id" align="center" prop="storeSeq" width="150px"/>
  134. <el-table-column label="店铺名称" align="center" prop="storeName" width="120px"/>
  135. <el-table-column label="机构全称" align="center" prop="fullName" width="120px"/>
  136. <el-table-column label="店铺LOGO" align="center" prop="logoUrl" width="100px">
  137. <template slot-scope="scope">
  138. <el-popover
  139. placement="right"
  140. title=""
  141. trigger="hover">
  142. <img slot="reference" :src="scope.row.logoUrl" width="80px" height="80px">
  143. <img :src="scope.row.logoUrl" style="max-width: 160px;">
  144. </el-popover>
  145. </template>
  146. </el-table-column>
  147. <el-table-column label="地址" align="center" prop="address" width="200px"/>
  148. <el-table-column label="店铺电话" align="center" prop="phone" width="120px"/>
  149. <!-- <el-table-column label="资质证书" align="center" prop="licenseImages" width="100px">
  150. <template slot-scope="scope">
  151. <el-popover
  152. placement="right"
  153. title=""
  154. trigger="hover">
  155. <img slot="reference" :src="scope.row.licenseImages" width="80px">
  156. <img :src="scope.row.licenseImages" style="max-width: 150px;">
  157. </el-popover>
  158. </template>
  159. </el-table-column>
  160. <el-table-column label="营业执照" align="center" prop="bizLicense" width="100px">
  161. <template slot-scope="scope">
  162. <el-popover
  163. placement="right"
  164. title=""
  165. trigger="hover">
  166. <img slot="reference" :src="scope.row.bizLicense" width="80px">
  167. <img :src="scope.row.bizLicense" style="max-width: 150px;">
  168. </el-popover>
  169. </template>
  170. </el-table-column>-->
  171. <el-table-column label="审核状态" align="center" prop="isAudit">
  172. <template slot-scope="scope">
  173. <dict-tag :options="isAuditOptions" :value="scope.row.isAudit"/>
  174. </template>
  175. </el-table-column>
  176. <el-table-column label="商品总数" align="center" prop="productCount" />
  177. <el-table-column label="状态" align="center" prop="status">
  178. <template slot-scope="scope">
  179. <dict-tag :options="statusOptions" :value="scope.row.status"/>
  180. </template>
  181. </el-table-column>
  182. <el-table-column label="销量" align="center" prop="salesCount" />
  183. <el-table-column label="余额" align="center" prop="balance" />
  184. <el-table-column label="累计金额" align="center" prop="totalMoney" />
  185. <el-table-column label="登录帐号" align="center" prop="account" width="150px" />
  186. <el-table-column label="创建时间" align="center" prop="createTime" width="150px"/>
  187. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150px">
  188. <template slot-scope="scope">
  189. <el-button
  190. size="mini"
  191. type="text"
  192. icon="el-icon-edit"
  193. @click="handleUpdate(scope.row)"
  194. v-hasPermi="['his:store:edit']"
  195. >修改</el-button>
  196. <el-button
  197. size="mini"
  198. type="text"
  199. icon="el-icon-s-promotion"
  200. @click="handledetails(scope.row)"
  201. >详情
  202. </el-button>
  203. <el-button
  204. size="mini"
  205. type="text"
  206. icon="el-icon-delete"
  207. @click="handleDelete(scope.row)"
  208. v-hasPermi="['his:store:remove']"
  209. >删除</el-button>
  210. <el-button
  211. size="mini"
  212. type="text"
  213. icon="el-icon-refresh"
  214. @click="handleRefresh(scope.row)"
  215. v-hasPermi="['his:store:refresh']"
  216. >重置密码</el-button>
  217. <el-button
  218. size="mini"
  219. type="text"
  220. icon="el-icon-s-promotion"
  221. @click="handleStoreExport(scope.row)"
  222. >导出
  223. </el-button>
  224. </template>
  225. </el-table-column>
  226. </el-table>
  227. <pagination
  228. v-show="total>0"
  229. :total="total"
  230. :page.sync="queryParams.pageNum"
  231. :limit.sync="queryParams.pageSize"
  232. @pagination="getList"
  233. />
  234. <!-- 添加或修改店铺管理对话框 -->
  235. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body :close-on-click-modal="false">
  236. <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="top">
  237. <el-divider content-position="left">基础信息</el-divider>
  238. <el-row>
  239. <el-col :span="12">
  240. <el-form-item label="店铺名称" prop="storeName">
  241. <el-input v-model="form.storeName" placeholder="请输入店铺名称" />
  242. </el-form-item>
  243. </el-col>
  244. <el-col :span="12">
  245. <el-form-item label="电话" prop="phone">
  246. <el-input v-model="form.phone" placeholder="请输入店铺电话" />
  247. </el-form-item>
  248. </el-col>
  249. </el-row>
  250. <el-form-item label="企业全称" prop="fullName">
  251. <el-input v-model="form.fullName" placeholder="请输入企业全称" />
  252. </el-form-item>
  253. <el-row>
  254. <el-col :span="12">
  255. <el-form-item label="店铺LOGO" prop="logoUrl">
  256. <el-upload
  257. v-model="form.logoUrl"
  258. class="avatar-uploader"
  259. :action="uploadUrl"
  260. :show-file-list="false"
  261. :on-success="handleAvatarSuccess"
  262. :before-upload="beforeAvatarUpload">
  263. <img v-if="form.logoUrl" :src="form.logoUrl" class="avatar" width="200px">
  264. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  265. </el-upload>
  266. </el-form-item>
  267. </el-col >
  268. <el-col :span="12">
  269. </el-col>
  270. </el-row>
  271. <el-row>
  272. <el-col :span="24">
  273. <el-form-item label="店铺介绍" prop="descs" >
  274. <el-input v-model="form.descs" placeholder="请输入店铺介绍" type="textarea" maxlength="100"/>
  275. </el-form-item>
  276. </el-col>
  277. </el-row>
  278. <el-row>
  279. <el-col :span="12">
  280. <el-form-item label="所属城市" prop="cityIds">
  281. <el-cascader
  282. ref="citySelect"
  283. v-model="form.cityIds"
  284. :options="citys"
  285. @change="handleCityChange">
  286. </el-cascader>
  287. </el-form-item>
  288. </el-col>
  289. <el-col :span="12">
  290. <el-form-item label="地址" prop="address">
  291. <el-input v-model="form.address" placeholder="请输入地址"/>
  292. </el-form-item>
  293. </el-col>
  294. </el-row>
  295. <el-row>
  296. <el-col :span="12">
  297. <el-form-item label="法人姓名" prop="legalPersonName">
  298. <el-input v-model="form.legalPersonName" placeholder="请输入法人姓名" />
  299. </el-form-item>
  300. </el-col>
  301. <el-col :span="12">
  302. <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode">
  303. <el-input v-model="form.unifiedSocialCreditCode" placeholder="请输入统一社会信用代码" />
  304. </el-form-item>
  305. </el-col>
  306. </el-row>
  307. <el-form-item label="营业范围" prop="businessScope">
  308. <el-input v-model="form.businessScope" placeholder="请输入营业范围" type="textarea" />
  309. </el-form-item>
  310. <!-- 证书上传相关字段 -->
  311. <el-divider content-position="left">资质证书信息</el-divider>
  312. <el-row>
  313. <el-col :span="12">
  314. <el-form-item label="营业执照上传" prop="businessLicense">
  315. <el-upload
  316. class="avatar-uploader"
  317. :action="uploadUrl"
  318. :show-file-list="false"
  319. :on-success="(response, file) => handleFileSuccess(response, file, 'businessLicense')"
  320. :before-upload="beforeAvatarUpload">
  321. <img v-if="form.businessLicense" :src="form.businessLicense" class="avatar" width="100px">
  322. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  323. </el-upload>
  324. </el-form-item>
  325. <el-col :span="12">
  326. <el-form-item label="营业执照编号" prop="businessCode" style="margin-left: 5px;margin-bottom: 20px">
  327. <el-input v-model="form.businessCode" placeholder="请输入营业制造编号" />
  328. </el-form-item>
  329. </el-col>
  330. </el-col>
  331. <el-col :span="12">
  332. <el-form-item label="营业执照是否长期有效" prop="isBusinessLicensePermanent">
  333. <el-switch
  334. @change="switchChange()"
  335. v-model="switchValue"
  336. active-color="#13ce66"
  337. inactive-color="#ff4949">
  338. </el-switch>
  339. </el-form-item>
  340. <el-form-item label="营业执照失效日期" prop="businessLicenseExpire" v-if="!switchValue">
  341. <el-date-picker
  342. v-model="form.businessLicenseExpire"
  343. type="daterange"
  344. value-format="yyyy-MM-dd"
  345. range-separator="至"
  346. start-placeholder="开始日期"
  347. end-placeholder="结束日期">
  348. </el-date-picker>
  349. </el-form-item>
  350. </el-col>
  351. </el-row>
  352. <div v-if="medicalMallConfig.isMedicalMall">
  353. <el-row>
  354. <el-col :span="12">
  355. <el-form-item label="药品经营许可证上传" prop="drugLicense">
  356. <el-upload
  357. class="avatar-uploader"
  358. :action="uploadUrl"
  359. :show-file-list="false"
  360. :on-success="(response, file) => handleFileSuccess(response, file, 'drugLicense')"
  361. :before-upload="beforeAvatarUpload">
  362. <img v-if="form.drugLicense" :src="form.drugLicense" class="avatar" width="100px">
  363. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  364. </el-upload>
  365. </el-form-item>
  366. <el-col :span="14">
  367. <el-form-item label="药品经营许可证编号" prop="drugCode" style="margin-left: 5px">
  368. <el-input v-model="form.drugCode" placeholder="请输入药品经营许可证编号" />
  369. </el-form-item>
  370. </el-col>
  371. </el-col>
  372. <el-col :span="12">
  373. <el-form-item label="药品经营许可证有效期" prop="drugLicenseExpiry">
  374. <el-date-picker
  375. v-model="form.drugLicenseExpiry"
  376. type="daterange"
  377. value-format="yyyy-MM-dd"
  378. range-separator="至"
  379. start-placeholder="开始日期"
  380. end-placeholder="结束日期">
  381. </el-date-picker>
  382. </el-form-item>
  383. </el-col>
  384. </el-row>
  385. <el-row>
  386. <el-col :span="12">
  387. <el-form-item label="1类器械生产备案上传" prop="medicalDevice1">
  388. <el-upload
  389. class="avatar-uploader"
  390. :action="uploadUrl"
  391. :show-file-list="false"
  392. :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice1')"
  393. :before-upload="beforeAvatarUpload">
  394. <img v-if="form.medicalDevice1" :src="form.medicalDevice1" class="avatar" width="100px">
  395. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  396. </el-upload>
  397. </el-form-item>
  398. <el-col :span="14">
  399. <el-form-item label="1类器械生产备案编号" prop="medicalDevice1Code" style="margin-left: 5px">
  400. <el-input v-model="form.medicalDevice1Code" placeholder="请输入1类器械生产备案编号" />
  401. </el-form-item>
  402. </el-col>
  403. </el-col>
  404. <el-col :span="12">
  405. <el-form-item label="1类医疗器械是否长期有效" prop="isMedicalDevice1ExpiryPermanent">
  406. <el-switch
  407. @change="switchChange()"
  408. v-model="switchMedicalValue"
  409. active-color="#13ce66"
  410. inactive-color="#ff4949">
  411. </el-switch>
  412. </el-form-item>
  413. <el-form-item label="1类生产备案有效期" prop="medicalDevice1Expiry" v-if="!switchMedicalValue">
  414. <el-date-picker
  415. v-model="form.medicalDevice1Expiry"
  416. type="daterange"
  417. value-format="yyyy-MM-dd"
  418. range-separator="至"
  419. start-placeholder="开始日期"
  420. end-placeholder="结束日期">
  421. </el-date-picker>
  422. </el-form-item>
  423. </el-col>
  424. </el-row>
  425. <el-row>
  426. <el-col :span="12">
  427. <el-form-item label="2类医疗器械备案证书上传" prop="medicalDevice2">
  428. <el-upload
  429. class="avatar-uploader"
  430. :action="uploadUrl"
  431. :show-file-list="false"
  432. :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice2')"
  433. :before-upload="beforeAvatarUpload">
  434. <img v-if="form.medicalDevice2" :src="form.medicalDevice2" class="avatar" width="100px">
  435. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  436. </el-upload>
  437. </el-form-item>
  438. <el-col :span="14">
  439. <el-form-item label="2类器械生产备案编号" prop="medicalDevice2Code" style="margin-left: 5px">
  440. <el-input v-model="form.medicalDevice2Code" placeholder="请输入2类器械生产备案编号" />
  441. </el-form-item>
  442. </el-col>
  443. </el-col>
  444. <el-col :span="12">
  445. <el-form-item label="2类医疗器械备案有效期" prop="medicalDevice2Expiry">
  446. <el-date-picker
  447. v-model="form.medicalDevice2Expiry"
  448. type="daterange"
  449. value-format="yyyy-MM-dd"
  450. range-separator="至"
  451. start-placeholder="开始日期"
  452. end-placeholder="结束日期">
  453. </el-date-picker>
  454. </el-form-item>
  455. </el-col>
  456. </el-row>
  457. <el-row>
  458. <el-col :span="12">
  459. <el-form-item label="3类器械经营许可证上传" prop="medicalDevice3">
  460. <el-upload
  461. class="avatar-uploader"
  462. :action="uploadUrl"
  463. :show-file-list="false"
  464. :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice3')"
  465. :before-upload="beforeAvatarUpload">
  466. <img v-if="form.medicalDevice3" :src="form.medicalDevice3" class="avatar" width="100px">
  467. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  468. </el-upload>
  469. </el-form-item>
  470. <el-form-item label="3类器械生产备案编号" prop="medicalDevice3Code" style="margin-left: 5px">
  471. <el-input v-model="form.medicalDevice3Code" placeholder="请输入3类器械生产备案编号" />
  472. </el-form-item>
  473. </el-col>
  474. <el-col :span="12">
  475. <el-form-item label="3类器械经营许可证有效期" prop="medicalDevice3Expiry">
  476. <el-date-picker
  477. v-model="form.medicalDevice3Expiry"
  478. type="daterange"
  479. value-format="yyyy-MM-dd"
  480. range-separator="至"
  481. start-placeholder="开始日期"
  482. end-placeholder="结束日期">
  483. </el-date-picker>
  484. </el-form-item>
  485. </el-col>
  486. </el-row>
  487. <el-row>
  488. <el-col :span="12">
  489. <el-form-item label="食品经营许可证上传" prop="foodLicense">
  490. <el-upload
  491. class="avatar-uploader"
  492. :action="uploadUrl"
  493. :show-file-list="false"
  494. :on-success="(response, file) => handleFileSuccess(response, file, 'foodLicense')"
  495. :before-upload="beforeAvatarUpload">
  496. <img v-if="form.foodLicense" :src="form.foodLicense" class="avatar" width="100px">
  497. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  498. </el-upload>
  499. </el-form-item>
  500. <el-form-item label="食品经营许可证编号" prop="foodCode" style="margin-left: 5px">
  501. <el-input v-model="form.foodCode" placeholder="请输入食品经营许可证编号" />
  502. </el-form-item>
  503. </el-col>
  504. <el-col :span="12">
  505. <el-form-item label="食品经营许可证有效期" prop="foodLicenseExpiry">
  506. <el-date-picker
  507. v-model="form.foodLicenseExpiry"
  508. type="daterange"
  509. value-format="yyyy-MM-dd"
  510. range-separator="至"
  511. start-placeholder="开始日期"
  512. end-placeholder="结束日期">
  513. </el-date-picker>
  514. </el-form-item>
  515. </el-col>
  516. </el-row>
  517. <el-row>
  518. <el-col :span="12">
  519. <el-form-item label="医疗机构执业许可证上传" prop="medicalLicense">
  520. <el-upload
  521. class="avatar-uploader"
  522. :action="uploadUrl"
  523. :show-file-list="false"
  524. :on-success="(response, file) => handleFileSuccess(response, file, 'medicalLicense')"
  525. :before-upload="beforeAvatarUpload">
  526. <img v-if="form.medicalLicense" :src="form.medicalLicense" class="avatar" width="100px">
  527. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  528. </el-upload>
  529. </el-form-item>
  530. <el-form-item label="医疗机构执业许可证编号" prop="medicalCode" style="margin-left: 5px">
  531. <el-input v-model="form.medicalCode" placeholder="请输入医疗机构执业许可证编号" />
  532. </el-form-item>
  533. </el-col>
  534. <el-col :span="12">
  535. <el-form-item label="医疗机构执业许可证有效期" prop="medicalLicenseExpiry">
  536. <el-date-picker
  537. v-model="form.medicalLicenseExpiry"
  538. type="daterange"
  539. value-format="yyyy-MM-dd"
  540. range-separator="至"
  541. start-placeholder="开始日期"
  542. end-placeholder="结束日期">
  543. </el-date-picker>
  544. </el-form-item>
  545. </el-col>
  546. </el-row>
  547. </div>
  548. <div v-hasPermi="['his:store:AgreementSigned']">
  549. <el-divider content-position="left">签署协议与特殊资质信息</el-divider>
  550. <el-row>
  551. <el-col :span="12">
  552. <el-form-item label="其它资质-入驻协议">
  553. <el-upload
  554. class="avatar-uploader"
  555. :action="uploadUrl"
  556. :show-file-list="false"
  557. :on-success="(response, file) => handleFileSuccess(response, file, 'settlementAgreement')"
  558. :before-upload="beforeAvatarUpload">
  559. <img v-if="form.settlementAgreement" :src="form.settlementAgreement" class="avatar" width="100px" />
  560. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  561. </el-upload>
  562. </el-form-item>
  563. <el-form-item label="其它资质-入驻协议编号" prop="settlementAgreementCode" style="margin-left: 5px">
  564. <el-input v-model="form.settlementAgreementCode" placeholder="请输入其它资质-入驻协议编号" />
  565. </el-form-item>
  566. </el-col>
  567. <el-col :span="12">
  568. <el-form-item label="其它资质-入驻协议有效期">
  569. <el-date-picker
  570. v-model="form.settlementAgreementExpiry"
  571. type="daterange"
  572. value-format="yyyy-MM-dd"
  573. range-separator="至"
  574. start-placeholder="开始日期"
  575. end-placeholder="结束日期">
  576. </el-date-picker>
  577. </el-form-item>
  578. </el-col>
  579. </el-row>
  580. <el-row>
  581. <el-col :span="12">
  582. <el-form-item label="质量保证协议">
  583. <el-upload
  584. class="avatar-uploader"
  585. :action="uploadUrl"
  586. :show-file-list="false"
  587. :on-success="(response, file) => handleFileSuccess(response, file, 'qualityAssuranceAgreement')"
  588. :before-upload="beforeAvatarUpload">
  589. <img v-if="form.qualityAssuranceAgreement" :src="form.qualityAssuranceAgreement" class="avatar" width="100px">
  590. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  591. </el-upload>
  592. </el-form-item>
  593. <el-form-item label="质量保证协议编号" prop="qualityAssuranceAgreementCode" style="margin-left: 5px">
  594. <el-input v-model="form.qualityAssuranceAgreementCode" placeholder="请输入质量保证协议编号" />
  595. </el-form-item>
  596. </el-col>
  597. <el-col :span="12">
  598. <el-form-item label="质量保证协议有效期">
  599. <el-date-picker
  600. v-model="form.qualityAssuranceAgreementExpiry"
  601. type="daterange"
  602. value-format="yyyy-MM-dd"
  603. range-separator="至"
  604. start-placeholder="开始日期"
  605. end-placeholder="结束日期">
  606. </el-date-picker>
  607. </el-form-item>
  608. </el-col>
  609. </el-row>
  610. <el-row>
  611. <el-col :span="12">
  612. <el-form-item label="其它特殊资质">
  613. <el-upload
  614. class="avatar-uploader"
  615. :action="uploadUrl"
  616. :show-file-list="false"
  617. :on-success="(response, file) => handleFileSuccess(response, file, 'otherSpecialQualification')"
  618. :before-upload="beforeAvatarUpload">
  619. <img v-if="form.otherSpecialQualification" :src="form.otherSpecialQualification" class="avatar" width="100px">
  620. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  621. </el-upload>
  622. </el-form-item>
  623. <el-form-item label="其它特殊资质编号" prop="otherSpecialQualificationCode" style="margin-left: 5px">
  624. <el-input v-model="form.otherSpecialQualificationCode" placeholder="请输入其它特殊资质编号" />
  625. </el-form-item>
  626. </el-col>
  627. <el-col :span="12">
  628. <el-form-item label="其它特殊资质有效期">
  629. <el-date-picker
  630. v-model="form.otherSpecialQualificationExpiry"
  631. type="daterange"
  632. value-format="yyyy-MM-dd"
  633. range-separator="至"
  634. start-placeholder="开始日期"
  635. end-placeholder="结束日期">
  636. </el-date-picker>
  637. </el-form-item>
  638. </el-col>
  639. </el-row>
  640. </div>
  641. <el-divider content-position="left">店铺配置信息</el-divider>
  642. <el-form-item label="退货地址" prop="refundAddress">
  643. <el-input v-model="form.refundAddress" placeholder="请输入退货地址" />
  644. </el-form-item>
  645. <el-row>
  646. <el-col :span="12">
  647. <el-form-item label="退货电话" prop="refundPhone">
  648. <el-input v-model="form.refundPhone" placeholder="请输入退货电话" />
  649. </el-form-item>
  650. </el-col>
  651. <el-col :span="12">
  652. <el-form-item label="退货收货人" prop="refundConsignee">
  653. <el-input v-model="form.refundConsignee" placeholder="请输入退货收货人" />
  654. </el-form-item>
  655. </el-col>
  656. </el-row>
  657. <el-form-item label="寄件人电话" prop="sendPhone">
  658. <el-input v-model="form.sendPhone" placeholder="请输入寄件人电话" />
  659. </el-form-item>
  660. <el-row>
  661. <el-col :span="12">
  662. <el-form-item label="商品总数" prop="productCount">
  663. <el-input-number v-model="form.productCount" :min="0" label="描述文字"></el-input-number>
  664. </el-form-item>
  665. </el-col>
  666. <el-col :span="12">
  667. <el-form-item label="销量" prop="salesCount">
  668. <el-input-number v-model="form.salesCount" :min="0" label="描述文字"></el-input-number>
  669. </el-form-item>
  670. </el-col>
  671. </el-row>
  672. <el-row>
  673. <el-col :span="12">
  674. <el-form-item label="累计金额" prop="totalMoney">
  675. <el-input-number v-model="form.totalMoney" :precision="2" :step="0.1"></el-input-number>
  676. </el-form-item>
  677. </el-col>
  678. <el-col :span="12">
  679. <!-- <el-form-item label="分佣比例%" prop="shippingType">
  680. <el-input-number v-model="form.brokerageRate" :min="0" :max="100"></el-input-number>
  681. </el-form-item> -->
  682. </el-col>
  683. </el-row>
  684. <el-row>
  685. <el-col :span="12">
  686. <el-form-item label="状态">
  687. <el-radio-group v-model="form.status">
  688. <el-radio
  689. v-for="dict in statusOptions"
  690. :key="dict.dictValue"
  691. :label="parseInt(dict.dictValue)"
  692. >{{dict.dictLabel}}</el-radio>
  693. </el-radio-group>
  694. </el-form-item>
  695. </el-col>
  696. <el-col :span="12">
  697. <el-form-item label="分佣方式" prop="brokerageType" >
  698. <el-radio v-model="form.brokerageType" label="1">每盒</el-radio>
  699. <el-radio v-model="form.brokerageType" label="2">总价</el-radio>
  700. </el-form-item>
  701. </el-col>
  702. </el-row>
  703. <el-form-item label="配送方式" prop="shippingType">
  704. <el-checkbox-group v-model="form.shippingType" size="medium">
  705. <el-checkbox v-for="(item, index) in shippingTypeOptions" :key="index" :label="item.value"
  706. :disabled="item.disabled">{{item.label}}</el-checkbox>
  707. </el-checkbox-group>
  708. </el-form-item>
  709. <el-divider content-position="left">登录信息</el-divider>
  710. <el-form-item label="登录帐号" prop="account" v-if="title != '修改店铺管理'">
  711. <el-input v-model="form.account" placeholder="请输入登录帐号" />
  712. </el-form-item>
  713. <!-- tips-->
  714. <span class="tip-text" v-if="title !== '修改店铺管理'">请及时修改密码,初试密码XyzAbc~12</span>
  715. </el-form>
  716. <div slot="footer" class="dialog-footer">
  717. <el-button type="primary" @click="submitForm">确 定</el-button>
  718. <el-button @click="cancel">取 消</el-button>
  719. </div>
  720. </el-dialog>
  721. <el-drawer
  722. :with-header="false"
  723. size="75%"
  724. :title="show.title" :visible.sync="show.open">
  725. <storeDetails ref="Details" />
  726. </el-drawer>
  727. <el-dialog
  728. title="店铺资质消息提示"
  729. :visible.sync="dialogVisible"
  730. width="40%"
  731. center>
  732. <div v-for="(item,index) in promptList">({{index+1}})、{{item}}</div>
  733. <span slot="footer" class="dialog-footer">
  734. <el-button type="primary" @click="dialogVisible = false">已 知 晓</el-button>
  735. </span>
  736. </el-dialog>
  737. </div>
  738. </template>
  739. <script>
  740. import { listStore, getStore, delStore, addStore, updateStore, exportStore, refreshPasWod,exportFsStream } from '@/api/hisStore/store'
  741. import storeDetails from '../components/storeDetails.vue';
  742. import {getCitys} from "@/api/store/city";
  743. import { getConfigByKey } from '@/api/system/config'
  744. import { qualifications } from '@/api/system/user';
  745. export default {
  746. name: "Store",
  747. components: { storeDetails },
  748. data() {
  749. return {
  750. promptList:[],
  751. dialogVisible: false,
  752. switchValue:false,
  753. switchMedicalValue:false,
  754. show: {
  755. title: "店铺详情",
  756. open: false,
  757. },
  758. shippingType: [],
  759. medicalMallConfig:{},
  760. citys: [],
  761. licenseuploadUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS",
  762. uploadUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS",
  763. baseUrl: process.env.VUE_APP_BASE_API,
  764. shippingTypeOptions: [{
  765. "label": "配送",
  766. "value": "1"
  767. }, {
  768. "label": "自提",
  769. "value": "2"
  770. }, {
  771. "label": "配送自提",
  772. "value": "3"
  773. }],
  774. // 遮罩层
  775. loading: true,
  776. // 导出遮罩层
  777. exportLoading: false,
  778. // 选中数组
  779. ids: [],
  780. // 非单个禁用
  781. single: true,
  782. // 非多个禁用
  783. multiple: true,
  784. // 显示搜索条件
  785. showSearch: true,
  786. // 总条数
  787. total: 0,
  788. // 店铺管理表格数据
  789. storeList: [],
  790. // 弹出层标题
  791. title: "",
  792. // 是否显示弹出层
  793. open: false,
  794. // 状态字典
  795. statusOptions: [],
  796. // 审核状态字典
  797. isAuditOptions: [],
  798. deliveryTypeOptions: [],
  799. // 查询参数
  800. queryParams: {
  801. pageNum: 1,
  802. pageSize: 10,
  803. storeName: null,
  804. address: null,
  805. phone: null,
  806. status: null,
  807. isAudit: null,
  808. account: null,
  809. },
  810. // 表单参数
  811. form: {},
  812. // 表单校验
  813. rules: {
  814. storeName: [
  815. { required: true, message: "店铺名称不能为空", trigger: "blur" }
  816. ],
  817. fullName: [
  818. { required: true, message: "店铺名称不能为空", trigger: "blur" }
  819. ],
  820. businessLicenseExpire: [
  821. { required: true, message: "营业执照失效日期不能为空", trigger: "blur" }
  822. ],
  823. businessLicense: [
  824. { required: true, message: "营业执照不能为空", trigger: "blur" }
  825. ],
  826. businessCode:[
  827. { required: true, message: "营业执照编号不能为空", trigger: "blur" }
  828. ],
  829. drugLicense:[
  830. { required: true, message: "药品经营许可证不能为空", trigger: "blur" }
  831. ],
  832. drugLicenseExpiry:[
  833. { required: true, message: "药品经营许可证有效期不能为空", trigger: "blur" }
  834. ],
  835. drugCode:[
  836. { required: true, message: "药品经营许可证编号不能为空", trigger: "blur" }
  837. ],
  838. // medicalLicense:[
  839. // { required: true, message: "医疗机构执业许可证不能为空", trigger: "blur" }
  840. // ],
  841. // medicalCode:[
  842. // { required: true, message: "医疗机构执业许可证编号不能为空", trigger: "blur" }
  843. // ],
  844. // medicalLicenseExpiry:[
  845. // { required: true, message: "医疗机构执业许可证有效期不能为空", trigger: "blur" }
  846. // ],
  847. medicalDevice2:[
  848. { required: true, message: "2类医疗器械备案证不能为空", trigger: "blur" }
  849. ],
  850. medicalDevice2Expiry:[
  851. { required: true, message: "2类医疗器械备案证有效期不能为空", trigger: "blur" }
  852. ],
  853. medicalDevice2Code:[
  854. { required: true, message: "2类医疗器械备案证编号不能为空", trigger: "blur" }
  855. ],
  856. logoUrl: [
  857. { required: true, message: "店铺LOGO不能为空", trigger: "blur" }
  858. ],
  859. cityIds: [
  860. { required: true, message: "所属城市不能为空", trigger: "blur" }
  861. ],
  862. address: [
  863. { required: true, message: "地址不能为空", trigger: "blur" }
  864. ],
  865. licenseImages: [
  866. { required: true, message: "资质证书不能为空", trigger: "blur" }
  867. ],
  868. shippingType: [
  869. { required: true, message: "配送方式不能为空", trigger: "blur" }
  870. ],
  871. account: [
  872. { required: true, message: "登录账号不能为空", trigger: "blur" }
  873. ],
  874. brokerageType: [
  875. { required: true, message: "分佣方式不能为空", trigger: "blur" }
  876. ],
  877. refundPhone: [
  878. { required: true, message: "退货电话不能为空", trigger: "blur" }
  879. ],
  880. refundAddress: [
  881. { required: true, message: "退货地址不能为空", trigger: "blur" }
  882. ],
  883. refundConsignee: [
  884. { required: true, message: "退货收货人不能为空", trigger: "blur" }
  885. ],
  886. sendPhone: [
  887. { required: true, message: "寄件人电话不能为空", trigger: "blur" },
  888. ],
  889. phone: [
  890. {
  891. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  892. message: "请输入正确的手机号码",
  893. trigger: "blur",
  894. required: true
  895. }
  896. ],
  897. // 新增字段校验规则
  898. enterpriseShortName: [
  899. { required: true, message: "企业简称不能为空", trigger: "blur" }
  900. ],
  901. enterpriseFullName: [
  902. { required: true, message: "企业全称不能为空", trigger: "blur" }
  903. ],
  904. contactPhone: [
  905. { required: true, message: "电话号码不能为空", trigger: "blur" }
  906. ],
  907. enterpriseAddress: [
  908. { required: true, message: "企业地址不能为空", trigger: "blur" }
  909. ],
  910. legalPersonName: [
  911. { required: true, message: "法人姓名不能为空", trigger: "blur" }
  912. ],
  913. unifiedSocialCreditCode: [
  914. { required: true, message: "统一社会信用代码不能为空", trigger: "blur" }
  915. ],
  916. businessScope: [
  917. { required: true, message: "营业范围不能为空", trigger: "blur" }
  918. ],
  919. password: [
  920. { required: true, message: "新密码不能为空", trigger: "blur" },
  921. { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
  922. ],
  923. }
  924. };
  925. },
  926. created() {
  927. this.getCitys();
  928. this.getList();
  929. getConfigByKey("medicalMall.func.switch").then(response => {
  930. if(response.data && response.data.configValue) {
  931. this.medicalMallConfig = JSON.parse(response.data.configValue);
  932. }
  933. });
  934. this.getDicts("sys_company_status").then(response => {
  935. this.statusOptions = response.data;
  936. });
  937. this.getDicts("sys_company_isaudit").then(response => {
  938. this.isAuditOptions = response.data;
  939. });
  940. this.getDicts("sys_store_delivery_type").then(response => {
  941. this.deliveryTypeOptions = response.data;
  942. });
  943. this.$nextTick(()=>{
  944. console.log("是否执行资质提示方法")
  945. this.handleNoticeInfo();
  946. })
  947. },
  948. methods: {
  949. handleNoticeInfo() {
  950. qualifications()
  951. .then(response => {
  952. console.log("noticeInfo接口完整响应:", response);
  953. if (response.code === 200) {
  954. this.promptList = response.data;
  955. if (this.promptList && this.promptList.length > 0) {
  956. this.dialogVisible = true;
  957. }
  958. console.log("通知信息请求完成!", this.promptList);
  959. } else {
  960. console.warn("接口返回非成功状态:", response.code);
  961. }
  962. })
  963. .catch(err => {
  964. console.error("获取通知信息失败:", err);
  965. this.$message.error("加载通知信息失败,请稍后重试");
  966. });
  967. },
  968. handledetails(row) {
  969. this.show.open = true;
  970. setTimeout(() => {
  971. this.$refs.Details.getDetails(row.storeId,0);
  972. }, 1);
  973. },
  974. handleCityChange(value) {
  975. var nodes = this.$refs.citySelect.getCheckedNodes();
  976. this.form.address = nodes[0].pathLabels[0] + nodes[0].pathLabels[1] + nodes[0].pathLabels[2];
  977. this.form.cityIds = value.toString();
  978. },
  979. getCitys() {
  980. getCitys().then(res => {
  981. this.loading = false;
  982. this.citys = res.data;
  983. })
  984. },
  985. licensehandleAvatarSuccess(res, file) {
  986. if (res.code === 200) {
  987. this.form.licenseImages = res.url;
  988. this.$forceUpdate()
  989. } else {
  990. this.msgError(res.msg);
  991. }
  992. },
  993. handleAvatarSuccess(res, file) {
  994. if (res.code === 200) {
  995. this.form.logoUrl = res.url;
  996. this.$forceUpdate()
  997. } else {
  998. this.msgError(res.msg);
  999. }
  1000. },
  1001. beforeAvatarUpload(file) {
  1002. const isLt1M = file.size / 1024 / 1024 < 1;
  1003. if (!isLt1M) {
  1004. this.$message.error('上传图片大小不能超过 1MB!');
  1005. }
  1006. return isLt1M;
  1007. },
  1008. handleBizLicenseSuccess(res, file) {
  1009. if (res.code === 200) {
  1010. this.form.bizLicense = res.url;
  1011. this.$forceUpdate()
  1012. } else {
  1013. this.msgError(res.msg);
  1014. }
  1015. },
  1016. beforeBizLicenseUpload(file) {
  1017. const isLt1M = file.size / 1024 / 1024 < 5;
  1018. if (!isLt1M) {
  1019. this.$message.error('上传图片大小不能超过 5MB!');
  1020. }
  1021. return isLt1M;
  1022. },
  1023. // 通用文件上传成功处理函数
  1024. handleFileSuccess(response, file, field) {
  1025. if (response.code === 200) {
  1026. this.$set(this.form, field, response.url);
  1027. this.$forceUpdate();
  1028. } else {
  1029. this.msgError(response.msg);
  1030. }
  1031. },
  1032. /** 查询店铺管理列表 */
  1033. getList() {
  1034. this.loading = true;
  1035. listStore(this.queryParams).then(response => {
  1036. this.storeList = response.rows;
  1037. this.total = response.total;
  1038. this.loading = false;
  1039. });
  1040. },
  1041. // 取消按钮
  1042. cancel() {
  1043. this.open = false;
  1044. this.reset();
  1045. },
  1046. // 表单重置
  1047. reset() {
  1048. this.switchValue = false;
  1049. this.switchMedicalValue=false;
  1050. this.form = {
  1051. storeId: null,
  1052. cityIds: null,
  1053. storeName: null,
  1054. descs: null,
  1055. logoUrl: null,
  1056. address: null,
  1057. lng: null,
  1058. lat: null,
  1059. phone: null,
  1060. licenseImages: null,
  1061. productCount: null,
  1062. status: 0,
  1063. createTime: null,
  1064. updateTime: null,
  1065. salesCount: null,
  1066. balance: null,
  1067. totalMoney: null,
  1068. isAudit: 0,
  1069. account: null,
  1070. password: null,
  1071. shippingType: ["1"],
  1072. brokerageType: "1",
  1073. brokerageRate: 0,
  1074. fullName: null,
  1075. // 重置新增字段
  1076. enterpriseShortName: null, // 企业简称
  1077. enterpriseFullName: null, // 企业全称
  1078. contactPhone: null, // 联系电话
  1079. enterpriseAddress: null, // 企业地址
  1080. legalPersonName: null, // 法人姓名
  1081. unifiedSocialCreditCode: null, // 统一社会信用代码
  1082. businessScope: null, // 营业范围
  1083. // 重置证书相关字段
  1084. businessLicense: null, // 营业执照文件
  1085. businessLicenseExpire: null, // 营业执照失效日期
  1086. drugLicense: null, // 药品经营许可证有效期
  1087. drugLicenseExpiry: null, // 药品经营许可证文件
  1088. // 医疗器械相关证书
  1089. medicalDevice1: null, // 一类医疗器械备案证书
  1090. medicalDevice1Expiry: null, // 二类医疗器械备案有效期
  1091. medicalDevice2: null, // 二类器械生产备案文件
  1092. medicalDevice2Expiry: null, // 一类生产备案有效期
  1093. medicalDevice3: null, // 三类器械经营许可证文件
  1094. medicalDevice3Expiry: null, // 三类器械经营许可证有效期
  1095. // 其他许可证相关字段
  1096. foodLicense: null, // 食品经营许可证文件
  1097. foodLicenseExpiry: null, // 食品经营许可证有效期
  1098. medicalLicense: null, // 医疗机构执业许可证文件
  1099. medicalLicenseExpiry: null, // 医疗机构执业许可证有效期
  1100. settlementAgreement: null, //其它资质-入驻协议
  1101. settlementAgreementExpiry: null,//其它资质-有效期
  1102. qualityAssuranceAgreement: null,//质量保证协议
  1103. qualityAssuranceAgreementExpiry: null,//质量保证协议有效期
  1104. otherSpecialQualification: null,//其它特殊资质
  1105. otherSpecialQualificationExpiry: null,//其它特殊资质有效期
  1106. businessCode: null,
  1107. drugCode:null,
  1108. medicalDevice1Code:null,
  1109. medicalDevice2Code:null,
  1110. medicalDevice3Code:null,
  1111. foodCode:null,
  1112. medicalCode:null,
  1113. otherSpecialQualificationCode:null,
  1114. qualityAssuranceAgreementCode:null,
  1115. settlementAgreementCode: null,
  1116. };
  1117. this.resetForm("form");
  1118. },
  1119. /** 搜索按钮操作 */
  1120. handleQuery() {
  1121. this.queryParams.pageNum = 1;
  1122. this.getList();
  1123. },
  1124. /** 重置按钮操作 */
  1125. resetQuery() {
  1126. this.resetForm("queryForm");
  1127. this.handleQuery();
  1128. },
  1129. // 多选框选中数据
  1130. handleSelectionChange(selection) {
  1131. this.ids = selection.map(item => item.storeId)
  1132. this.single = selection.length !== 1
  1133. this.multiple = !selection.length
  1134. },
  1135. /** 新增按钮操作 */
  1136. handleAdd() {
  1137. this.reset();
  1138. this.open = true;
  1139. this.title = "添加店铺";
  1140. },
  1141. /** 修改按钮操作 */
  1142. handleUpdate(row) {
  1143. this.reset();
  1144. const storeId = row.storeId || this.ids
  1145. getStore(storeId).then(response => {
  1146. this.form = response.data;
  1147. if(this.form.isBusinessLicensePermanent == 1){
  1148. this.switchValue = true;
  1149. }
  1150. if(this.form.isMedicalDevice1ExpiryPermanent == 1){
  1151. this.switchMedicalValue = true;
  1152. }
  1153. this.open = true;
  1154. this.title = "修改店铺";
  1155. let str = this.form.shippingType
  1156. this.form.shippingType = str.split(",")
  1157. this.form.cityIds = ((this.form.cityIds).split(",")).map(Number)
  1158. const dateFields = [
  1159. 'drugLicenseExpiry',
  1160. 'medicalDevice1Expiry',
  1161. 'medicalDevice2Expiry',
  1162. 'medicalDevice3Expiry',
  1163. 'foodLicenseExpiry',
  1164. 'medicalLicenseExpiry',
  1165. 'businessLicenseExpire'
  1166. ];
  1167. dateFields.forEach(field => {
  1168. const startField = field + 'Start';
  1169. const endField = field + 'End';
  1170. if (this.form[startField] && this.form[endField]) {
  1171. this.$set(this.form, field, [this.form[startField], this.form[endField]]);
  1172. }
  1173. });
  1174. // 入驻协议有效期
  1175. if (this.form.settlementAgreementStart && this.form.settlementAgreementEnd) {
  1176. this.$set(this.form, 'settlementAgreementExpiry', [
  1177. this.form.settlementAgreementStart,
  1178. this.form.settlementAgreementEnd
  1179. ]);
  1180. }
  1181. // 质量保证协议有效期
  1182. if (this.form.qualityAssuranceAgreementStart && this.form.qualityAssuranceAgreementEnd) {
  1183. this.$set(this.form, 'qualityAssuranceAgreementExpiry', [
  1184. this.form.qualityAssuranceAgreementStart,
  1185. this.form.qualityAssuranceAgreementEnd
  1186. ]);
  1187. }
  1188. // 其它特殊资质有效期
  1189. if (this.form.otherSpecialQualificationStart && this.form.otherSpecialQualificationEnd) {
  1190. this.$set(this.form, 'otherSpecialQualificationExpiry', [
  1191. this.form.otherSpecialQualificationStart,
  1192. this.form.otherSpecialQualificationEnd
  1193. ]);
  1194. }
  1195. });
  1196. },
  1197. /** 提交按钮 */
  1198. submitForm() {
  1199. this.$refs["form"].validate(valid => {
  1200. if (valid) {
  1201. // 处理表单数据
  1202. const formData = Object.assign({}, this.form);
  1203. // 处理城市ID
  1204. if (formData.cityIds) {
  1205. formData.cityIds = formData.cityIds.toString();
  1206. }
  1207. // 处理配送方式
  1208. if (formData.shippingType) {
  1209. formData.shippingType = formData.shippingType.toString();
  1210. }
  1211. // 处理日期范围字段
  1212. if (formData.drugLicenseExpiry && formData.drugLicenseExpiry.length === 2) {
  1213. formData.drugLicenseExpiryStart = formData.drugLicenseExpiry[0];
  1214. formData.drugLicenseExpiryEnd = formData.drugLicenseExpiry[1];
  1215. }
  1216. if (formData.medicalDevice2Expiry && formData.medicalDevice2Expiry.length === 2) {
  1217. formData.medicalDevice2ExpiryStart = formData.medicalDevice2Expiry[0];
  1218. formData.medicalDevice2ExpiryEnd = formData.medicalDevice2Expiry[1];
  1219. }
  1220. if (formData.medicalDevice1Expiry && formData.medicalDevice1Expiry.length === 2) {
  1221. formData.medicalDevice1ExpiryStart = formData.medicalDevice1Expiry[0];
  1222. formData.medicalDevice1ExpiryEnd = formData.medicalDevice1Expiry[1];
  1223. }
  1224. if (formData.medicalDevice3Expiry && formData.medicalDevice3Expiry.length === 2) {
  1225. formData.medicalDevice3ExpiryStart = formData.medicalDevice3Expiry[0];
  1226. formData.medicalDevice3ExpiryEnd = formData.medicalDevice3Expiry[1];
  1227. }
  1228. if (formData.foodLicenseExpiry && formData.foodLicenseExpiry.length === 2) {
  1229. formData.foodLicenseExpiryStart = formData.foodLicenseExpiry[0];
  1230. formData.foodLicenseExpiryEnd = formData.foodLicenseExpiry[1];
  1231. }
  1232. if (formData.medicalLicenseExpiry && formData.medicalLicenseExpiry.length === 2) {
  1233. formData.medicalLicenseExpiryStart = formData.medicalLicenseExpiry[0];
  1234. formData.medicalLicenseExpiryEnd = formData.medicalLicenseExpiry[1];
  1235. }
  1236. if (formData.businessLicenseExpire && formData.businessLicenseExpire.length === 2) {
  1237. formData.businessLicenseExpireStart = formData.businessLicenseExpire[0];
  1238. formData.businessLicenseExpireEnd = formData.businessLicenseExpire[1];
  1239. }
  1240. if (formData.settlementAgreementExpiry && formData.settlementAgreementExpiry.length === 2) {
  1241. formData.settlementAgreementStart = formData.settlementAgreementExpiry[0];
  1242. formData.settlementAgreementEnd = formData.settlementAgreementExpiry[1];
  1243. }else {
  1244. if(formData.settlementAgreement != null){
  1245. return this.$message.warning("其它资质-入驻协议,有效期开始日期或结束日期不能为空!");
  1246. }
  1247. }
  1248. if (formData.qualityAssuranceAgreementExpiry && formData.qualityAssuranceAgreementExpiry.length === 2) {
  1249. formData.qualityAssuranceAgreementStart = formData.qualityAssuranceAgreementExpiry[0];
  1250. formData.qualityAssuranceAgreementEnd = formData.qualityAssuranceAgreementExpiry[1];
  1251. }else {
  1252. if(formData.qualityAssuranceAgreement != null){
  1253. return this.$message.warning("质量保证协议,有效期开始日期或结束日期不能为空!");
  1254. }
  1255. }
  1256. if (formData.otherSpecialQualificationExpiry && formData.otherSpecialQualificationExpiry.length === 2) {
  1257. formData.otherSpecialQualificationStart = formData.otherSpecialQualificationExpiry[0];
  1258. formData.otherSpecialQualificationEnd = formData.otherSpecialQualificationExpiry[1];
  1259. }else {
  1260. if(formData.otherSpecialQualification != null){
  1261. return this.$message.warning("其它特殊资质,有效期开始日期或结束日期不能为空!");
  1262. }
  1263. }
  1264. if(!!this.switchValue){
  1265. formData.isBusinessLicensePermanent = 1;
  1266. }else{
  1267. formData.isBusinessLicensePermanent = 0;
  1268. }
  1269. if(!!this.switchMedicalValue){
  1270. formData.isMedicalDevice1ExpiryPermanent=1;
  1271. }else {
  1272. formData.isMedicalDevice1ExpiryPermanent=0;
  1273. }
  1274. if (formData.storeId != null) {
  1275. updateStore(formData).then(response => {
  1276. this.msgSuccess("修改成功");
  1277. this.open = false;
  1278. this.getList();
  1279. });
  1280. } else {
  1281. addStore(formData).then(response => {
  1282. this.msgSuccess("新增成功");
  1283. this.open = false;
  1284. this.getList();
  1285. });
  1286. }
  1287. }
  1288. });
  1289. },
  1290. /** 删除按钮操作 */
  1291. handleDelete(row) {
  1292. const storeIds = row.storeId || this.ids;
  1293. this.$confirm('是否确认删除店铺管理编号为"' + storeIds + '"的数据项?', "警告", {
  1294. confirmButtonText: "确定",
  1295. cancelButtonText: "取消",
  1296. type: "warning"
  1297. }).then(function() {
  1298. return delStore(storeIds);
  1299. }).then(() => {
  1300. this.getList();
  1301. this.msgSuccess("删除成功");
  1302. }).catch(() => {
  1303. });
  1304. },
  1305. handleRefresh(row) {
  1306. const storeIds = row.storeId || this.ids;
  1307. this.$confirm('是否确认重置店铺管理编号为"' + storeIds + '"的密码为XyzAbc~12 ', "警告", {
  1308. confirmButtonText: "确定",
  1309. cancelButtonText: "取消",
  1310. type: "warning"
  1311. }).then(function() {
  1312. return refreshPasWod(storeIds);
  1313. }).then(() => {
  1314. this.getList();
  1315. this.msgSuccess("修改成功");
  1316. }).catch(() => {
  1317. });
  1318. },
  1319. /** 导出按钮操作 */
  1320. handleExport() {
  1321. const queryParams = this.queryParams;
  1322. this.$confirm('是否确认导出所有店铺管理数据项?', "警告", {
  1323. confirmButtonText: "确定",
  1324. cancelButtonText: "取消",
  1325. type: "warning"
  1326. }).then(() => {
  1327. this.exportLoading = true;
  1328. return exportStore(queryParams);
  1329. }).then(response => {
  1330. this.download(response.msg);
  1331. this.exportLoading = false;
  1332. }).catch(() => {
  1333. });
  1334. },
  1335. handleStoreExport(row){
  1336. const queryStoreId = row.storeId;
  1337. this.exportLoading = true;
  1338. exportFsStream({ queryStoreId: queryStoreId }).then(response => {
  1339. this.download(response.msg);
  1340. this.exportLoading = false;
  1341. }).catch(() => {
  1342. this.exportLoading = false;
  1343. });
  1344. },
  1345. //长期有效营业执照选择
  1346. switchChange(){
  1347. console.log(this.form.isBusinessLicensePermanent);
  1348. },
  1349. }
  1350. };
  1351. </script>
  1352. <style>
  1353. .avatar-uploader .el-upload {
  1354. border: 1px dashed #d9d9d9;
  1355. border-radius: 6px;
  1356. cursor: pointer;
  1357. position: relative;
  1358. overflow: hidden;
  1359. }
  1360. .avatar-uploader .el-upload:hover {
  1361. border-color: #409EFF;
  1362. }
  1363. .avatar-uploader-icon {
  1364. font-size: 28px;
  1365. color: #8c939d;
  1366. width: 150px;
  1367. height: 150px;
  1368. line-height: 150px !important;
  1369. text-align: center;
  1370. }
  1371. .el-divider__text {
  1372. font-size: 16px;
  1373. font-weight: bold;
  1374. }
  1375. </style>